代码改变世界

DB2 体系结构 (进程模型)

  Ivan的一亩三分地  阅读(3209)  评论(0编辑  收藏  举报

DB2 是众多关系型数据库中的一种, 关系型数据库还包括比较火的Oracle,MySQL

 

实例

数据库

 

DB2 进程模型

DB2 通过 db2start 命令启动数据库实例,即启动相应的进程和线程,并分配相应内存。

通过命令db2pd -edu 可以查看当前的进程和线程

 

DB2 主进程

DB2 主进程(DB2 Server Processses)
进程名 进程描述  
db2wdog  实例启动的第一个进程,也是实例的所有其他进程的父进程  
db2sysc  数据库系统的控制器  
db2acd  监控数据库运行状况以及自动维护的程序的守护进程  
     

 

NOTE:

V10.5 版本没有了db2ckpwd 进程

DB2 常用线程

DB2 线程(DB2  Server  Threads)
线程名 线程类型 详细解释
db2sysc   数据库系统控制器
db2ipccm    IPC 通信管理器
db2tcpcm    TCP 通信管理器
db2alarm    每个EDU都有life 时间,当申请的时间到期时,通知EDU
db2thcln   线程清理,当一个EDU 终止时,回收资源
db2licc    
db2wlmt    
db2wlmtm    
     
db2spmlw    
db2spmrsy    
     
     
db2stmm   此进程是 DB2 V9.1 版本开始新增的进程,用于自动调整数据库对内存的使用。 DB2 V9.1 提供了一项非常重要的功能—— 内存的自调整,就是通过进程 db2stmm 来实现的。这个进程会根据内部策略,周期性地评估数据库对内存的使用情况,并决定是否作出调整
db2dlock   本地死锁检测器,每个数据库分区就有这样一个检测器。它扫描锁定列表,并查找死锁情形。当遇到死锁情形时,其中涉及的某个应用程序 / 事务就被选做“牺牲品”并被回滚。在多分区数据库环境中,使用称为 db2glock 的附加线程来协调从每个分区上的 db2dlock EDU 收集来的信息。 db2glock 仅在目录分区上运行
db2loggr   数据库日志阅读器,用于处理日志文件以进行事务处理和恢复。该进程在执行下列操作时读取数据库日志文件:事务处理 ( 即回滚 )、重新启动恢复、前滚操作
db2loggw   数据库日志记录器。该进程将日志缓冲区的日志记录写入日志文件
db2pfchr   缓冲池预取程序。这些进程代表应用程序在读取数据和索引信息之前,从磁盘读该信息并且将该信息读入数据库缓冲池。预取程序异步地执行这个“预读 (read-ahead) ”操作
代表应用程序进行工作的 DB2 代理程序发送预取请求,预取程序为这些请求提供服务。预取程序执行大块 I/O 来更有效地读取数据。每个数据库的预取程序的数量是由 NUM_IOSERVERS 数据库配置参数配置的
db2pclnr   缓冲池页面清除程序。这些进程以异步方式将“脏”页面从缓冲池写回到磁盘。“脏”页面是这样一个页面:在将该页面读入缓冲池后对其进行过更改,并且磁盘上的映像与缓冲池中的映像不再一样
当页面清除程序被“触发”时,它们将同时全部运行。一旦它们完成其分配的工作,就进入睡眠状态,直到被再次触发
页面清除程序的任务是确保缓冲池有空间可以容纳正在被应用程序检索的新页面。
每个数据库的页面清除程序的数量是通过 NUM_IOCLEANERS 数据库配置参数配置
db2taskd   用于分发后台数据库任务。这些任务由称为 db2taskp 的线程执行
db2wlmd   用于自动收集工作负载管理统计信息
db2fw0    
db2pcsd    
db2evmgi   db2evm%1%2 (%3),其中%1可以为:
· g—— 全局文件事件监视器
· l—— 本地文件事件监视器
· t—— 表事件监视器
· gp—— 全局管道事件监视器
· lp—— 本地管道事件监视器
%2可以为:
· i—— 协调程序
· p—— 不是协调程序
%3是事件监视器名称

 

 

连接数据库

DB2 提供了两种连接方式:

  连接方式 常用的命令    
1 attach to instance db2  attach to   <instance-name> 监控和管理实例 Client  application  发送请求给监听程序,监听程序为该连接创建agent,并分配 db2agent,client 与agent 建立连接,之后client  发送请求给agent,agent协助处理请求,直到客户端退出
2 connect to DB db2 connect to  <database-name> 执行sql语句 Client  application  发送请求给监听程序,监听程序为该连接创建agent,并分配 db2agent,创建其他的数据库subagent来服务client的请求,db2pfchr/db2pclnr  db2lfr/db2loggw/db2loggr  db2dlock

 

attach 连接数据库:

 

1
Server  INFO:<br>192.168.8.80    db2v105   sample  60000<br>Client<br>192.168.8.80    db2cae<br><br>1. login the user db2cae<br>2. catalog node info <br>db2 catalog tcpip node db2v105  remote 192.168.8.80 server 60000<br>3. attach to the instance<br>db2 attach to db2v105  user db2v105 using "vagrant"<br><br>查看 edu 变化<br>EDU ID    TID                  Kernel TID           EDU Name                               USR (s)         SYS (s)<br>========================================================================================================================================<br>23        140557443655424      17622                db2agent (idle) 0                      0.040000     0.010000<br>22        140557447849728      2571                 db2agent (idle) 0                      0.890000     0.250000<br><br><br>EDU ID    TID                  Kernel TID           EDU Name                               USR (s)         SYS (s)<br>========================================================================================================================================<br>23        140557443655424      17622                db2agent (idle) 0                      0.040000     0.010000<br>22        140557447849728      2571                 db2agent (instance) 0                  0.890000     0.250000<br><br><br>Client 通过node 发送连接请求给db2tcpcm, 然后查看当前数据库中是否存在空闲的db2agent, 如果有则分配给client<br><br><br>

 

 

connection 连接数据库:

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Client:<br>db2 catalog db sample at node db2v105<br>db2 connect to sample user db2v105 using "vagrant"<br><br>远程连接数据库之后<br><br>EDU ID    TID                  Kernel TID           EDU Name                               USR (s)         SYS (s)
========================================================================================================================================
52        140557322020608      23326                db2evmgi (DB2DETAILDEADLOCK) 0         0.000000     0.000000
51        140557326214912      23325                db2pcsd (SAMPLE) 0                     0.000000     0.000000
50        140557330409216      23324                db2fw1 (SAMPLE) 0                      0.000000     0.000000
49        140557334603520      23323                db2fw0 (SAMPLE) 0                      0.000000     0.000000
48        140557338797824      23322                db2lused (SAMPLE) 0                    0.000000     0.000000
47        140557342992128      23321                db2wlmd (SAMPLE) 0                     0.000000     0.000000
46        140557347186432      23320                db2taskd (SAMPLE) 0                    0.000000     0.000000
45        140557351380736      23319                db2pfchr (SAMPLE) 0                    0.000000     0.000000
44        140557355575040      23318                db2pfchr (SAMPLE) 0                    0.000000     0.000000
43        140557359769344      23317                db2pfchr (SAMPLE) 0                    0.000000     0.000000
42        140557363963648      23316                db2pfchr (SAMPLE) 0                    0.000000     0.000000
41        140557368157952      23315                db2pfchr (SAMPLE) 0                    0.000000     0.000000
40        140557372352256      23314                db2pfchr (SAMPLE) 0                    0.000000     0.000000
39        140557376546560      23313                db2pfchr (SAMPLE) 0                    0.000000     0.000000
38        140557380740864      23312                db2pfchr (SAMPLE) 0                    0.000000     0.000000
37        140557384935168      23311                db2pfchr (SAMPLE) 0                    0.000000     0.000000
36        140557389129472      23310                db2pfchr (SAMPLE) 0                    0.000000     0.000000
35        140557393323776      23309                db2pfchr (SAMPLE) 0                    0.000000     0.000000
34        140557397518080      23308                db2pfchr (SAMPLE) 0                    0.000000     0.000000
33        140557401712384      23307                db2pfchr (SAMPLE) 0                    0.000000     0.000000
32        140557405906688      23306                db2pfchr (SAMPLE) 0                    0.000000     0.000000
31        140557410100992      23305                db2pfchr (SAMPLE) 0                    0.000000     0.000000
30        140557414295296      23304                db2pfchr (SAMPLE) 0                    0.000000     0.000000
29        140557418489600      23303                db2pclnr (SAMPLE) 0                    0.000000     0.000000
28        140557422683904      23302                db2pclnr (SAMPLE) 0                    0.000000     0.000000
27        140557426878208      23301                db2lfr.0 (SAMPLE) 0                    0.000000     0.000000
26        140557431072512      23300                db2loggw (SAMPLE) 0                    0.000000     0.000000
25        140557435266816      23299                db2loggr (SAMPLE) 0                    0.000000     0.000000
24        140557439461120      23298                db2dlock (SAMPLE) 0                    0.000000     0.000000
23        140557443655424      17622                db2stmm (SAMPLE) 0                     0.050000     0.020000
22        140557447849728      2571                 db2agent (SAMPLE) 0                    0.950000     0.340000
<br>21        140557452044032      2382                 db2spmlw 0                             0.000000     0.000000<br>20        140557456238336      2381                 db2spmrsy 0                            0.000000     0.020000<br>19        140557460432640      2380                 db2resync 0                            0.710000     1.540000<br>18        140557464626944      2379                 db2tcpcm 0                             0.000000     0.000000<br>17        140557468821248      2378                 db2tcpcm 0                             0.000000     0.000000<br>16        140557473015552      2377                 db2ipccm 0                             0.010000     0.000000<br>15        140557477209856      2375                 db2wlmtm 0                             1.910000     0.480000<br>14        140557481404160      2371                 db2wlmt 0                              0.840000     0.220000<br>13        140557485598464      2370                 db2licc 0                              0.000000     0.000000<br>12        140557489792768      2369                 db2thcln 0                             0.000000     0.000000<br>11        140557493987072      2368                 db2alarm 0                             4.360000     3.920000<br>1         140557233940224      2367                 db2sysc 0                              0.630000     0.220000<br><br><br>

 

 

 connection 连接数据库之后执行Query 过程

 

1
2
3
4
5
6
7
Client sends request to coordinator agent
SQL query compiled or existing access plan retrieved from package cache
Plan execution begins
Parallel subagents dispatched (if intra-query parallelism enabled )
Agent threads access database to update or query data
Results flow from parallel subagents to coordinator agent through table-queues (if intra-query parallelism enabled)
SQL results returned from coordinator agent to client

 

 

Reference

https://www.ibm.com/developerworks/cn/data/books/db2advan/2/

DB2 9.5 中多线程架构的工作原理  https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0807kharche/index.html

 

努力加载评论中...
点击右上角即可分享
微信分享提示