DB2 通用数据库进程全接触
Dwaine Snow , DB2 UDB 和 Informix IDS 产品经理, IBM 多伦多实验室
Dwaine Snow 是 DB2 UDB 分区数据库以及查询巡视器(Query Patroller)和 IBM Informix IDS 的产品经理。Dwaine 过去 12 年一直效力于 IBM,过去 8 年里他一直从事 DB2 UDB 方面的工作。可以通过 dsnow@ca.ibm.com 与 Dwaine 联系。
Raul F. Chong , DB2 UDB 顾问, IBM 多伦多实验室
Raul F. Chong 是 IBM 多伦多实验室的数据库顾问,主要与 IBM 业务合作伙伴一起合作。Raul 在 IBM 工作已经有 5 年了,其中 3 年在 DB2 技术支持部(Technical Support)工作,另外 2 年则作为一名专攻数据库应用程序开发和从其它 RDBMS 迁移到 DB2 方面的顾问。可以通过 rfchong@ca.ibm.com 与 Raul 联系。
简介: 本文描述了 DB2 UDB 在 Linux、UNIX 和 Windows 上使用的进程,讨论了为什么您需要理解这些进程,还详述了它们的功能。
简介
UNIX 和 Linux 用户通常会检查运行在其服务器上的进程,以执行问题分析及检查服务器中消耗的资源。该信息不仅对执行问题和资源分析的管理员有用,而且对于那些开发高度可用性和故障转移脚本(这些脚本监控 DB2 进程,以确定何时需要进行诸如数据库重新启动或服务器故障转移之类的操作)的人也很有用。
如果您正在使用 AIX,则可以使用命令 ps -ef 检查进程。在 Solaris 和 HP-UX 上, ps -ef 将只显示所有服务器端进程(例如:代理程序、记录器、页面清除程序和预取程序)的 db2sysc 进程(主 DB2 引擎进程)。如果您正在使用 Solaris 或 HP-UX,利用命令 /usr/ucb/ps -axw 您可以看到这些服务器端进程。这两种版本的 ps 命令都可以在 Linux 上使用。
当在运行 DB2 通用数据库客户机或服务器软件的计算机上执行该命令时,您可能会看到列出了几个 DB2 进程。本文的目的是记录这些进程,并且解释它们的作用以及它们何时可能会运行。尽管手册 DB2 UDB V8 Administration Guide - Performance 的第 2 章记录了大多数重要的进程,但该列表并不完整。通过阅读本文,您将会理解每个 DB2 进程,当您看到那些进程时,您会开始明白 DB2 正在执行什么操作。
请注意,DB2 在 Windows 上工作方式的实现与基于 Linux 和 UNIX 环境的实现稍有不同。在 Windows 中,只有一个进程(db2sysc),在该进程下的每个引擎分派单元(engine dispatchable unit,EDU)都被作为线程来实现。尽管本文讨论的是进程,但是在 Windows 环境中应当把它们看成线程。通过 Windows 任务管理器(Task Manager),您将能够看到每个实例的 db2sysc 进程(db2syscs.exe)。还将显示其它 Windows 服务/进程,我们将在本文中解释它们是什么。
警告! 请勿直接干预正常 DB2 环境中的 DB2 进程。在 Linux 或 UNIX 中利用 kill -9 命令杀死 DB2 进程可能会导致 DB2 出现异常行为。例如,杀死 db2sysc 进程将使整个 DB2 实例停止运行。本文旨在帮助您理解进程,而不是直接操作它们。
为什么研究 DB2 进程?
我们的个人经验已表明这方面的知识很有价值,并且我们拜访的客户也向我们寻求这类信息。还不相信吗?看一看下面的实际方案,并且亲眼看看如何通过检查在系统上运行的 DB2 进程来解决问题:
方案 1:罕见的缓冲池页面的清除
一个运行电子商务(eCommerce)站点并使用 DB2 作为数据库服务器的客户报告说,在一整天里,数据库对应用程序请求的响应时间会不时地变得很长。数据库快照未显示当时有任何异常发生。通过检查服务器上进程在其中某一时刻的 CPU 使用情况,我们可以确定 I/O 清除程序(db2pclnr)消耗了超过 90% 的 CPU 时间。随后通过研究 I/O 清除程序触发器并对其进行相应的调优,我们消除了这种情况,使得电子商务站点每天可以处理的吞吐量提高了 50% 以上。
方案 2:真相大白
在拜访 IBM 的一家业务合作伙伴以进行一些 DB2 性能调优工作时,我们碰到了查询响应时间全面延长的问题。除了常规的程序之外,显示应用程序列表的命令并未显示当时有任何其它程序在运行。在获得 DB2 快照之前,我们看了一下运行在 DB2 服务器上的 DB2 进程,发现 db2rebal 进程正在运行。当将某个容器添加到 DMS 表空间时,就会使用该进程执行数据的重新均衡工作。客户“承认”,那天的早些时候他将一个容器添加到了包含 40 GB 表的表空间。一旦重新均衡工作完成,查询响应时间恢复如初。
揭开通知和诊断日志的庐山真面目
管理通知日志和诊断日志( db2diag.log )是重要的工具,管理员可以使用这些工具来理解数据库的活动和功能。这些日志通常包含有关 DB2 进程的信息,如下面取自 db2diag.log 项的示例所示:
2000-03-06-11.53.18.001160 Instance:myInst Node:000 PID:78121(db2agent (TEST)) TID:352 Appid:*LOCAL.payroll.000306140834 lock_manager sqlplrq Probe:111 Database:SAMPLE DIA9999E An internal return code occurred. Report the following: "0xFFFFE10E". |
在该示例中,消息来自进程标识号为 78121 的进程。该进程的名称是 db2agent,并与名为 TEST 的数据库相连。理解进程的功能有助于您了解管理通知日志和 db2diag.log 中各项的意义。
DB2 进程模型
尽管 DB2 Administration Guide - Performance 手册中介绍了 DB2 进程模型,但是本文还是将对其做一下简要概述。首先说明 代理程序(agent) 的概念。
代理程序
代理程序可被认为是一个代表应用程序执行所有数据库操作的“工作程序”。DB2 代理程序主要有两种:
-
协调程序代理程序(Coordinator Agent)(db2agent)
协调程序代理程序代表应用程序协调工作,并使用进程间通信(IPC)或远程通信协议与其它代理程序进行通信。所有来自客户机应用程序的连接请求,无论是本地还是远程的,都分配了相应的协调程序代理程序。 -
子代理程序(Subagent)(db2agntp)
如果启用了 intra_parallel 数据库管理器配置参数,协调程序代理程序就会把数据库请求分发给子代理程序(db2agntp)。这些代理程序执行应用程序的请求。一旦创建了协调程序代理程序,通过协调对数据库执行请求的子代理程序(db2agent),协调程序代理程序代表其应用程序处理所有数据库请求。
当某个代理程序或子代理程序完成其任务时,它就转为空闲状态。当子代理程序处于空闲状态时,其名称从 db2agntp 变为 db2agnta。
例如:
db2agntp 进程是活动的子代理程序,它们当前正在执行协调程序代理程序的工作。仅当启用了分区内并行性时,这些进程才存在。
db2agnta 进程是空闲的子代理程序,协调程序代理程序过去曾使用过它们。
空闲代理程序驻留在代理程序池中。这些代理程序可用于来自代表客户机程序进行操作的协调程序代理程序,或来自代表现有协调程序代理程序进行操作的子代理程序的请求。可用的代理程序数取决于数据库管理器配置参数 maxagents 和 num_poolagents 。
稍后我们将在本文中描述其它代理程序类型,如并行恢复代理程序(db2agnsc)。
下面两幅图显示了 DB2 进程模型。
图 1. 无连接集中的 DB2 进程模型(适用于非分区数据库)
图 1 中的圆圈表示引擎分派单元(EDU),在 Linux/UNIX 平台上称为进程,而在 Windows 上称为线程。
应用程序 A(App A)和 B(App B)是本地应用程序,运行它们的机器与 DB2 服务器所驻留的机器是同一台机器。当这些应用程序发出连接数据库的 CONNECT 命令时,db2ipccm 侦听器进程建立数据库管理器和应用程序之间的通信。db2ipccm 还将与协调程序代理程序 EDU(db2agent)一起工作,后者直接与客户机应用程序进行联系,以建立客户机应用程序和协调程序之间共享内存的通信。一旦建立了这种通信,本地客户机上的应用程序就被连接到数据库。
应用程序 C(App C)是一个远程应用程序,它所驻留的机器与用于 DB2 服务器的机器不同。远程客户机通过 db2tcpcm 侦听器进程建立 TCP/IP 通信。然后 db2tcpcm 与 db2agent 一起工作,后者成为应用程序的协调程序代理程序,并将连接传递给该代理程序。之后,协调程序代理程序与远程客户机应用程序进行联系,并被连接到数据库。
图 2. 无连接集中的 DB2 进程模型(适用于分区数据库)
图 2 与图 1 类似,但是它适用于分区数据库。Node0000 和 Node0001 表示两台不同的机器,这两台机器上分别驻留了一部分数据库。它们之间的进程和交互作用与图 1 中描述的相同;但是,有其它一些仅适用于该环境的进程。例如,db2fcmd 进程是快速通信管理器(Fast Communication Manager)进程,用于管理不同分区之间的通信。下一节中的表将更详细地描述适用于分区数据库的其它进程。
进程
以下各表分别根据每个实例、每个数据库以及按照功能列出了所有 DB2 进程。请注意,下表中的一些进程并不是按照字母顺序列出的,而是根据功能进行分组的。如果您希望以字母顺序查找进程,请参阅下面的 表 7 。
表 1. 每个实例的进程 — 无连接,无活动的数据库
进程名 |
描述 |
适用范围 |
db2cart |
确定何时归档日志文件,并调用用户出口来执行实际的归档工作。每个实例有一个 db2cart 进程,但是仅当实例中至少有一个数据库启用了 USEREXIT 时,该进程才运行。 |
所有 |
db2chkau |
由 DB2 审计工具使用以将一些项记录到审计日志。仅当启用了审计时该进程才是活动的。 |
所有 |
db2ckpw |
用于检查 DB2 服务器上的用户标识和密码。由于 DB2 依赖于操作系统级别的认证,因此,当某个用户或应用程序连接到服务器上的数据库时,使用该进程验证用户标识和密码。当将 AUTHENTICATION 设置为 SERVER 时,或者当连接是从非安全的操作系统建立的时候,就会进行认证。 |
UNIX/Linux |
db2disp |
DB2 代理程序分派器进程。当启用了连接集中时,该进程在分配给应用程序的逻辑代理程序和可用的协调代理之间分派应用程序连接。 仅当启用了连接集中时该进程才存在。 |
所有 |
db2fcmd |
FCM(快速通信管理器)守护程序,用于处理分区间的通信。每个服务器、每个分区就有一个这样的进程。 |
只适用于多分区数据库环境 |
db2fmcd |
故障监视器协调程序(Fault Monitor Coordinator)守护程序进程。每个物理机器就有一个这样的进程。 |
只适用于 UNIX |
db2fmd |
为每个由故障监视器监控的 DB2 实例而启动的故障监视器守护程序进程。该进程是由协调守护程序(db2fmcd)监控的,因此,如果您杀死 db2fmd 进程,那么 db2fmcd 将使其重新运行。 |
只适用于 UNIX |
db2fmtlg |
当数据库被配置成 LOGRETAIN ON 且 USEREXIT OFF 时,在日志路径中预分配日志文件。如果完成了该工作,那么在正常的处理过程中,当从一个日志文件切换到另一个日志文件时,引擎进程就无需等待。 |
所有 |
db2gds |
DB2 全局守护进程衍生程序(Global Daemon Spawner)进程,该进程启动 UNIX 上的所有 DB2 EDU(进程)。每个实例或每个数据库分区就有一个 db2gds。 |
只适用于 UNIX |
db2glock |
全局死锁检测器。该进程协调从每个数据库分区上的 db2dlock 进程收集的信息,以检查数据库分区之间是否存在死锁情形。db2glock 进程运行在多分区数据库的目录分区上。 |
只适用于多分区数据库环境 |
db2govd |
DB2 控制器,它是一个反应性的管理进程。如果启用了 DB2 控制器,该进程按照控制器配置文件中指定的时间间隔来拍摄快照,并依据所有的配置规则来检查快照。如果违反了某个规则,则采取指定的操作。 |
所有 |
db2panic |
紧急代理程序。如果任何数据库分区上的代理程序都不空闲,那么该进程就处理一些紧急的请求。 |
只适用于多分区数据库环境 |
db2pdbc |
PDB(并行数据库,Parallel Database)控制器。它处理来自远程节点的并行请求。 |
只适用于多分区数据库环境 |
db2rebal |
重新均衡器进程。当将容器添加到某个现有的表空间,并且需要对现有数据进行重新均衡时,就调用该进程。该进程异步地执行重新均衡工作。 |
所有 |
db2resyn |
重新同步管理器进程,用于支持使用两阶段提交的应用程序 |
所有 |
db2srvlst |
该进程用于管理系统(如 OS/390)的地址列表。 |
所有 |
db2sysc |
主 DB2 系统控制器或引擎。如果没有该进程,数据库服务器就不能运行。 |
所有 |
db2syslog |
系统记录器进程。该进程写到操作系统的错误日志工具。在 UNIX 上,必须通过编辑文件 syslog.conf 才能启用该进程。在 Windows 上,DB2 将自动编写 Windows 事件日志。 |
所有 |
db2wdog |
DB2 看守程序。在 UNIX 中,该进程是必需的,因为 UNIX 中的进程只能跟踪其父进程的标识。每次新进程启动时,db2gds 就会通知 DB2 看守程序。如果任何 DB2 进程接收到 ctrl-c 或其它异常信号,该进程就会向看守程序发送信号,而看守程序会将信号传播给实例中其它所有进程。 |
只适用于 UNIX |
dlasync |
DB2 数据链路(Data Link)(文件管理器)服务器的监视器。仅当 DB2 配置了数据链路时该进程才存在。 |
只适用于数据链路 |
表 2. 每个实例和每个连接
进程名 |
描述 |
适用范围 |
db2agent |
DB2 协调程序代理程序,它代表应用程序执行所有数据库请求。除非启用了连接集中器,否则每个已连接的应用程序都将有一个 db2agent 进程。 如果启用了分区内并行性,那么 db2agent 进程将调用 DB2 子代理程序来执行工作,并且它们会将结果集返回给协调程序代理程序,再返回给应用程序。 在分区数据库中,协调程序代理程序将位于应用程序连接到的分区上。 |
所有 |
db2agentg |
DRDA 应用程序请求器(Application Requester)的网关代理程序。 |
所有 |
db2agnsc |
并行恢复代理程序。在前滚和重新启动恢复的过程中使用该代理程序来并行地执行日志中的操作。与串行恢复相比,这可以缩短恢复时间。 注:该进程支持已记录事务中的并行性以及并行事务之间的并行性。 |
所有 |
db2agnta |
空闲的子代理程序,过去协调代理曾使用过,并且现在仍然与协调代理进程关联。 当 INTRA_PARALLEL dbm cfg 参数设置成 YES 时会出现该进程。 |
所有 |
db2agntp |
这是一个子代理程序,它代表与之相关的协调代理执行当前工作。这些进程提供了分区内并行性,也就是在数据库实例/分区中并行地执行查询的能力。 当 INTRA_PARALLEL dbm cfg 参数设置成 YES 时会出现该进程。 |
所有 |
db2ipccm |
IPC 通信管理器。每个数据库分区就有一个这样的管理器。这是用于本地客户机连接的进程间通信侦听器。 本地客户机连接是由运行 DB2 服务器的同一台计算机上的某个应用程序(如 CLP)建立的连接。 |
所有 |
db2tcpcm |
TCP 通信管理器。它充当 TCP/IP 连接请求的通信侦听器。当侦听器接收到连接请求时,它就将连接与代理程序相关联,然后再继续侦听更多连接请求。 |
所有 |
db2tcpdm |
用于 TCP/IP 发现请求的通信侦听器。当配置助手(CA)在网络中搜索远程 DB2 服务器及其数据库时,它就会发出发现请求。 |
所有 |
db2snacm |
SNA/APPC 通信管理器。它充当 SNA/APPC 连接请求的通信侦听器。当侦听器接收到连接请求时,它就将连接与代理程序相关联,然后再继续侦听更多连接请求。 |
所有 |
表 3. 每个实例和每个活动数据库
进程名 |
描述 |
适用范围 |
db2dlock |
本地死锁检测器,每个数据库分区就有这样一个检测器。它扫描锁定列表,并查找死锁情形。当遇到死锁情形时,其中涉及的某个应用程序/事务就被选做“牺牲品”并被回滚。 |
所有 |
db2estor |
用于复制数据库缓冲池和扩充存储器之间的页面。仅当启用了数据库的扩充存储器时这些进程才出现。 |
所有 |
db2event |
事件监视器进程。每个活动的事件监视器,每个活动的数据库就会有一个 db2event 进程。这些进程捕获已定义的“事件”并写到为事件监视器指定的输出文件。 |
所有 |
db2loggr |
数据库日志阅读器。该进程在执行下列操作时读取数据库日志文件:
|
所有 |
db2loggw |
数据库日志记录器。该进程使用日志缓冲区的日志记录对磁盘上的日志文件进行刷新。 |
所有 |
db2logts |
该进程用于收集有关当某个表空间被修改时哪些日志是活动的历史信息。该信息记录在数据库目录的 DB2TSCHG.HIS 文件中。通过启用跳过操作(即跳过前滚操作不需要的那些日志文件),可以使用该进程来加速表空间前滚恢复。 |
所有 |
db2pclnr |
缓冲池页面清除程序。这些进程以异步方式将“脏”页面从缓冲池写回到磁盘。“脏”页面是这样一个页面:在将该页面读入缓冲池后对其进行过更改,并且磁盘上的映像与缓冲池中的映像不再一样。 当页面清除程序被“触发”时,它们将同时全部运行。一旦它们完成其分配的工作,就进入睡眠状态,直到被再次触发。 页面清除程序的任务是确保缓冲池有空间可以容纳正在被应用程序检索的新页面。 每个数据库的页面清除程序的数量是通过 NUM_IOCLEANERS 数据库配置参数配置的。 |
所有 |
db2pfchr |
缓冲池预取程序。这些进程代表应用程序在读取数据和索引信息之前,从磁盘读该信息并且将该信息读入数据库缓冲池。预取程序异步地执行这个“预读(read-ahead)”操作。 代表应用程序进行工作的 DB2 代理程序发送预取请求,预取程序为这些请求提供服务。预取程序执行大块 I/O 来更有效地读取数据。每个数据库的预取程序的数量是由 NUM_IOSERVERS 数据库配置参数配置的。 |
所有 |
表 4. 按功能分类的其它进程
进程名 |
描述 |
适用范围 |
db2bm |
备份/恢复缓冲区操纵器。该进程用于在备份操作过程中从表空间进行读取,以及用于在恢复操作过程中写到表空间。通过 BACKUP 或 RESTORE 命令配置的每个备份/恢复缓冲区都将有一个 db2bm 进程。 |
所有 |
db2fmp |
这是一些受防护的进程,用于在防火墙外的服务器上运行用户代码,这些代码 既有 存储过程, 又有 用户定义的函数。 db2fmp 始终是独立的进程,但是根据它执行的例程类型,也可能是多线程的。 注: 该进程替换了 DB2 以前版本中使用的 db2udf 和 db2dari 这两个进程。 |
所有 |
db2lbs |
LOAD LOB 扫描程序。仅当装入工具正在装入带有 LOB 列的表时才使用它们。这些进程扫描表的 LOB 对象,并将该信息读回表中。 |
所有 |
db2lbmX |
LOAD 缓冲区操纵器。最后一个字符“X”表示一或更大的数字。该进程将已装入的数据写到数据库,并且可能涉及到异步 I/O。“X”始终是 1,不过通常也会是更大的数字,这取决于试探值(heuristic)。试探值取决于系统上的 CPU 数以及被写的容器数。 这个“智能的缺省值”可能会被 LOAD 命令的 DISK_PARALLELISM 修饰符覆盖。 我们应当明白,这个异步 I/O 不是某些操作系统支持的异步文件 I/O;它只意味着我们有一些写 I/O 的独立进程。这意味着,正在格式化数据的其它进程不用被 I/O 等待所束缚。 |
所有 |
db2lfrmX |
LOAD 格式化程序进程。最后一个字符“X”表示一或更大的数字。该进程将输入数据格式化成内部格式。它始终出现在 LOAD 中。该进程使用了智能的缺省值,它可能会被 CPU_PARALLELISM 修饰符覆盖,以选择最佳的 CPU 数。 |
所有 |
db2lfs |
当被装入的表包含 LONG VARCHAR 列时则使用这些进程。这些进程用来读和格式化表中的 LONG VARCHAR 列。 |
所有 |
db2lmr |
这是一个 LOAD 媒体阅读器(Media Reader)进程。它读取装入输入文件,一旦读完所有输入文件,该进程就会消失。甚至在整个装入操作完成之前该进程就会消失。 |
所有 |
db2lmwX |
这些是 LOAD 媒体记录器进程。最后一个字符“X”表示一或更大的数字。 如果为 LOAD 命令指定了“装入副本(load copy)”选项,那么该进程将生成装入副本。装入副本本质上就是装入到表中的数据备份。 这些媒体记录器与 BACKUP 和 RESTORE 使用的媒体记录器相同。就象在命令行上描述的那样,每个复制会话调用一个媒体记录器(您可以创建多个文件的装入副本)。如果没有装入副本,则没有媒体记录器。它们根据数据的类型在装入时从其它进程获取输入,但是,由缓冲区操纵器写的每位数据通常都将被传递到媒体记录器。就如同其它所有的进程那样,它们由装入代理程序控制。 |
所有 |
db2lrid |
该进程在 LOAD 期间执行索引排序,并构建索引记录标识(Record ID,RID)。 该进程不会出现在非并行数据库实例(即禁用 INTRA_PARALLEL 的实例)中。该进程执行的任务由非并行实例中的格式化程序 EDU 完成。 该进程完成下列三种功能:
|
所有 |
db2ltsc |
LOAD 表扫描程序。这些进程扫描数据对象,查找被装入的表,并读取 LOAD 工具的信息。在 LOAD 追加操作过程中使用这些进程。 |
所有 |
db2linit |
LOAD 初始化子代理程序。这个子代理程序获取数据库分区上必需的资源,并将应答序列化,返回给装入目录子代理程序。 |
只适用于多分区数据库环境 |
db2lcata |
LOAD 目录子代理程序。这个子代理程序只在目录分区上执行,它负责:
该目录子代理程序还查询系统目录表以确定哪些分区用于数据分割和分区。 正常的装入作业只有一个目录子代理程序。异常情况是装入无法获取某些分区上的装入资源。如果数据库分区上的设置错误被隔离出来,那么协调程序将从装入的内部分区列表除去发生故障的分区,并衍生一个新的目录子代理程序。这一过程会重复进行,直到成功获取所有分区上的资源,或者在所有分区上都遇到了故障。 |
只适用于多分区数据库环境 |
db2lpprt |
装入预分区子代理程序。这个子代理程序将输入数据从一个输入流预分区成多个输出流,每个分区子代理程序都有一个这样的进程。 每个输入流都将有一个预分区子代理程序。 |
只适用于多分区数据库环境 |
db2lpart |
装入分区子代理程序。这个子代理程序将输入数据分区成多个输出流,将写入数据的每个数据库分区都有一个这样的进程。 分区子代理程序的数量可以由用户进行配置。缺省数量取决于输出数据库分区的总数。 |
只适用于多分区数据库环境 |
db2lmibm |
装入微型缓冲区操纵器子代理程序进程。 如果为装入使用了 partition_only 方式,那么该子代理程序就编写分区的输出文件。 每个输出数据库分区就有一个微型缓冲区操纵器子代理程序。 |
只适用于多分区数据库环境 |
db2lload |
装入子代理程序进程。这个子代理程序负责完成每个数据库分区上的装入操作。它衍生格式化程序、ridder、缓冲区操纵器和媒体记录器 EDU,并监视它们的工作。 每个输出数据库分区都有一个装入子代理程序。 |
只适用于多分区数据库环境 |
db2lrdfl |
装入读文件子代理程序进程。这个子代理程序读取给定数据库分区上的消息文件,并将数据发送回客户机。每个输出分区、分区的分区和预分区的分区都有一个读文件子代理程序。 |
只适用于多分区数据库环境 |
db2llqcl |
装入查询清除子代理程序进程。这个子代理程序从给定分区除去所有装入临时文件。 每个输出分区、分区的分区和预分区的分区都有一个清除子代理程序。 |
只适用于多分区数据库环境 |
db2lmitk |
装入微型任务子代理程序进程。这个子代理程序释放了在某次从游标调用的装入或 CLI 装入中使用的所有 LOB 定位器。 运行在协调程序分区上的每个游标/CLI 装入都有一个微型任务子代理程序。 |
只适用于多分区数据库环境 |
db2lurex |
装入用户出口子代理程序进程。这个子代理程序运行用户的文件传送命令。 使用文件传送命令选项的每个装入作业都将有一个用户出口子代理程序。 |
只适用于多分区数据库环境 |
db2lmctk |
该进程用于持有、释放或降级(downgrade)目录分区上持有的由于装入而产生的锁。 |
只适用于多分区数据库环境 |
d2med |
这些进程对用于 LOAD、备份和恢复的数据库表空间进行读和/或写操作。 它们将已格式化页面中的数据写到表空间容器。 |
所有 |
db2reorg |
该进程用于执行 DB2 V8.1 中新的联机 — 就地重组操作。该进程的工作原理类似于磁盘整理碎片工具,它以特定的顺序放置数据行。 |
所有 |
表 5. 一些常用的可执行文件
进程名 |
描述 |
适用范围 |
db2 |
DB2 命令行处理器(CLP)前台进程。它解析 DB2 命令和 SQL 语句等。 该进程是 DB2 CLP 的交互式组件。 这个前端/后端配置对于命令行性能确实有一些益处:前端处理到用户的连接,而后端与数据库进行连接。 您可以使用 CTRL-C/CRTL-Break 来停止处理工作(即当返回太多记录时),而无需杀死到数据库的连接。 |
所有 |
db2bp |
这是 DB2 CLP 的持久后台进程,并且它是实际连接到数据库的进程。 因为 DB2 CLP 允许 OS 及 DB2 命令/语句,因此这个后台进程是必需的。 |
所有 |
db2cmd |
类似于 db2 可执行文件,但适用于 Windows。db2cmd 调用 Windows 命令窗口。在 Windows 上,当父线程被终止时,它们不能终止其子进程。DB2 命令行处理器具有一个前端和后端进程/线程,因此我们需要一个 cookie(通过 DB2CMD.EXE 启动的)在 Windows 上将这些线程联系在一起,这样,如果用户退出或杀死前端进程,那么后端进程也被终止。 |
只适用于 Windows |
db2start |
启动 DB2 引擎的用户命令。 |
所有 |
db2star2 |
真正的 db2start 程序。 |
所有 |
db2stop |
停止 DB2 引擎的用户命令。 |
所有 |
db2stop2 |
真正的 db2stop 程序。 |
所有 |
表 6. 其它 Windows 服务/进程
进程名 |
描述 |
db2dasrrm.exe |
DB2 管理服务器(Admin Server)进程。通过使用 DB2 控制中心(Control Center),该进程支持本地和远程管理请求。 |
db2dasstm.exe |
DB2 管理服务器工具 DB 管理器进程。如果已经在 DB2 服务器上设置了该进程,那么它就会将信息存入工具数据库,并从工具数据库检索信息。 |
db2fmp.exe |
该进程处理/执行所有受防护的存储过程和 UDF。 |
db2rcmd.exe |
DB2 远程命令服务(Remote Command Service),它自动处理分区间的管理通信。 |
db2jds.exe |
DB2 JDBC applet 服务器服务。该服务拦截和处理连接到 DB2 服务器的所有 JDBC 应用程序。 |
db2licd.exe |
DB2 许可证守护程序。该进程验证 DB2 启动时正确的 DB2 许可证是否安装到了服务器上。 |
db2sec.exe |
在 Windows 的 DB2 服务器上使用该进程来检查用户标识和密码。由于 DB2 依赖于操作系统级别的认证,因此,当某个用户或应用程序连接到服务器上的数据库时,使用该进程验证用户标识和密码。当将认证设置为 SERVER 时,或者当连接是从非安全的操作系统建立的时候,就会进行这一认证。 |
db2syscs.exe |
Windows 上的主要 DB2 系统控制器或引擎。EDU 是该进程中的线程。 请注意末尾的“s”代表 Windows 服务。 |
IWH2SERV.EXE |
仓库管理器中心(Warehouse Manager Center)。该中心作为 DB2 ESE 的一部分(而不是 DB2 引擎的一部分)安装。 |
下表可能是一个非常有用的索引,可以用它来找到给定的进程。它以字母顺序列出了所有进程,并且带有到上述表的链接。
表 7. 按字母顺序排列的所有进程
# |
进程/Windows 服务/可执行文件名 |
到提供更详细信息的表的链接 |
1 |
db2 |
|
2 |
db2agent |
|
3 |
db2agentg |
|
4 |
db2agnsc |
|
5 |
db2agnta |
|
6 |
db2agntp |
|
7 |
db2bm |
|
8 |
db2bp |
|
9 |
db2cart |
|
10 |
db2chkau |
|
11 |
db2ckpw |
|
12 |
db2cmd |
|
14 |
db2dasrrm.exe |
|
15 |
db2dasstm.exe |
|
16 |
db2disp |
|
17 |
db2dlock |
|
18 |
db2estor |
|
19 |
db2fcmd |
|
20 |
db2fmcd |
|
21 |
db2fmd |
|
22 |
db2fmp |
|
23 |
d2fmtlg |
|
24 |
db2gds |
|
25 |
db2glock |
|
26 |
db2govd |
|
27 |
db2ipccm |
|
28 |
db2jds.exe |
|
29 |
db2lbmX |
|
30 |
db2lbs |
|
31 |
db2lcata |
|
32 |
db2lfrmX |
|
33 |
db2lfs |
|
34 |
db2licd.exe |
|
35 |
db2linit |
|
36 |
db2lload |
|
37 |
db2llqcl |
|
38 |
db2lmctk |
|
39 |
db2lmibm |
|
40 |
db2lmitk |
|
41 |
db2lmr |
|
42 |
db2lmwX |
|
43 |
db2loggr |
|
44 |
db2loggw |
|
45 |
db2logts |
|
46 |
db2lpart |
|
47 |
db2lpprt |
|
48 |
db2lrdfl |
|
49 |
db2lrid |
|
50 |
db2ltsc |
|
51 |
db2lurex |
|
52 |
db2med |
|
53 |
db2panic |
|
54 |
db2pclnr |
|
55 |
db2pdbc |
|
56 |
db2pfchr |
|
57 |
db2rcmd.exe |
|
58 |
db2rebal |
|
59 |
db2reorg |
|
60 |
db2resyn |
|
61 |
db2sec.exe |
|
62 |
db2snacm |
|
63 |
db2srvlst |
|
64 |
db2start |
|
65 |
db2star2 |
|
66 |
db2stop |
|
67 |
db2stop2 |
|
68 |
db2sysc |
|
69 |
db2syscs.exe |
|
70 |
db2tcpcm |
|
71 |
db2tcpdm |
|
72 |
db2wdog |
|
73 |
dlasync |
|
74 |
IWH2SERV.EXE |
示例
下面这一节为您演示了一些输出示例,当您在 AIX 中执行 ps -ef 命令时可能会获得这样的输出。
运行 db2start 之后:
root 49504 1 0 13:13:07 - 0:00 db2wdog db2inst1 22142 49180 0 13:13:10 - 0:00 db2gds db2inst1 43072 49180 0 13:13:17 - 0:00 db2syslog db2inst1 45294 74134 0 12:12:43 pts/2 0:00 /usr/bin/ksh db2inst1 49180 49504 0 13:13:10 - 0:00 db2sysc db2inst1 55920 49180 0 13:13:19 - 0:00 db2resync db2inst1 59012 22142 0 13:13:19 - 0:00 db2srvlst db2inst1 60680 49180 0 13:13:17 - 0:00 db2ipccm |
数据库管理器配置文件包含下列设置,它们会影响您最初看到的进程:
Max number of existing agents (MAXAGENTS) = 200 Agent pool size (NUM_POOLAGENTS) = 100(calculated) Initial number of agents in pool (NUM_INITAGENTS) = 0 |
由于 NUM_INITAGENTS 是 0,所以在运行 db2start 时不会显示“db2agent (idle)”进程。例如,如果在运行 db2start 之前将 NUM_INITAGENTS 设置为 5,那么在发出 db2start 之后,将显示下面这些额外的进程:
db2inst1 35542 59814 0 16:25:57 - 0:00 db2agent (idle) db2inst1 43096 59814 0 16:25:57 - 0:00 db2agent (idle) db2inst1 49628 59814 0 16:25:57 - 0:00 db2agent (idle) db2inst1 58170 59814 0 16:25:57 - 0:00 db2agent (idle) db2inst1 64012 59814 0 16:25:57 - 0:00 db2agent (idle) |
在连接到数据库 SAMPLE 后(NUM_INITAGENTS 的值仍然保持为 0)
root 49504 1 0 13:13:07 - 0:00 db2wdog db2inst1 25844 35124 0 16:04:50 - 0:00 db2pfchr db2inst1 35124 65638 0 16:04:17 - 0:00 db2gds db2inst1 35540 35124 0 16:04:50 - 0:00 db2loggr (SAMPLE) db2inst1 41940 65638 0 16:04:19 - 0:00 db2resync db2inst1 45058 35124 0 16:04:50 - 0:00 db2pfchr db2inst1 49300 35124 0 16:04:19 - 0:00 db2srvlst db2inst1 49626 35124 0 16:04:50 - 0:00 db2dlock (SAMPLE) db2inst1 55852 65638 0 16:04:17 - 0:00 db2ipccm db2inst1 58168 35124 0 16:04:50 - 0:00 db2loggw (SAMPLE) db2inst1 59048 35124 0 16:04:50 - 0:00 db2pfchr db2inst1 64010 55852 0 16:04:50 - 0:00 db2agent (SAMPLE) db2inst1 65638 22238 0 16:04:17 - 0:00 db2sysc db2inst1 70018 35124 0 16:04:50 - 0:00 db2pclnr db2inst1 72120 35124 0 16:04:51 - 0:00 db2event (DB2DETAILDEADLOCK) db2inst1 74198 65638 0 16:04:17 - 0:00 db2syslog db2inst1 74578 1 0 16:04:47 - 0:00 /home/db2inst1/sqllib/bin/db2bp 50112C14631 5 |
连接到 SAMPLE 数据库后,“db2agent (SAMPLE)”进程出现了。该进程表明实际上有一个到 SAMPLE 数据库的连接。如果我们发出以下命令:
db2 connect reset |
db2agent (SAMPLE) 现在将变成 db2agent (idle)。这是因为 NUM_POOLAGENTS 被设置成了大于零的数,这意味着该代理程序尽管是空闲的,但在池中将仍然保持被分配的状态。如果 NUM_POOLAGENTS 被设置成零,那么在运行了“connect reset”后,将不再有 db2agent 进程运行。
SAMPLE 数据库的数据库配置文件包含下列这些设置:
Number of asynchronous page cleaners (NUM_IOCLEANERS) = 1 Number of I/O servers (NUM_IOSERVERS) = 3 |
请注意,有三个 db2pfchr 进程(与 NUM_IOSERVERS 的值对应)和一个 db2pclnr 进程(与 NUM_IOCLEANERS 的值对应)。
结束语
根据不同的 DB2 操作和配置设置,将会有许多其它进程出现和消失。我们已经为您展示了一些样本方案,这些方案演示了您可以如何观察哪些进程正在运行、这些进程表明了什么以及数据库设置对其产生了怎样的影响。现在您可以使用这一知识来提高您管理 DB2 数据库的能力。
致谢
特别感谢 IBM 多伦多实验室服务咨询团队的 Bob Harbus,感谢他为本文所做的工作。
作者简介
Dwaine Snow 是 DB2 UDB 分区数据库以及查询巡视器(Query Patroller)和 IBM Informix IDS 的产品经理。Dwaine 过去 12 年一直效力于 IBM,过去 8 年里他一直从事 DB2 UDB 方面的工作。可以通过 dsnow@ca.ibm.com 与 Dwaine 联系。
Raul F. Chong 是 IBM 多伦多实验室的数据库顾问,主要与 IBM 业务合作伙伴一起合作。Raul 在 IBM 工作已经有 5 年了,其中 3 年在 DB2 技术支持部(Technical Support)工作,另外 2 年则作为一名专攻数据库应用程序开发和从其它 RDBMS 迁移到 DB2 方面的顾问。可以通过 rfchong@ca.ibm.com 与 Raul 联系。