DB2进程体系结构
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进程,当您看到这些进程时,您会明白DB2正在执行什么操作。
本章主要讲解如下内容:
● DB2进程技术模型
● 代理进程通信
● 实用程序相关进程
● DB2 V9.5多线程体系结构
2.1 DB2 进程技术模型
DB2进程技术模型的知识可以帮助您确定问题的性质,因为它会帮助您理解数据库管理器和与其相关联的组件如何交互作用。所有DB2服务器使用的进程技术模型使数据库服务器与客户机以及本地应用程序之间的通信更加容易。它还确保数据库应用程序独立于数据库控制块和关键数据库文件之类的资源。
对于正在访问的每个数据库,启动各种引擎调度单元(Engine Dispatchable Unit,EDU)以处理各种数据库任务,例如预取、通信和日志记录。数据库代理程序是一类特殊的EDU,创建它们是为了处理数据库的应用程序请求。
数据库会为每个客户机应用程序连接分配一个协调代理程序。协调代理程序代表应用程序工作,并根据需要使用专用内存、进程间通信(IPC)或远程通信协议与其他代理程序通信。
DB2进程体系结构提供一个防火墙,以便应用程序在不同于DB2的地址空间中运行。防火墙将数据库和数据库管理器与应用程序、存储过程和用户定义的函数(UDF)隔开。防火墙维护数据库中数据的完整性,原因是它禁用应用程序编程错误覆盖数据库管理器的内部缓冲区或文件。防火墙还提高了可靠性,原因是应用程序错误不能使数据库管理器崩溃。DB2的进程技术模型如图2-1、图2-2所示。
图2-1 DB2进程技术模型图1(适用于DB2 V9.5之前版本)
下面我们详细介绍DB2进程技术模型中的相关进程。
图2-2 DB2进程技术模型图2
2.1.1 与操作系统相关的进程
我们都知道DB2是安装在操作系统上的,因而在我们使用DB2数据库时,会产生一些和操作系统相关的进程,通常这些进程的owner是操作系统的root用户。下面是在AIX上我们使用“ps –ef |grep –I db2”命令的输出结果:
$ ps -ef |grep db2
owner pid ppid
------------------------------------------------------------------------
root 315626 1 0 02:31:45 - 0:00 db2wdog 0
db2inst1 434408 536582 0 02:31:47 - 0:00 db2srvlst 0
db2inst1 438308 520202 0 02:31:48 - 0:01 db2hmon 0
db2inst1 499808 536582 0 02:31:48 - 0:00 db2spmlw 0
root 512010 520202 0 02:31:46 - 0:00 db2ckpwd 0
db2inst1 520202 315626 0 02:31:46 - 0:00 db2sysc 0
root 528386 520202 0 02:31:46 - 0:00 db2ckpwd 0
root 532484 520202 0 02:31:46 - 0:00 db2ckpwd 0
root 53897 1 0 02:31:46 - 0:00 db2licc 0
db2inst1 536582 520202 0 02:31:46 - 0:00 db2gds 0
db2inst1 540680 520202 0 02:31:46 - 0:00 db2ipccm 0
db2inst1 544778 520202 0 02:31:46 - 0:00 db2tcpcm 0
---------------------------------略-------------------------------------
在命令的输出中我们可以看到“db2wdog”、“db2ckpwd”和“db2licc”进程的owner都是操作系统的root用户,下面我们详细讲解这些和操作系统相关的进程。
db2wdog进程
我们都知道在UNIX/Linux上,init进程是所有进程的父进程;同样,在DB2的进程中,“db2wdog”进程是所有其他DB2进程的父进程。这个进程是由操作系统的init进程派生的。从上面的命令输出中我们可以看到“db2wdog”的“ppid”(parent pid)是操作系统的init进程。“db2wdog”进程是在UNIX和Linux操作系统上处理异常终止的看守程序。
“db2wdog”是“db2 watch dog”的缩写,是看门狗的意思,这个进程的工作机制如图2-3所示。
图2-3 db2wdog进程的工作机制
图2-3 db2wdog进程的工作机制
在UNIX中,“db2wdog”看守程序是必需的,因为UNIX中的进程只能跟踪其父进程的标识。如图3-3所示,每次新进程启动时,“db2gds”进程就会通知DB2看守程序。如果任何DB2进程接收到CTRL-C或其他异常信号,该进程就会向看守程序发送信号,而看守程序会将信号传播给实例中其他所有进程。如果“dbzwdog”进程出现异常,那么整个DB2数据库将无法正常工作。
db2ckpwd进程
我们在《循序渐进DB2—— DBA系统管理、维护与应用案例》的“第13章:数据库安全”中给大家介绍过DB2数据库和其他别的数据库不一样的地方在于DB2数据库没有数据库用户的概念,DB2所使用的用户只能是操作系统的用户,DB2使用的安全机制是依赖操作系统或第三方安全插件来实现的。那么,如果有一个应用程序连接数据库,如何来验证其用户名和密码的合法性呢?“db2ckpwd”进程用于检查DB2服务器上的用户标识和密码。由于DB2依赖于操作系统级别的认证,因此,当某个用户或应用程序连接到服务器上的数据库时,便使用该进程验证用户标识和密码。当将AUTHENTICATION设置为SERVER时,或者当连接是从非安全的操作系统建立的时候,就会进行认证。
图2-4显示了利用“db2ckpwd”进程来验证用户和密码的过程。
图2-4 db2ckpwd进程的工作过程
在图2-4中,当用户发出“db2 connect to sample user Melanie using Dallas”命令后,“db2ckpwd”进程把用户名“Melance”和密码“Dallas”与“/etc/security/passwd”文件中相应的内容进行比较,验证用户和密码的合法性。
db2licc进程
该进程管理已安装的DB2许可证。
展开