用户指南


连接入池

“DB2 Connect 企业版”服务器经常为成千上万个同时进行的客户机请求提供数据库连接。 建立和断开至数据库服务器的连接是一个很耗费资源的过程, 它对数据库服务器和 DB2 Connect 服务器性能有非常不利的影响。 这在 Web 网络环境中尤其明显, 在该环境中,每次对 Web 页的访问都会要求构建至数据库服务器的新连接、 执行查询和终止连接。要减少此额外开销, “DB2 Connect 企业版”使用连接入池来在可易于存取的存储池中维护打开的至数据库的连接。

连接入池的工作方式

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

要使用连接入池,必须对 DB2 OS/390 版的版本 6.1 应用以下 APAR:

     APAR PQ33473

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

DB2 Connect 在接收到其首个客户机请求后才建立至数据库的连接。 但是,可在任何客户机进行请求前填充空闲代理程序的存储池(如果希望这样做的话)。 可在使用 NUM_INITAGENTS 配置参数进行启动时填充该存储池。此参数确定应在启动时创建多少个空闲代理程序。 这些空闲代理程序将不会一开始就与主机数据库服务器连接。

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

可通过使用 MAX_COORDAGENTS 配置参数来控制可并行活动的最大代理程序数。一旦超出此数, 新的连接将失败,错误 sqlcode 为 SQL1226。(此代码意味着超出了并行出站最大连接数。)

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

DB2 Connect 连接集中器

DB2 Connect 的连接集中器技术可使 “DB2 Connect 企业版”服务器支持成千上万的用户同时执行商业事务, 同时大大减少了 S/390 主机或 AS/400 数据库服务器上所必需的资源。 它通过将来自所有应用程序的工作负荷集中放在数量少得多的 S/390 主机或 AS/400 数据库服务器连接上, 完成此目的。 虽然这可能看起来类似于上述的连接入池功能, 但实际上它是一个对大容量 OLTP(联机事务处理)应用程序减少资源消耗的更复杂方法。

连接入池节省了终止的应用程序不再需要连接时的建立连接成本。 换句话说,一个应用程序必须在另一个应用程序可重新使用存入池中的连接之前断开连接。

另一方面,连接集中器可使 DB2 Connect 在一个应用程序结束事务且不要求另一个应用程序断开连接时, 就可立刻与该另一应用程序相连接。基本上,仅当应用程序具有活动的事务时, 它才使用数据库服务器连接及其关联的主机和 DB2 Connect 资源。 一旦事务处理完成,连接及其关联的资源就可由需要执行事务的任何其他应用程序使用。

如何实现连接集中器

在先前版本的 DB2 Connect 中,每个活动的应用程序都具有 “引擎调度单元”(EDU),它管理数据库连接和任何应用程序请求。 此 EDU 通常被称为协调代理程序。每个协调代理程序都跟踪应用程序和 EDU 的状态或上下文。连接数增加时每个 EDU 都会占用相当数量的内存, 而代理程序间的上下文相关切换会产生其他额外开销。

在上述结构中,连接与 EDU 之间的关系是一对一的关系。但是, 连接集中器允许连接与 EDU 之间可为多对一的关系。即, 连接 (X) 对 EDU (Y) 的关系现在是 X >= Y。

连接集中器将代理程序分为两个实体,逻辑代理程序工作者代理程序。逻辑代理程序表示一个应用程序, 但与特定的 EDU 无关。逻辑代理程序包含应用程序所必需的所有信息和控制块。 如果有 n 个应用程序与该服务器连接, 则该服务器上将会有 n 个逻辑代理程序。 工作者代理程序是实际执行应用程序请求的 EDU, 但与任何给定的应用程序无永久性的关联。 工作者代理程序与要执行事务的逻辑代理程序相关联, 且在事务边界处结束关联,并返回至可用的存储池。

称为逻辑代理调度程序的实体将工作者代理程序分配给逻辑代理程序。对某些计算平台上打开文件句柄数的限制可能会在逻辑代理程序数超出文件句柄限制时产生多个调度程序实例。

激活集中器

要使用连接集中器,必须对 DB2 OS/390 版的版本 6.1 应用下列 APAR:

     APAR PQ33473

数据库管理程序配置参数 MAX_LOGICAGENTS 设置逻辑代理程序的最大数。 可通过将 MAX_LOGICAGENTS 的值设置为任何大于缺省值的数来激活集中器功能部件。MAX_LOGICAGENTS 的缺省值等于 MAX_COORDAGENTS 的值。因为每个应用程序都将具有一个逻辑代理程序, 所以 MAX_LOGICAGENTS 实际上控制可连接至数据库实例的应用程序数, 而 MAX_COORDAGENTS 控制可随时激活的入站连接数。 MAX_LOGICAGENTS 的数值范围将为 MAX_COORDAGENTS 至 64,000。逻辑代理程序的缺省数等于 MAX_COORDAGENTS。

有几个现存的配置参数用来配置代理程序。 这些参数如下所示:

MAXAGENTS
工作者代理程序的最大数。

MAX_COORDAGENTS
活动的协调代理程序最大数。

NUM_POOLAGENTS
代理程序存储池大小。代理程序存储池包括不活动的代理程序和空闲的代理程序。

NUM_INITAGENTS
存储池中工作者代理程序的初始数目。这些代理程序将是空闲代理程序。

XA 事务支持

连接集中器的结构允许 DB2 Connect 对 DB2 OS/390 版和 DB2 AS/400 版提供紧密耦合的 XA 事务支持。 集中器将工作者代理程序与特定的 XA 事务(单个 XID)相关联, 就象它对任何其他事务所作的那样。但是,如果 XA 事务是由 xa_end()(分支边界)结束的,则工作者代理程序将不会释放它本身并置于通用存储池中。 相反,工作者仍与该特定 XA 事务相关联。当另一个应用程序连接同一 XA 事务时, 工作者代理程序将与该应用程序相连。

任何事务边界调用将把代理程序返回至存储池。例如,xa_prepare()(只读)、xa_rollback()xa_recover()xa_forget()xa_commit() 或导致回滚的任何 XA 错误将把代理程序返回至普通存储池。 Xa_end() 本身仅结束事务分支, 而这不足以结束它与 XID 的关联。

示例

  1. 考虑这样一个环境:它需要 4,000 或更多个并行连接。 使用 CGI 应用程序的 Web 服务器或具有许多桌面用户的办公系统都可能会超出此需求。 在这些情况下,高效率的运作通常将要求 DB2 Connect 作为独立网关工作; 即,数据库和 DB2 Connect 系统是处在不同的机器上。

    DB2 Connect 服务器系统可能无法维护 4,000 个同时对数据库机器打开的连接。 大多数情况下,在任何给定时间发生的事务数将显著少于并行连接的数目。 从而,系统管理员可通过设置数据库配置参数(如下所示)来将系统效率提升至最高:

         MAX_LOGICAGENTS =  4,000
         MAX_AGENTS      =  1,000
         MAX_COORDAGENTS =  1,000
         NUM_POOLAGENTS  =  1,000
    

    集中器将会始终打开 4,000 个的并行对话,即使网关仅可同时管理 1,000 个事务亦如此。

  2. 在以上示例中,工作者代理程序将会不断形成和断开与逻辑代理程序的关联。 那些未处于空闲状态的代理程序可能会维持与数据库的连接, 但不参与任何特定事务,因此,它们可用于请求连接的任何逻辑代理程序(应用程序)。

    XA 事务的情况有些不同。对于此示例, 我们可假定 TP 监控程序正在与 DB2 Connect 网关及 OS/390 或 AS/400 数据库配合使用。应用程序请求连接时, 集中器将使不活动的代理程序转为处理该请求,或创建新的工作者代理程序。 假定应用程序请求 XA 事务。为此事务创建一个 XID, 且工作者代理程序与它相关联。

    在已处理应用程序的请求后, 应用程序发出 xa_end() 并从工作者代理程序断开连接。工作者代理程序仍与该事务的 XID 相关联。 现在,它仅可处理对具有其相关联 XID 的事务的请求。

    此时, 另一个应用程序可能会对非 XA 事务进行请求。即使没有任何其他可用的工作者应用程序, 与 XID 相关联的代理程序将不可用于第二个应用程序。它被视作是活动的。 将会为第二个应用程序创建新的工作者代理程序。 当该第二个应用程序完成其事务处理时, 它的工作者代理程序被释放到可用的存储池中。

    与此同时,请求与第一个代理程序 XID 相关联的事务的其他应用程序可能会与该代理程序相连和断开连接, 该代理程序为这些应用程序执行其专用的 XA 事务。任何请求该特定事务的应用程序将被发送至此工作者代理程序(如果它是空闲的话)。

    在应用程序发出事务边界调用(而不是 xa_end())以前, 工作者代理程序将不会被释放回通用存储池中。例如, 应用程序可能用 xa_commit() 结束事务, 同时工作者代理程序卸下它与该 XID 的关联,并返回至可用的存储池。此时, 任何请求的应用程序都可将其用于 XA 或非 XA 事务。

限制

对网关集中器的使用有一些重要的限制。在试图在系统上使用连接集中器之前, 全面复查下列信息。

数据库调整

系统性能将受主机或 AS/400 数据库服务器数据库性能的影响。

不同的数据库管理系统有不同的性能功能部件。 例如,不同系统的 SQL 优化器在同一应用程序中行为可能会不同。 检查主机或 AS/400 数据库服务器系统性能文档以了解详情。

对于 DB2 通用数据库 AS/400 版,您可能可通过使用“未落实的读取”(UR) 或“不落实” (NC) 联编选项以避免记入日志来改进性能。

注意:使用 UR 时,未记入日志的数据仅可读取,不能更新, 因此,仅当将分块设置为 ALL 时才可更新。

视应用程序服务器及其提供的锁定粒度的不同, 用于查询或应用程序的隔离级别可能对性能有显著的影响。

数据库应具有适当的规范化级别、索引的有效使用和数据库空间的合理分配。 性能还可受到所使用的数据类型的影响,下面几节作了描述。

调整 DB2 OS/390 版

OS/390 V1R3 对 TCP/IP 支持的需求最小。强烈建议使用 OS/390 V2R5 或更新版本。

“分布式数据设施”(DDF) 负责将分布式应用程序连接至 DB2 OS/390 版。DDF 应设置为应用程序服务器。 为此,可将远程系统的 LU 名插入到 SYSIBM.LUNAMES 表中, 或将 LUNAME、SYSMODENAME、USERSECURITY、ENCRYPTPSWDS、MODESELECT 以及 USERNAMES 值插入到 SYSIBM.SYSLUNAME 表中。然后对自举数据集 (BSDS) 执行 DDF 更新. 例如:

   DDF LOCATION=LOC1,LUNAME=LU1,PORT=8000,RESPORT=8001

为获取最佳性能,应使用建议的 DDF 地址空间优先次序 (如果处于 COMPAT 方式,则使用略低于或等于 DBMI 的次序)。在 VLF 中使用权限的 RACF高速缓存, 如果可能的话,则使用 V5 程序包权限高速缓存。 值 CACHEPAC=32768 对于大多数操作已经足够。

因为 DDF 将尝试连接 VTAM,所以 DDF 启动时 VTAM 必须处于活动状态。 样本 VTAM APPL 定义包括在以下项中:

   
    SYD51TC* APPL  AUTH=(ACQ),                                         X
               PARSESS=YES,                                            X
               HAVAIL=YES,                                             X
               EAS=1600,                                               X
               APPC=YES,                                               X
               DSESLIM=1024,                                           X
               DMINWNL=512,                                            X
               DMINWNR=512,                                            X
               AUTOSES=1,                                              X
               SECACPT=ALREADYV,                                       X
               SRBEXIT=YES,                                            X
               SYNCLVL=SYNCPT,                                         X
               MODETAB=DB2MODET,                                       X
               VPACING=63                                              X

可在 OS/390 中优化不活动的线程处理。在 V3 中,可最多并行连接 10,000 台客户机,而在 V4 和 V5 中则最多为 25,000 台。但是, 在所有情况下,可并行活动的最大台数为 1999。每个工作站客户机都可在其为不活动时保持连接状态; 其线程放在每个落实的不活动链上。

DSNZPARM 参数 CMTSTATCONDBATMAXDBAT 会影响线程处理。为获取最佳性能,将 CMTSTAT 设置为 INACTIVE,将 CONDBAT 调整为提供良好性能的已连接 DBAT 的最大数目,并将 MAXDBAT 调整为最大可接受活动 DBAT 数。

有关在 DRDA 网络中连接 DB2 OS/390 版的完整讨论 (包括 VTAM 配置),参考 Connectivity Supplement

数据转换

数据从一个环境传送至另一个环境时,它可能需要转换。这种转换可影响性能。

考虑下列平台:

以及下列类型的数字数据:

表 8显示何时发生转换。

表 8. 数据转换

 


Intel


IEEE


S/370 & S/390


OS/400


压缩十进制数据


Intel
IEEE
S/370/390
OS/400


























区域十进制数据


Intel
IEEE
S/370/390
OS/400


























整数数据


Intel
IEEE
S/370/390
OS/400


























浮点数据


Intel
IEEE
S/370/390
OS/400

























单字节字符数据转换的 CPU 成本通常小于数字数据转换(其中数据转换是必需的)的成本。

DATE/TIME/TIMESTAMP 的数据转换成本几乎与单字节 CHAR 的成本相同。浮点数据转换成本最高。应用程序设计者在设计基于 DB2 Connect 的应用程序时可能会要利用这些事实。

如果数据库表有一列定义为 'FOR BIT DATA', 则正在应用程序与数据库间传送的字符数据不需要进行任何数据转换。 这可在主机或 AS/400 数据库服务器上归档数据时使用。

字符数据的数据类型

字符数据可具有 CHAR 或 VARCHAR 数据类型。哪种数据类型更有效要视字段中数据的一般长度而定:

网络调整

改进分布式数据库环境总体性能的最好办法是除去网络中的延迟。 网络管理员普遍认为如果网络能够尽可能地收集传输中的数据,则它会更有效率。 此方法对诸如分布式数据库之类的应用程序不起作用, 原因是它在网络中造成了延迟。最终用户看不到网络的效率,只看得到延迟。

大部分网络设备具有延迟参数, 而这些参数中的大多数参数的缺省值对于分布式数据库而言都非常不能适用。 要改进性能,应找出这些参数,且如果有可能的话,将它们设置为零。 此外,还应确保设备上的缓冲区大小足够大,以防止由于丢失数据而进行重新发送。 例如,UNIX 系统的“传送”和“接收”队列深度缺省值通常为 32。 为了获得更好的效果,将队列深度设置为 150。DLC 设置上相应的参数为 “接收深度”,也应将它设置为 150。

在大部分地方,IOBUF 参数都设置得过低。它通常设置为 500, 但经验表明,如果正在移动大量的数据,值 3992 的效果最好, 特别是对于诸如 ESCON 或 3172 之类的通道连接时,更是如此。

对于 SNA 连接,应将任何工作站软件的“方式简要表”设置为 63。 一般说来,整个网络的接收调步值应设置为它们的最高值, 所以 DB2 APPL 语句上的 VPACING 和 PACING 参数, 以及处于交换主方式的工作站的 PU/LU 也应设置为 63。这样做的结果是: 使在发送方必须等待响应之前的信息流量显著增加。

在 LAN 系统上,DLC 或 LLC 传送和接收窗口大小对性能会有极大的影响。 发送值应设置为 7 或更高,而对于大部分配置而言, 接收值为 4 或更低时效果最好。

如果正在运行以太网,应将 TCP 段大小设置为 1500 个字节。 在令牌环或 FDDI 网络中,此值应为 4400 个字节, 而如果您正在将 ESCON 适配器与 TCP/IP 配合使用,则段大小应始终为 4096。

最后,对于 TCP/IP 网络,“TCP 发送和接收”缓冲区大小应设置为高于 32768。通常来说,值 65536是最佳的。
注意:建立从网关至服务器的连接(出站连接)比建立从客户机至网关的连接 (入站连接)花费要多得多。在一个数以千计的客户机通过网关频繁地连接至服务器及从服务器断开连接的环境中, 相当一部分处理时间都花在了建立出站连接上。DB2 Connect 提供了基于 TCP/IP 的连接入池。当客户机请求断开与服务器的连接时, 网关卸下与客户机的入站连接,但在存储池中保存与服务器的出站连接。 当新的客户机向网关请求连接时,网关提供存储池中的现存连接, 从而减少了总的连接时间并节省了服务器上的高 CPU 连接成本。

有关在 DB2 中的连接入池的详情,参考管理指南

下表提供了网络性能调整方法的摘要。


查找什么 示例 设置 注释
故意延迟 网络设备上延迟参数 设置为 0。 缺省值通常较高。
缓冲区 IOBUF 参数 设置为 3992。 对 ESCON 或其他通道适配器尤其有用。
RUSIZE 最优大小为 4096。 将 RUSIZE 和 RQRIOBLK 设置为相同的大小可产生最佳性能。
调步 VPACING、PACING 和“方式简要表”应设置为 63。 在适当的地方使用自适应调步。
适配器设置 传送/接收队列深度 建议值为 150。 缺省值通常为 32。
SNA 上的 DLC 开窗技术 将传送窗口大小设置得很高 (>7)。将接收窗口大小设置得很低(例如,设置为 1), 进行测试且逐渐增加大小值,以找出理想值。 每个逻辑设备都添加了延迟项。尽可能简化网络拓扑结构。
TCP 设置 段大小 在以太网上为 1500,在令牌环和 FDDI 上为 4400。 用于 TCP/IP 的 ESCON 适配器应始终设置为 4096。
发送/接收空间大小 两者都应为 64K。 对于 Windows,缺省值仅为 8792。可在 Windows 注册表中进行设置。

网络硬件

下列考虑事项与硬件相关:

争用系统资源

如果系统中的许多任务争用系统资源,性能可能会降低。 考虑下列问题:

性能疑难解答

如果 DB2 Connect 用户在从主机或 AS/400 服务器进行大型查询时的响应时间很长, 则应检查下列区域以找出性能问题的可能原因:

  1. 对于导致从主机或 AS/400 服务器返回大数据块的查询(通常为 32K 数据或更多), 应确保数据库管理程序配置参数 RQRIOBLK 设置为 32767。这可通过使用 “命令行处理器”(CLP) 来完成,如下所示:
       db2 update database manager configuration using RQRIOBLK 32767
    
  2. 如果在与主机或 AS/400 服务器的连接中使用 VTAM, 则查看“交换主方式”配置以了解 PACING 参数值。在 DB2 Connect 工作站上, 检查 IBMRDB 方式定义的“LU 6.2 方式简要表”的通信设置。 在此定义中,确保“接收调步窗口” 参数的值小于或等于在 VTAM 上定义的 PACING 值。DB2 Connect 工作站上的“接收调步窗口” 的常见值以及 VTAM 上的 "PACING" 的常见值为 8。
  3. 确保在 IBMRDB 方式定义中定义的最大 RU 大小被设置为合适的值。 对于使用令牌环硬件的连接,建议使用不低于 4K 的 RU 大小。 对于使用以太网硬件的连接,注意最大的以太网帧大小为 1536 个字节, 这可能是一个限制因素。
  4. 咨询所在环境的 VTAM 管理员, 以确保 VTAM 正在与 DB2 Connect 工作站的 LU-LU 对话中使用“自适应调步”。


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]