了解DB2®过程模型可以帮助您确定问题的性质,因为它可以帮助您了解数据库管理器及其关联组件如何进行交互。
所有DB2数据库服务器使用的过程模型有助于数据库服务器与客户端和本地应用程序之间的通信。它还确保数据库应用程序与资源(如数据库控制块和关键数据库文件)隔离。
DB2数据库服务器必须执行许多不同的任务,例如处理数据库应用程序请求或确保将日志记录写入磁盘。每个任务通常由单独的引擎可分派单元(EDU)执行。在以前的版本中,大多数EDU都是在Linux和UNIX环境中使用单独的进程实现的,并在Windows中的主DB2数据库服务器进程中使用操作系统线程。从版本9.5开始,Linux和UNIX环境上的DB2数据库服务器现在也是线程化的,因此EDU现在使用UNIX和Windows上的操作系统线程来实现。
在DB2数据库服务器中使用多线程体系结构有许多好处。与进程相比,新线程需要更少的内存和操作系统资源,因为某些操作系统资源可以在同一进程内的所有线程之间共享。另外,在某些平台上,线程的上下文切换时间比进程要便宜,这可以提高性能。但最重要的是,在所有平台上使用线程模型使得DB2数据库服务器更易于配置,因为根据需要分配更多EDU更为简单,并且可以动态分配需要由多个EDU共享的内存(在基于过程的模型,一个EDU无法看到从另一个EDU分配的内存)。
在以前的版本中,在Linux和UNIX系统上,可以使用ps system命令或db2_local_ps命令列出所有活动的DB2 EDU。从版本9.5开始,这些命令将不再列出db2sysc进程中的任何EDU线程。或者,您现在可以使用带有-edus选项的db2pd命令列出所有处于活动状态的EDU线程。该命令可在UNIX和Windows系统上使用。
对于每个要访问的数据库,将启动各种EDU来处理各种数据库任务,如预取,通信和日志记录。数据库代理是创建用于处理数据库的应用程序请求的一类特殊EDU。
每个客户端应用程序连接都有一个在数据库上运行的协调代理程序。协调员代理程序代表应用程序工作,并根据需要使用专用内存,进程间通信(IPC)或远程通信协议与其他代理程序通信。
DB2体系结构提供防火墙,以便应用程序可以在与DB2不同的地址空间中运行。防火墙保护数据库和数据库管理器免受应用程序,存储过程和用户定义函数(UDF)的影响。防火墙维护数据库中数据的完整性,因为它可以通过覆盖数据库管理器的内部缓冲区或文件来禁用应用程序编程错误。防火墙还提高了可靠性,因为应用程序错误不会导致数据库管理器崩溃。
客户端程序
客户端程序远程运行或与数据库服务器在同一台计算机上运行。他们通过一个监听器与数据库进行首次联系。然后将协调员代理(db2agent)分配给它们。
听众
客户端程序与通信侦听器进行初步联系,通信侦听器在DB2启动时启动。每个配置的通信协议都有一个监听程序,并且为本地客户机程序提供进程间通信(IPC)监听程序(db2ipccm)。听众包括:
db2ipccm,用于本地客户端连接
db2tcpcm,用于TCP / IP连接
db2tcpdm,用于TCP / IP发现工具请求
代理
来自客户端应用程序的所有连接请求(无论是本地还是远程)都分配了相应的协调员代理(db2agent)。协调员代理程序创建后,它将代表应用程序执行所有数据库请求。
在启用分区数据库环境的环境中或启用了查询内并行性的环境中,协调程序代理将分发数据库请求给子代理(分别为db2agntp和db2agnts)。这些代理为应用程序执行请求。创建协调员代理后,它将通过协调对数据库执行请求的子代理(db2agntp)来代表其应用程序处理所有数据库请求。与应用程序关联但当前空闲的子代理由名称db2agnta标识。
协调员代理可以是:
用别名连接到数据库。例如,“db2agent(DATA1)”连接到数据库别名“DATA1”。
附加到一个实例。例如,“db2agent(user1)”附加到实例“user1”。
DB2进程模型将实例化其他类型的代理以执行特定的操作,例如独立协调器代理或次协调器代理。例如,独立协调员代理db2agnti用于运行事件监视器,而次协调器代理db2agnsc用于在突然关闭后并行执行数据库的重新启动。
网关代理(db2agentg)是与远程数据库关联的代理。它提供允许客户端访问主机数据库的间接连接。
空闲代理驻留在代理池中。这些代理可用于来自代表客户程序运行的协调员代理的请求或代表现有协调员代理运行的子代理的请求。具有适当大小的空闲代理池可帮助具有重大应用程序工作负载的配置中的性能,因为空闲代理可以根据需要立即使用,而不必为每个应用程序连接分配一个全新的代理,这涉及到创建线程和分配并初始化内存和其他资源。从版本9.5开始,如果需要,DB2还可以自动管理空闲代理池的大小。
池化代理可以关联到远程数据库或本地数据库。集中在远程数据库上的代理被称为池式网关代理(db2agntgp)。集中在本地数据库上的代理被称为池式数据库代理(db2agentdp)。
的db2fmp
防护模式进程。它负责在防火墙外执行防护存储过程和用户定义的功能。所述的db2fmp过程始终是独立的过程,但可以根据类型它执行的例程的是多线程。
db2vend
这是代表EDU执行供应商代码的过程,例如执行用于日志归档的用户出口程序(仅限UNIX)。
数据库EDU
以下列表包括每个数据库使用的一些重要EDU:
db2pfchr,用于缓冲池预取程序。
db2pclnr,用于缓冲池页面清理器。
db2loggr,用于处理日志文件以处理事务处理和恢复。
db2loggw,用于将日志记录写入日志文件。
db2logts跟踪哪些表空间具有日志文件的日志记录。该信息记录在数据库目录中的DB2TSCHG.HIS文件中。它用于加速表空间前滚恢复的前进阶段。
db2dlock,用于死锁检测。在多分区数据库环境中,使用名为db2glock的附加线程来协调从每个分区上的db2dlock EDU 收集的信息。db2glock只在目录分区上运行。
db2stmm,用于自调整内存功能。
db2taskd,用于分配后台数据库任务。这些任务由称为db2taskp的线程执行。
db2hadrp,HADR主服务器线程。
db2hadrs,HADR备用服务器线程。
db2lfr,用于处理单个日志文件的日志文件读取器。
db2shred处理日志页面中的各个日志记录。
db2redom,用于重做主数据库。在恢复过程中,处理重做日志记录并分配日志记录以重做工作人员进行处理。
db2redow,用于重做工作者。在恢复期间,应重做主机的请求处理重做日志记录。
db2logmgr,用于日志管理器。管理可恢复数据库的日志文件
db2wlmd,用于自动收集工作负载管理统计信息。
事件监视器线程标识如下:
db2evm %1 %2(%3)其中%1可以是
g - 全局文件事件监视器
l - 本地文件事件监视器
t - 表事件监视器
gp - 全球管道事件监视器
lp - 本地管道事件监视器
其中%2可以是
我 - 协调员
p - 不是协调员
而%3是事件监视器名称
备份和恢复线程标识如下:
db2bm。%1。%2备份和恢复缓冲区操纵器,以及db2med。%1。%2,备份和恢复介质控制器,其中
%1 - 控制备份或恢复会话的代理的EDU ID
%2 - 用于在属于特定备份或恢复会话的(可能很多)线程之间消除歧义的顺序值
例如: db2bm.13579.2标识由具有EDU ID 13579 的db2agent线程控制的第二个db2bm线程。
数据库服务器线程和进程
系统控制器(UNIX 上的db2sysc,Windows 上的db2syscs.exe)必须存在才能使数据库服务器正常工作。此外,可能会开始执行以下线程和进程来执行各种任务:
db2resync,扫描全局重新同步列表的resync代理
db2wdog,处理异常终止的UNIX和Linux操作系统上的看门狗
db2fcms,快速通信管理器发件人守护程序
db2fcmr,快速通信管理器接收器守护进程
db2pdbc是并行系统控制器,它处理来自远程节点的并行请求(仅在分区数据库环境中使用)。
db2cart,用于在访问配置了USEREXIT的数据库时对日志文件进行归档
用于格式化日志文件的db2fmtlg,当访问配置了LOGRETAIN但已禁用USEREXIT的数据库时
db2panic,恐慌代理,它在处理了代理限制后处理紧急请求
db2fmd,故障监视器守护进程
db2disp,客户端连接集中器调度程序
db2acd,托管健康监视器的自主计算守护程序,自动维护实用程序和管理任务调度程序。这个过程以前称为db2hmon。
db2licc管理已安装的DB2许可证
db2thcln,在EDU终止时回收资源(仅限UNIX)
db2aiothr管理数据库分区的异步I / O请求(仅限UNIX)
db2alarm在请求的计时器到期时通知EDU(仅限UNIX)
主系统控制器EDU的db2sysc处理关键的DB2数据库服务器事件