簡介
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 完成。
該進程完成下列三種功能:
SMP 同步
分配 RID,最後一個將構建索引
控制 LOAD 格式化程序進程的同步
所有 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 表 5 2 db2agent 表 2 3 db2agentg 表 2 4 db2agnsc 表 2 5 db2agnta 表 2 6 db2agntp 表 2 7 db2bm 表 4 8 db2bp 表 5 9 db2cart 表 1 10 db2chkau 表 1 11 db2ckpw 表 1 12 db2cmd 表 5 14 db2dasrrm.exe 表 6 15 db2dasstm.exe 表 6 16 db2disp 表 1 17 db2dlock 表 3 18 db2estor 表 3 19 db2fcmd 表 1 20 db2fmcd 表 1 21 db2fmd 表 1 22 db2fmp 表 1和 表 6 23 d2fmtlg 表 1 24 db2gds 表 1 25 db2glock 表 1 26 db2govd 表 1 27 db2ipccm 表 2 28 db2jds.exe 表 8 29 db2lbmX 表 4 30 db2lbs 表 4 31 db2lcata 表 4 32 db2lfrmX 表 4 33 db2lfs 表 4 34 db2licd.exe 表 6 35 db2linit 表 4 36 db2lload 表 4 37 db2llqcl 表 4 38 db2lmctk 表 4 39 db2lmibm 表 4 40 db2lmitk 表 4 41 db2lmr 表 4 42 db2lmwX 表 4 43 db2loggr 表 3 44 db2loggw 表 3 45 db2logts 表 3 46 db2lpart 表 4 47 db2lpprt 表 4 48 db2lrdfl 表 4 49 db2lrid 表 4 50 db2ltsc 表 4 51 db2lurex 表 4 52 db2med 表 4 53 db2panic 表 1 54 db2pclnr 表 3 55 db2pdbc 表 1 56 db2pfchr 表 3 57 db2rcmd.exe 表 6 58 db2rebal 表 1 59 db2reorg 表 4 60 db2resyn 表 1 61 db2sec.exe 表 6 62 db2snacm 表 2 63 db2srvlst 表 1 64 db2start 表 5 65 db2star2 表 5 66 db2stop 表 5 67 db2stop2 表 5 68 db2sysc 表 1 69 db2syscs.exe 表 6 70 db2tcpcm 表 2 71 db2tcpdm 表 2 72 db2wdog 表 1 73 dlasync 表 1 74 IWH2SERV.EXE 表 6
示例
下面這一節為您演示了一些輸出示例,當您在 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 數據庫的能力。