适用于:Microsoft® SQL Server™ 2000 Analysis Services
摘要:学习如何使用 Microsoft XML for Analysis Provider 附带的连接池对象来开发
适用于 Microsoft SQL Server 2000 Analysis Services 的可伸缩客户端和 Web 应用程序
目录
简介
读者
连接池对象
使用连接池对象
请求和返回连接
平衡和收缩连接池
ADOConPool 对象
OLEDBConPool 对象
小结
其他信息
简介
资源管理是开发可伸缩客户端和基于 Web 的应用程序时需要考虑的一个重要问题。在构
造可为许多并发用户提供服务的客户端应用程序时,资源管理的指导原则是尽可能迟地分配资
源,并尽可能早地解除资源分配。资源(例如内存、进程线程以及网络或数据库连接)的可用
性与客户端应用程序的性能和用户的满意程度直接相关。因此,随着客户端应用程序的不断扩
通过对资源管理进行进一步的控制,连接池可以降低可伸缩性的影响。连接池使客户端应
用程序能够在连接池与给定资源之间建立连接,而不需要在每次使用时都重新建立连接。在连
接池中建立连接之后,客户端应用程序可以重复使用该连接,而不必执行完整的连接过程。
因为客户端应用程序不需要重复地建立和关闭连接,使用池缓冲的连接会显著提高连接性
能。此过程所需的时间对使用滞后时间较长的资源(例如 Internet 或网络连接)的客户端应
用程序来说尤其重要。当客户端应用程序不再需要连接时,该连接就返回到连接池。
除了可以提高性能以外,使用连接池还可以更有效地管理资源,同时又不会给客户端应用
程序增加额外的资源管理费用。连接池管理器可以根据需要分配和解除分配连接以维护连接池
为了支持使用 Microsoft SQL Server 2000 Analysis Services 的 Web 客户端应用程序
的可伸缩性需要,Microsoft XML for Analysis Provider 中已经实现了连接池功能。XML
for Analysis Provider 会自动使用连接池,另外也可以对其他不需要使用由提供程序本身提
供的 XML 连接的客户端应用程序使用此功能。本文旨在介绍一些对象,通过它们可以充分利
用 Analysis Services 客户端应用程序中的连接池。
读者
本文假定读者具备 SQL Server 2000 Analysis Services 以及 Microsoft
ActiveX® 数据对象 (ADO) 和 OLE DB 数据访问技术的基础知识。有关示例可在
Microsoft Visual Basic® 和 Microsoft Visual C++® 中找到。
连接池对象
XML for Analysis Provider 中提供了两个对象:ADOConPool 和 OLEDBConPool。
ADOConPool 对象用于管理 ADO 连接对象;OLEDBConPool 对象用于管理 OLE DB 会话对象。
虽然两种对象提供的连接池类型不同,但是它们均使用了相同的基础机制来管理连接池。在本
文中讨论这种共享的机制时,用术语“连接”来描述 ADO 连接对象和 OLE DB 会话对象。
连接池机制仅适用于 Microsoft SQL Server 2000 Service Pack 1 (SP1) 中包含的、已
经过更新的 Microsoft OLE DB Provider for OLAP Services 80 (MSOLAP2) OLE DB 提供
使用连接池对象
在支持 ADO 或 OLE DB 数据访问技术的编程语言中,可以使用 ADOConPool 和
OLEDBConPool 对象。但是,要在 Visual C++ 程序中使用这些对象,必须在程序中添加以下
编译器指令以包含正确的头文件和属性:
"tagPROPVARIANT") rename("_LARGE_INTEGER","")
rename("_ULARGE_INTEGER","")
using namespace MSXmlAnalysisSCLib;
请求和返回连接
从连接池请求连接所用的机制不同于 OLE DB 资源池对基于 Web 的应用程序进行快速访
问所用的机制。连接池对象将活动连接池分成两组:“可用连接”和“已用连接”。可用连接
由当前未分配给客户端应用程序的连接组成;已用连接是指当前已分配给客户端应用程序并被
连接请求需要采用特殊的身份验证和模拟机制。当通过应用程序请求连接时(
ADOConPool 对象使用 GetConnection 方法,而 OLEDBConPool 对象使用 GetSession 方法)
,连接池试图检索可用连接,检索条件是该连接使用的域名和用户名与客户端应用程序所用的
安全标识符 (SID) 相同。如果找到匹配的可用连接,则将其返回到客户端应用程序。
如果未找到与客户端 SID 信息匹配的连接,连接池对象就会对客户端请求中传递的连接
信息进行分析,以确定连接池中是否已经存在同一个请求数据库的可用连接。如果找到匹配的
数据库,连接池对象就会尝试将客户端请求的角色安全性与现有可用连接的角色安全性进行匹
配。如果发现角色安全性是匹配的,连接池对象会接着比较可用连接的用户名和客户端请求的
用户名。如果用户名也匹配,则将可用连接返回到客户端应用程序。如果用户名不匹配,则根
据 Analysis 服务器上的角色安全性,使用客户端请求的域和用户名重新验证可用连接,然后
如果未找到匹配的角色安全性和数据库,则在连接池中创建一个新的连接并将其分配给发
与资源共享通常采用的方法相比,此方法还具备一个优点,即发出请求的客户端应用程序
可以重复使用具有同一角色安全性权限的现有活动连接,即使该连接最初是由其他用户请求的
。与可用连接相关联的新用户名仍然通过了验证,因此能够维护其安全性,并且可以将该连接
提供给客户端。这就缩短了为大量并发用户提供服务的客户端应用程序的连接时间并降低了费
对于那些执行大量 *** 作并需要重复请求和返回连接的客户端应用程序来说,该机制的效率
更高。可以将同一个活动且经过验证的连接返回到发出请求的客户端应用程序。
对于客户端应用程序来说,将连接返回到连接池是一个非常简单的过程。客户端应用程序
将连接引用传递回连接池对象(ADOConPool 对象使用 ReturnConnection 方法,而
OLEDBConPool 对象使用 ReturnSession 方法)。连接池对象验证传递回的连接对象是否确实
注意事项
如果用户请求了某个连接,将其释放,然后又从连接池对象中请求另一个连接,则根据连
接池内的活动连接重新验证用户所使用的模拟机制将返回同一连接,而不需要重复访问
Analysis 服务器。如果用户释放第一个连接请求后其角色权限发生了变化,则第二个请求将
例如,某个用户在 Analysis 服务器上的角色为 Role A。Role A 使用户可以对两个多维
数据集 Cube A 和 Cube B 运行查询。当此用户所使用的客户端应用程序首次请求连接时,返
回的连接有权访问 Cube A 和 Cube B。客户端应用程序运行查询,然后释放连接。
Analysis 服务器的管理员现在将 Role A 的访问权限更改为只能访问 Cube A。如果此用户
的客户端应用程序请求另一个连接,首次请求时创建的连接将再次返回到该客户端应用程序,
但是,它仍然有权访问 Cube A 和 Cube B。虽然 Role A 对应的用户当前只能访问 Cube A
,但仍会对 Cube B 继续执行查询,就好象此用户对该多维数据集仍具有访问权限一样。
只有重新分配活动连接,才会出现这种问题;新创建的连接始终会跟 Analysis 服务器进
行验证。如果上面的示例中客户端应用程序首次请求的活动连接已超时,系统就会为该客户端
应用程序分配一个新创建的连接,这时该连接就具有正确的角色权限。
对于 Web 应用程序,解决此问题的最简单的方法是每当 Analysis 服务器上的角色发生
改变时都重新启动 Microsoft Internet Information Services (IIS),强制应用程序在请求
鉴于 IIS 线程管理的特性,当您创建基于 Web 的应用程序时,在 Active Server
Pages (ASP) Web 应用程序中使用 ADOConPool 和 OLEDBConPool 连接池对象时应该特别小心
。IIS 检查每个 COM 组件以确定其灵活性(COM 组件的线程处理和封送处理能力)。XML
for Analysis Provider 支持自由线程模块,但并不提供自由线程封送拆收器 (FTM)。正是由
于这个原因,IIS 50 或更高版本认为 XML for Analysis Provider 并不灵活。
这意味着如果使用 IIS 50 或更高版本的默认设置,ADOConPool 和 OLEDBConPool 对
象在缓存于 ASP 应用程序的应用程序或会话作用域中(换句话说,缓存于 ASP
Application 或 Session 对象变量中)时将使用系统安全性上下文。请求和返回连接中介绍
的模拟机制将无法正常工作。连接池对象在试图验证所有活动连接时将使用默认的 IIS 用户
为了纠正这一错误,请将 IIS 50 或更高版本的配置数据库中的
ASPTrackThreadingModel 设置更改为 True。更改此设置是为了防止 IIS 检查 COM 组件的灵
活性,但是,由于要进行封送处理和序列化,这会导致性能的降低,因此应该只在包含 Web
应用程序的虚拟目录或 Web 目录中更改此设置。
平衡和收缩连接池
连接池中包含的连接数目没有严格的限制,因为已将基础管理机制设计为无阻碍机制,即
客户端应用程序在请求连接时应该都能获得连接。正是由于无阻碍的特点,两个对象才能使用
不过,也可以使用两种不同的技术来管理连接池:“平衡”和“收缩”。
平衡连接池
每当将连接返回到连接池(ADOConPool 对象使用 ReturnConnection 方法,而
OLEDBConPool 对象使用 ReturnSession 方法)时,都会用到平衡技术。连接池对象将把活动
连接(已用连接和可用连接)的总数与 MaxSessions 属性值进行比较,以确定是否有必要平
衡连接池。如果活动连接的总数大于 MaxSessions 属性值,则需要进行平衡。
为了平衡连接池,连接池对象将根据自上次访问每个可用连接以来经过的秒数对可用连接
组进行排序。然后,该对象逐一删除那些经过时间最长的可用连接,直到已用连接和可用连接
的总数小于 MaxSessions 属性值或者没有任何活动的可用连接为止。
注意:平衡时不使用 Timeout 属性。
收缩连接池
每当客户端应用程序调用 ADOConPool 或 OLEDBConPool 对象的 Shrink 方法时,都会用
到收缩技术。此技术是针对过期的可用连接而言的。连接池对象将把每个可用连接的上次访问
时间与当前系统时间进行比较,如果相差的秒数大于 Timeout 属性值,就会删除该可用连接
但是,这两种技术都不适用于管理已用连接。在完成一项 *** 作之后,客户端应用程序负责
将连接返回到连接池,这样就可以把已用连接作为可用连接进行重新分配。连接池对象并不试
图管理已用连接,而是仅对可用连接进行平衡和收缩。使用此方法可以在性能和资源管理之间
ADOConPool 对象
ADOConPool 对象为使用 ADO 数据访问技术的客户端应用程序提供连接池,从而维护
ADOConPool 对象具有以下属性和方法:
MaxSessions 属性
MaxSessions 属性用于限制连接池中 ADO 连接对象(包括可用连接和已用连接)的数目
数据类型
长整型
权限
读/写
备注
由于连接池机制被设计为无阻碍机制,因而并不使用 MaxSessions 属性直接限制连接池
的增长。而是由 ReturnConnection 和 Shrink 方法使用此值来平衡和收缩连接池。有关平衡
和收缩的详细信息,请参阅本文前面介绍的平衡和收缩连接池。
Sessions 属性
Sessions 属性返回连接池中活动 ADO 连接对象的数目。
数据类型
长整型
权限
只读
备注
Sessions 属性报告由 ADOConPool 对象管理的连接(包括已用连接和可用连接)的总数
Timeout 属性
Timeout 属性设置或返回可用 ADO Connection 对象保持活动状态的秒数。
数据类型
长整型
权限
读/写
备注
与 MaxSessions 属性类似,Timeout 属性由 Shrink 方法用来识别要从连接池中删除的
活动可用连接。有关收缩的详细信息,请参阅平衡和收缩连接池。
GetConnection 方法
如果给定连接字符串,GetConnection 方法将返回 ADO Connection 对象。
语法
C++
HRESULT GetConnection([in] BSTR in_bstrCn, [out,retval] IDispatch
Visual Basic
Set io_ppADOConnection = objectGetConnection(in_bstrCn As String)
object
对 ADOConPool 对象的有效引用。
in_bstrCn
适用于 ADO Connection 对象的连接字符串。
io_ppADOConnection
返回的 ADO Connection 对象引用。
备注
此方法试图在创建新连接之前通过匹配连接和安全性信息,从连接池中请求现有的可用连
接。有关请求连接的详细信息,请参阅请求和返回连接。
ReturnConnection 方法
ReturnConnection 方法将 ADO Connection 对象返回到连接池。
语法
C++
HRESULT ReturnConnection([in,out] IDispatch io_ppADOConnection)
Visual Basic
objectReturnConnection io_ppADOConnection
object
对 ADOConPool 对象的有效引用。
io_ppADOConnection
要返回到连接池的 ADO Connection 对象。
备注
使用此方法返回连接之后,连接池对象会自动平衡可用连接。有关平衡连接的详细信息,
Shrink 方法
当 Shrink 方法被调用时,它将终止过期的可用 ADO 连接对象并从连接池中将其删除。
语法
C++
HRESULT Shrink()
Visual Basic
objectShrink
object
对 ADOConPool 对象的有效引用。
备注
客户端应用程序应该定期调用此方法,以终止并删除已经超时的可用连接。有关收缩连接
池的详细信息,请参阅平衡和收缩连接池。
OLEDBConPool 对象
OLEDBConPool 对象为使用 OLE DB 数据访问技术的客户端应用程序提供连接池,从而维
护 OLE DB 会话对象的集合。OLEDBConPool 对象适用于那些直接使用 OLE DB 对客户端数据
进行访问的应用程序,而大多数启用 Web 的应用程序应该使用 ADOConPool 连接池对象。
MaxSessions 属性
MaxSessions 属性用于限制连接池中 OLE DB 会话对象(包括可用会话和已用会话)的数
数据类型
长整型
权限
读/写
备注
由于连接池机制被设计为无阻碍机制,因而并不使用 MaxSessions 属性直接限制连接池
的增长。而是由 ReturnSession 和 Shrink 方法使用此值来平衡和收缩连接池。有关平衡和
收缩的详细信息,请参阅平衡和收缩连接池。
Sessions 属性
Sessions 属性返回连接池中活动 OLE DB 会话对象的数目。
数据类型
长整型
权限
只读
备注
Sessions 属性报告由 OLEDBConPool 对象管理的连接(包括已用连接和可用连接)的总
Timeout 属性
Timeout 属性设置或返回可用 OLE DB 会话对象保持活动状态的秒数。
数据类型
长整型
权限
读/写
备注
与 MaxSessions 属性类似,Timeout 属性由 Shrink 方法用来识别要从连接池中删除的
活动可用连接。有关收缩的详细信息,请参阅平衡和收缩连接池。
GetSession 方法
如果给定一组 OLE DB 属性,GetSession 方法将返回 OLE DB 会话对象。
语法
C++
HRESULT GetSession([in] int in_cPropSets, [in] DBPROPSET in_pPropSets,
[out,retval] IDBCreateCommand io_ppSession )
in_cPropSets
in_pPropSets 参数中引用的 tagDBPROPSET 类型结构的长度(以字节为单位)。
in_pPropSets
用来标识和(如果必要)创建 OLE DB 会话对象的 tagDBPROPSET 类型结构的指针。有关
tagDBPROPSET 类型结构的详细信息,请参阅 OLE DB 文档(英文)中的 DBPROPSET
io_ppSession
返回的 OLE DB 会话对象引用。对象引用被转换为 IDBCreateCommand OLE DB 接口。有
关 IDBCreateCommand 接口的详细信息,请参阅 OLE DB 文档(英文)中的
备注
此方法试图在创建新连接之前通过匹配连接和安全性信息,从连接池中请求现有的可用连
接。有关请求连接的详细信息,请参阅请求和返回连接。
ReturnSession 方法
ReturnSession 方法将 OLE DB 会话对象返回到连接池。
语法
C++
HRESULT ReturnSession([in,out] IDBCreateCommand io_ppSession);
io_ppSession
返回到连接池的 OLE DB 会话对象。
备注
使用此方法返回连接之后,连接池对象会自动平衡可用连接。有关平衡连接的详细信息,
Shrink 方法
当 Shrink 方法被调用时,它将终止过期的可用 OLE DB 会话对象并从连接池中将其删除
语法
C++
HRESULT Shrink()
备注
客户端应用程序应该定期调用此方法,以终止并删除已经超时的可用连接。有关收缩连接
小结
连接池是一种有效的资源管理方法。使用作为 Microsoft XML for Analysis Provider
的一部分提供的连接池对象,可以将这种资源管理方法扩展到使用 Microsoft SQL Server
2000 Analysis Services 的客户端应用程序,从而减少开发和实施过程中的开支,以低成本
实现高性能。
不知道你能看懂不能,我是看不懂
windows系统自带的“资源管理器”能查看端口使用情况,具体 *** 作方法如下:
(1)如下图红色箭头标记,鼠标右键单击任务栏空白处,在d出的右键菜单里选择“任务管理器”:
(2)如下图红色圆圈标记,在“任务管理器”里,切换到“性能”选项卡,再点击“打开资源管理器”:
(3)在“资源管理器”里,点击“网络”,在“网络活动的进程”中勾选需要查询的进程,这时最下面一栏“侦听端口”就会显示这个进程(软件)所使用的端口了:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)