当池服务器处在使用当中时,相当于一台专用服务器。对于来自常驻通道中的客户端连接请求,连接代理会为其选择一个合适的池服务器,并把客户端请求交给该池服务器处理,不再干涉。此后客户通过和该池服务器的直接对话来完成所有的数据库活动。当客户完成请求任务释放池服务器后,连接代理将重新接管该池服务器。
数据库连接池的使用
数据层
激活和配置连接池:数据库驻留连接池附有一个简单易用的数据库管理应用程序接口(API)。每个11g的数据库内存结构和后台进程中都有一个默认连接池。DBA可以使用如下PLSQL包“DBMS_CONNECTION_POOL”来配置和管理连接池。
SQL>execute dbms connection pool. configure pool(null, minsize=>10,
maxsize=>100, inactivity timeout=>300, max_think_time=>600, …); |
必须在客户端发出连接请求前启动连接池。下面的命令可以调出连接代理,代理会通过数据库监听器进行自注册。
SQL> execute dbms_connection_pool.start_pool; |
应用层
客户端与数据库驻留连接池的连接:OCI和OCCI客户端通过TCP/IP协议和简单的数据认证(用户名/密码认证)即可连接到数据库驻留连接池界面。客户端必须通过以下的连接字符串将服务器类型指定为POOLED:
myhost.dom.com:1521/sales:POOLED
OR (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myhost.dom.com) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales) (SERVER=POOLED))) |
1. 使用函数“OCISessionPoolCreate( )”以及数据库驻留连接池的连接字符串创建一个OCI Session Pool。此连接池能够保持与连接代理之间的永久连接。
2. 在OCISessionPool中调用函数“OCISessionGet( )”和“OCISessionRelease( )”以获取或释放池服务器。
3.在调用函数OCISessionGet之前,指定一个connection class值作为验证句柄(auth handle)的一个属性。
4. 如果没有指定连接类型,OCISessionPool名将被用作调用OCISessionPool的所有请求所用的连接类型,这样共享只能存在一个会话缓冲池内,就相当于一个普通的客户端会话缓冲池应用程序了。
OCCI客户端使用数据库常驻连接池
1. 调用函数“Environment::createStatelessConnectionPool( )”以及数据库驻留连接池的连接字符串创建一个OCCI Stateless Connection Pool。此连接池能够保持与连接代理之间的永久连接。
2. 在StatelessConnectionPool中调用函数“getConnection(…”APPCC”…)”和“releaseConnection( )”,以获取或释放池服务器。
PHP客户端使用数据库驻留连接池
Oracle计划加强与开源组织的合作,以增强PHP-OCI8的驱动程序对数据库驻留连接池的支持。这将使PHP应用软件能够以最小的资源限制与数据库保持永久的连接。
调整数据库连接池的设置
根据可用的硬件资源和并发需求,可灵活配置连接池的大小。参数minsize设置连接池能够提供并一直保持的服务器的最少数量。参数Maxsize则设置池服务器数量的上限。如果所有的连接池服务器已经都在被使用,且连接池提供的服务器数量达到了maxsize设置的上限时,客户端请求将会置于等待状态,直到某个池服务器被释放出来。
参数inactivity_timeout设置可帮助连接池结束闲置的池服务器,使资源利用最优化。通过设置max_think_time参数,可防止池服务器被一些不良客户端程序长期锁定。参数num_cbrok和maxconn_cbrok可用于分配从客户端到多连接代理的永久连接数目。当操作系统需要限制每个进程的最大连接数时,该功能尤其适用。
DBA视窗可用于监控数据库驻留连接池的性能状况,包括检查忙碌和闲置的服务器数量以及被连接池处理或忽略的请求数量(对照客户端请求总量)等。此外,通过调用dbms_connection_pool.alter_param和“dbms_connection_pool.configure_pool,还可以随时调整数据库驻留连接池的参数配置。
数据库连接池的可扩性
数据库驻留连接池通过在耗费最少资源的前提下保持使数据库的永久连接,提高了数据库和中间层的可扩性。数据库的实际连接资源仅被那些活跃连接所使用,并可通过设置连接池的大小来控制使用规模。
这能带来多少性能上的提升呢?每个闲置的客户端程序连接对内存需求很小,当每个客户端连接占用数据库会话持续时间很短的情况下,数据库驻留连接池所支持的客户端连接数量比专用服务器和共享服务器的要多得多。在Oracle进行的一次以2GB为系统容量的测试中,据库驻留连接池所能支持的连接数量是共享服务器的10倍,是专用服务器的20倍。
Oracle以OCI客户端为样本,对数据库驻留连接池进行了性能测试。客户端采用独立的OCI应用进程对池服务器发出并发请求,并执行查询和DML操作。其中,只读事务量和读写事务量的比例为3:1。只读事务包括一个“获取连接”操作,执行5个SELECT指令以及一个“释放连接”操作。而读写事务除了包括以上操作外,还增加了一个UPDATE指令。