DB2 V9.7 for Linux, UNIX, and Windows

连接池

DB2 Connect™ 服务器产品(例如 DB2 Connect 企业版)通常同时为上千个客户端请求提供数据库连接。 建立和维护与数据库服务器的连接是一个很耗费资源的过程,它对数据库服务器和 DB2 Connect 服务器的性能有非常不利的影响。

这一问题在 Web 环境中尤其明显,在该环境中,对 Web 页面的每次访问都需要建立与数据库服务器的新连接,执行查询和终止连接。为减少此开销,DB2 Connect 服务器产品使用连接池来在易于访问的池中维护数据库的开放式连接。

基于 Web 技术的多数应用程序执行大量短期事务。典型的 Web 事务是作为其自身连接的一部分来执行的。换言之,执行事务意味着建立数据库连接然后在一些 SQL 语句之后终止此连接。这一建立和断开连接的过程中所需成本非常高。它涉及 DB2 Connect 代理进程的创建、此代理进程与 DB2® 服务器之间网络连接的建立以及服务器上 DB2 线程的创建。对于长期运行的连接,这些成本是根据在此连接上执行的所有事务来折旧的,但对于典型的 Web 事务,这些成本通常会超过执行事务本身的成本。

连接池是这样的一种技术,它允许对后续连接重复使用已建立的连接基础结构。启动 DB2 Connect 实例时,会创建协调代理进程池。连接请求出现时,会对此请求指定一个代理进程。该代理进程将连接到 DB2 服务器并且将在 DB2 中创建一个线程。当应用程序发出断开连接请求时,该代理进程不将此请求传送到 DB2 服务器。相反,将该代理进程放回到池中。池中的该代理进程仍然拥有它与 DB2 服务器的连接和相应的 DB2 线程。当另一应用程序发出连接请求时,将此代理进程指定到此新的应用程序。为确保安全操作,将用户标识信息传送到 DB2 线程,它再执行用户认证。

DB2 Connect 的连接池在这种环境中提供很大的性能改善。DB2 Connect 在可用池中维护数据库的开放式连接。客户机请求连接时,从此池中可以提供已准备好的连接。连接池显著降低了通常用在打开和关闭这些连接的开销。

连接池对于通过 DB2 Connect 连接至主机的应用程序是透明的。当应用程序请求断开与主机的连接时,DB2 Connect 断开与该应用程序的入站连接,但在池中保存与主机的出站连接。当新的应用程序请求连接时,DB2 Connect 使用现有池中的一个连接。使用已存在的连接减少了总体连接时间,以及主机上的高 CPU 连接成本。

DB2 Connect 代理进程可以是这两种状态之一:空闲或活动。代理进程在它为应用程序进行工作时处于活动状态。 一旦此工作完成,代理进程就进入空闲状态,等待来自同一或另一应用程序的进一步工作。所有空闲的代理进程都被一起保存在称为空闲代理进程池的池中。 可以使用 num_poolagents 配置参数来配置此池的大小。此参数等于想要系统维护的空闲代理进程的最大数目。 将此参数设置为零就等于关闭连接池功能。 此配置参数的缺省值设置为 AUTOMATIC,并且其值为 100。设置为 AUTOMATIC 时,DB2 Connect 会自动管理空闲代理进程池中的空闲代理进程数。

在接收到第一个客户机请求之前,DB2 Connect 不会建立与数据库的连接。但是,可在任何客户机进行请求前向池填充空闲代理进程。 可以在使用 num_initagents 配置参数进行启动时填充该池。此参数确定应在启动时创建多少个空闲代理进程。 这些空闲代理进程将不会一开始就与主机数据库服务器连接。

客户机请求与主机的连接时,DB2 Connect 将试图获取池中与主机数据库服务器连接的代理进程。如果该操作失败,DB2 Connect 将尝试在空闲池中查找可用的代理进程。 如果该池为空,那么 DB2 Connect 将创建新的代理进程。

可通过使用 max_coordagents 配置参数来控制可并行活动的最大代理进程数。一旦超出此数,新的连接将失败,错误 sqlcode 为 SQL1226。(此代码意味着超出了并行出站最大连接数。) 此配置参数的缺省值设置为 AUTOMATIC,并且其值为 200。设置为 AUTOMATIC 时,DB2 Connect 会自动管理协调代理进程数。

DB2 注册表变量 DB2CONNECT_IN_APP_PROCESS 允许在 DB2 Connect 服务器产品所在机器上运行的应用程序让 DB2 Connect 在应用程序进程内运行(缺省行为)或者使应用程序连接至 DB2 Connect 服务器产品,然后使主机连接在代理进程内运行。为使应用程序使用连接池,与主机的连接必须在 DB2 Connect 服务器产品代理进程中进行,因而 DB2CONNECT_IN_APP_PROCESS 必须设置为 NO。

DB2 Connect 连接池与应用程序服务器连接池

连接池对任何基于 Web 技术的,要支持大量事务的应用程序是必须的。现在大多 Web 应用程序服务器提供它们自己的数据库连接池方法。例如,Microsoft MTS(COM+)和 IBM® WebSphere® 都提供连接池。

这些服务器实现的应用程序合用机制明显不同于 DB2 Connect 服务器所提供的应用程序合用机制。由于应用程序服务器池连接仅供它们自己使用,所以它们通常假设用户标识、密码和隔离级别等等对所有连接将完全一样。更为重要的是,应用程序服务器仅池同一进程启动的连接。这表示不合用来自其他机器、用户或进程的连接。虽然这些应用程序服务器合用技术对应用程序的同一实例建立的连接进行复用是有效的,但是对多个用户和服务器等等的合用连接绝对无效。

连接池(由 DB2 Connect 服务器提供)与应用程序、机器和用户完全无关。对于来自多个客户机的连接,具有不同用户标识的所有应用程序服务器都可以复用相互的连接,就会让合用资源的利用率大大提高。

使用哪种类型的连接池是正确的?两种都是。通常,同时使用 DB2 Connect 连接池和“应用程序服务器”连接池是一个很好的策略,因为它们相互不影响。即使在启用应用程序服务器连接池时,DB2 Connect 连接池也可以为多个应用程序服务器以及使用 DB2 Connect 服务器的其他客户机提供连接复用。