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 進程是空閑的子代理程序,協調程序代理程序過去曾使用過它們。
空閑代理程序駐留在代理程序池中。這些代理程序可用于來自代表客戶機程序進行操作的協調程序代理程序,或來自代表現有協調程序代理程序進行操作的子代理程序的請求??捎玫拇沓绦驍等Q于數據庫管理器配置參數 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 |
緩沖池頁面清除程序。這些進程以異步方式將“臟”頁面從緩沖池寫回到磁盤?!芭K”頁面是這樣一個頁面:在將該頁面讀入緩沖池后對其進行過更改,并且磁盤上的映像與緩沖池中的映像不再一樣。 當頁面清除程序被“觸發”時,它們將同時全部運行。一旦它們完成其分配的工作,就進入睡眠狀態,直到被再次觸發。 頁面清除程序的任務是確保緩沖池有空間可以容納正在被應用程序檢索的新頁面。 每個數據庫的頁面清除程序的數量是通過 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?!癤”始終是 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 操作和配置設置,將會有許多其它進程出現和消失。我們已經為您展示了一些樣本方案,這些方案演示了您可以如何觀察哪些進程正在運行、這些進程表明了什么以及數據庫設置對其產生了怎樣的影響?,F在您可以使用這一知識來提高您管理 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 聯系。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
