http://www.ibm.com/developerworks/cn/data/library/techarticles/0304chong/0304chong.html
級別: 初級
Dwaine Snow, DB2 UDB 和 Informix IDS 產(chǎn)品經(jīng)理, IBM 多倫多實驗室
Raul F. Chong, DB2 UDB 顧問, IBM 多倫多實驗室
2001 年 2 月 01 日
本文描述了 DB2 UDB 在 Linux、UNIX 和 Windows 上使用的進(jìn)程,討論了為什么您需要理解這些進(jìn)程,還詳述了它們的功能。
簡介
UNIX 和 Linux 用戶通常會檢查運(yùn)行在其服務(wù)器上的進(jìn)程,以執(zhí)行問題分析及檢查服務(wù)器中消耗的資源。該信息不僅對執(zhí)行問題和資源分析的管理員有用,而且對于那些開發(fā)高度可用性和故障轉(zhuǎn)移腳本(這些腳本監(jiān)控 DB2 進(jìn)程,以確定何時需要進(jìn)行諸如數(shù)據(jù)庫重新啟動或服務(wù)器故障轉(zhuǎn)移之類的操作)的人也很有用。
如果您正在使用 AIX,則可以使用命令 ps -ef 檢查進(jìn)程。在 Solaris 和 HP-UX 上, ps -ef 將只顯示所有服務(wù)器端進(jìn)程(例如:代理程序、記錄器、頁面清除程序和預(yù)取程序)的 db2sysc 進(jìn)程(主 DB2 引擎進(jìn)程)。如果您正在使用 Solaris 或 HP-UX,利用命令 /usr/ucb/ps -axw 您可以看到這些服務(wù)器端進(jìn)程。這兩種版本的 ps 命令都可以在 Linux 上使用。
當(dāng)在運(yùn)行 DB2 通用數(shù)據(jù)庫客戶機(jī)或服務(wù)器軟件的計算機(jī)上執(zhí)行該命令時,您可能會看到列出了幾個 DB2 進(jìn)程。本文的目的是記錄這些進(jìn)程,并且解釋它們的作用以及它們何時可能會運(yùn)行。盡管手冊 DB2 UDB V8 Administration Guide - Performance 的第 2 章記錄了大多數(shù)重要的進(jìn)程,但該列表并不完整。通過閱讀本文,您將會理解每個 DB2 進(jìn)程,當(dāng)您看到那些進(jìn)程時,您會開始明白 DB2 正在執(zhí)行什么操作。
請注意,DB2 在 Windows 上工作方式的實現(xiàn)與基于 Linux 和 UNIX 環(huán)境的實現(xiàn)稍有不同。在 Windows 中,只有一個進(jìn)程(db2sysc),在該進(jìn)程下的每個引擎分派單元(engine dispatchable unit,EDU)都被作為線程來實現(xiàn)。盡管本文討論的是進(jìn)程,但是在 Windows 環(huán)境中應(yīng)當(dāng)把它們看成線程。通過 Windows 任務(wù)管理器(Task Manager),您將能夠看到每個實例的 db2sysc 進(jìn)程(db2syscs.exe)。還將顯示其它 Windows 服務(wù)/進(jìn)程,我們將在本文中解釋它們是什么。
警告!請勿直接干預(yù)正常 DB2 環(huán)境中的 DB2 進(jìn)程。在 Linux 或 UNIX 中利用 kill -9 命令殺死 DB2 進(jìn)程可能會導(dǎo)致 DB2 出現(xiàn)異常行為。例如,殺死 db2sysc 進(jìn)程將使整個 DB2 實例停止運(yùn)行。本文旨在幫助您理解進(jìn)程,而不是直接操作它們。
為什么研究 DB2 進(jìn)程?
我們的個人經(jīng)驗已表明這方面的知識很有價值,并且我們拜訪的客戶也向我們尋求這類信息。還不相信嗎?看一看下面的實際方案,并且親眼看看如何通過檢查在系統(tǒng)上運(yùn)行的 DB2 進(jìn)程來解決問題:
方案 1:罕見的緩沖池頁面的清除
一個運(yùn)行電子商務(wù)(eCommerce)站點并使用 DB2 作為數(shù)據(jù)庫服務(wù)器的客戶報告說,在一整天里,數(shù)據(jù)庫對應(yīng)用程序請求的響應(yīng)時間會不時地變得很長。數(shù)據(jù)庫快照未顯示當(dāng)時有任何異常發(fā)生。通過檢查服務(wù)器上進(jìn)程在其中某一時刻的 CPU 使用情況,我們可以確定 I/O 清除程序(db2pclnr)消耗了超過 90% 的 CPU 時間。隨后通過研究 I/O 清除程序觸發(fā)器并對其進(jìn)行相應(yīng)的調(diào)優(yōu),我們消除了這種情況,使得電子商務(wù)站點每天可以處理的吞吐量提高了 50% 以上。
方案 2:真相大白
在拜訪 IBM 的一家業(yè)務(wù)合作伙伴以進(jìn)行一些 DB2 性能調(diào)優(yōu)工作時,我們碰到了查詢響應(yīng)時間全面延長的問題。除了常規(guī)的程序之外,顯示應(yīng)用程序列表的命令并未顯示當(dāng)時有任何其它程序在運(yùn)行。在獲得 DB2 快照之前,我們看了一下運(yùn)行在 DB2 服務(wù)器上的 DB2 進(jìn)程,發(fā)現(xiàn) db2rebal 進(jìn)程正在運(yùn)行。當(dāng)將某個容器添加到 DMS 表空間時,就會使用該進(jìn)程執(zhí)行數(shù)據(jù)的重新均衡工作。客戶“承認(rèn)”,那天的早些時候他將一個容器添加到了包含 40 GB 表的表空間。一旦重新均衡工作完成,查詢響應(yīng)時間恢復(fù)如初。
揭開通知和診斷日志的廬山真面目
管理通知日志和診斷日志( db2diag.log )是重要的工具,管理員可以使用這些工具來理解數(shù)據(jù)庫的活動和功能。這些日志通常包含有關(guān) DB2 進(jìn)程的信息,如下面取自 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".
|
在該示例中,消息來自進(jìn)程標(biāo)識號為 78121 的進(jìn)程。該進(jìn)程的名稱是 db2agent,并與名為 TEST 的數(shù)據(jù)庫相連。理解進(jìn)程的功能有助于您了解管理通知日志和 db2diag.log 中各項的意義。
DB2 進(jìn)程模型
盡管 DB2 Administration Guide - Performance 手冊中介紹了 DB2 進(jìn)程模型,但是本文還是將對其做一下簡要概述。首先說明 代理程序(agent)的概念。
代理程序
代理程序可被認(rèn)為是一個代表應(yīng)用程序執(zhí)行所有數(shù)據(jù)庫操作的“工作程序”。DB2 代理程序主要有兩種:
- 協(xié)調(diào)程序代理程序(Coordinator Agent)(db2agent)
協(xié)調(diào)程序代理程序代表應(yīng)用程序協(xié)調(diào)工作,并使用進(jìn)程間通信(IPC)或遠(yuǎn)程通信協(xié)議與其它代理程序進(jìn)行通信。所有來自客戶機(jī)應(yīng)用程序的連接請求,無論是本地還是遠(yuǎn)程的,都分配了相應(yīng)的協(xié)調(diào)程序代理程序。
- 子代理程序(Subagent)(db2agntp)
如果啟用了 intra_parallel 數(shù)據(jù)庫管理器配置參數(shù),協(xié)調(diào)程序代理程序就會把數(shù)據(jù)庫請求分發(fā)給子代理程序(db2agntp)。這些代理程序執(zhí)行應(yīng)用程序的請求。一旦創(chuàng)建了協(xié)調(diào)程序代理程序,通過協(xié)調(diào)對數(shù)據(jù)庫執(zhí)行請求的子代理程序(db2agent),協(xié)調(diào)程序代理程序代表其應(yīng)用程序處理所有數(shù)據(jù)庫請求。
當(dāng)某個代理程序或子代理程序完成其任務(wù)時,它就轉(zhuǎn)為空閑狀態(tài)。當(dāng)子代理程序處于空閑狀態(tài)時,其名稱從 db2agntp 變?yōu)?db2agnta。
例如:
db2agntp進(jìn)程是活動的子代理程序,它們當(dāng)前正在執(zhí)行協(xié)調(diào)程序代理程序的工作。僅當(dāng)啟用了分區(qū)內(nèi)并行性時,這些進(jìn)程才存在。
db2agnta進(jìn)程是空閑的子代理程序,協(xié)調(diào)程序代理程序過去曾使用過它們。
空閑代理程序駐留在代理程序池中。這些代理程序可用于來自代表客戶機(jī)程序進(jìn)行操作的協(xié)調(diào)程序代理程序,或來自代表現(xiàn)有協(xié)調(diào)程序代理程序進(jìn)行操作的子代理程序的請求。可用的代理程序數(shù)取決于數(shù)據(jù)庫管理器配置參數(shù) maxagents和 num_poolagents。
稍后我們將在本文中描述其它代理程序類型,如并行恢復(fù)代理程序(db2agnsc)。
下面兩幅圖顯示了 DB2 進(jìn)程模型。
圖 1. 無連接集中的 DB2 進(jìn)程模型(適用于非分區(qū)數(shù)據(jù)庫)
圖 1中的圓圈表示引擎分派單元(EDU),在 Linux/UNIX 平臺上稱為進(jìn)程,而在 Windows 上稱為線程。
應(yīng)用程序 A(App A)和 B(App B)是本地應(yīng)用程序,運(yùn)行它們的機(jī)器與 DB2 服務(wù)器所駐留的機(jī)器是同一臺機(jī)器。當(dāng)這些應(yīng)用程序發(fā)出連接數(shù)據(jù)庫的 CONNECT 命令時,db2ipccm 偵聽器進(jìn)程建立數(shù)據(jù)庫管理器和應(yīng)用程序之間的通信。db2ipccm 還將與協(xié)調(diào)程序代理程序 EDU(db2agent)一起工作,后者直接與客戶機(jī)應(yīng)用程序進(jìn)行聯(lián)系,以建立客戶機(jī)應(yīng)用程序和協(xié)調(diào)程序之間共享內(nèi)存的通信。一旦建立了這種通信,本地客戶機(jī)上的應(yīng)用程序就被連接到數(shù)據(jù)庫。
應(yīng)用程序 C(App C)是一個遠(yuǎn)程應(yīng)用程序,它所駐留的機(jī)器與用于 DB2 服務(wù)器的機(jī)器不同。遠(yuǎn)程客戶機(jī)通過 db2tcpcm 偵聽器進(jìn)程建立 TCP/IP 通信。然后 db2tcpcm 與 db2agent 一起工作,后者成為應(yīng)用程序的協(xié)調(diào)程序代理程序,并將連接傳遞給該代理程序。之后,協(xié)調(diào)程序代理程序與遠(yuǎn)程客戶機(jī)應(yīng)用程序進(jìn)行聯(lián)系,并被連接到數(shù)據(jù)庫。
圖 2. 無連接集中的 DB2 進(jìn)程模型(適用于分區(qū)數(shù)據(jù)庫)
圖 2與圖 1 類似,但是它適用于分區(qū)數(shù)據(jù)庫。Node0000 和 Node0001 表示兩臺不同的機(jī)器,這兩臺機(jī)器上分別駐留了一部分?jǐn)?shù)據(jù)庫。它們之間的進(jìn)程和交互作用與圖 1 中描述的相同;但是,有其它一些僅適用于該環(huán)境的進(jìn)程。例如,db2fcmd 進(jìn)程是快速通信管理器(Fast Communication Manager)進(jìn)程,用于管理不同分區(qū)之間的通信。下一節(jié)中的表將更詳細(xì)地描述適用于分區(qū)數(shù)據(jù)庫的其它進(jìn)程。
進(jìn)程
以下各表分別根據(jù)每個實例、每個數(shù)據(jù)庫以及按照功能列出了所有 DB2 進(jìn)程。請注意,下表中的一些進(jìn)程并不是按照字母順序列出的,而是根據(jù)功能進(jìn)行分組的。如果您希望以字母順序查找進(jìn)程,請參閱下面的 表 7。
表 1. 每個實例的進(jìn)程 — 無連接,無活動的數(shù)據(jù)庫
| 進(jìn)程名 |
描述 |
適用范圍 |
| db2cart |
確定何時歸檔日志文件,并調(diào)用用戶出口來執(zhí)行實際的歸檔工作。每個實例有一個 db2cart 進(jìn)程,但是僅當(dāng)實例中至少有一個數(shù)據(jù)庫啟用了 USEREXIT 時,該進(jìn)程才運(yùn)行。 |
所有 |
| db2chkau |
由 DB2 審計工具使用以將一些項記錄到審計日志。僅當(dāng)啟用了審計時該進(jìn)程才是活動的。 |
所有 |
| db2ckpw |
用于檢查 DB2 服務(wù)器上的用戶標(biāo)識和密碼。由于 DB2 依賴于操作系統(tǒng)級別的認(rèn)證,因此,當(dāng)某個用戶或應(yīng)用程序連接到服務(wù)器上的數(shù)據(jù)庫時,使用該進(jìn)程驗證用戶標(biāo)識和密碼。當(dāng)將 AUTHENTICATION 設(shè)置為 SERVER 時,或者當(dāng)連接是從非安全的操作系統(tǒng)建立的時候,就會進(jìn)行認(rèn)證。 |
UNIX/Linux |
| db2disp |
DB2 代理程序分派器進(jìn)程。當(dāng)啟用了連接集中時,該進(jìn)程在分配給應(yīng)用程序的邏輯代理程序和可用的協(xié)調(diào)代理之間分派應(yīng)用程序連接。
僅當(dāng)啟用了連接集中時該進(jìn)程才存在。
|
所有 |
| db2fcmd |
FCM(快速通信管理器)守護(hù)程序,用于處理分區(qū)間的通信。每個服務(wù)器、每個分區(qū)就有一個這樣的進(jìn)程。 |
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2fmcd |
故障監(jiān)視器協(xié)調(diào)程序(Fault Monitor Coordinator)守護(hù)程序進(jìn)程。每個物理機(jī)器就有一個這樣的進(jìn)程。 |
只適用于 UNIX |
| db2fmd |
為每個由故障監(jiān)視器監(jiān)控的 DB2 實例而啟動的故障監(jiān)視器守護(hù)程序進(jìn)程。該進(jìn)程是由協(xié)調(diào)守護(hù)程序(db2fmcd)監(jiān)控的,因此,如果您殺死 db2fmd 進(jìn)程,那么 db2fmcd 將使其重新運(yùn)行。 |
只適用于 UNIX |
| db2fmtlg |
當(dāng)數(shù)據(jù)庫被配置成 LOGRETAIN ON 且 USEREXIT OFF 時,在日志路徑中預(yù)分配日志文件。如果完成了該工作,那么在正常的處理過程中,當(dāng)從一個日志文件切換到另一個日志文件時,引擎進(jìn)程就無需等待。 |
所有 |
| db2gds |
DB2 全局守護(hù)進(jìn)程衍生程序(Global Daemon Spawner)進(jìn)程,該進(jìn)程啟動 UNIX 上的所有 DB2 EDU(進(jìn)程)。每個實例或每個數(shù)據(jù)庫分區(qū)就有一個 db2gds。 |
只適用于 UNIX |
| db2glock |
全局死鎖檢測器。該進(jìn)程協(xié)調(diào)從每個數(shù)據(jù)庫分區(qū)上的 db2dlock 進(jìn)程收集的信息,以檢查數(shù)據(jù)庫分區(qū)之間是否存在死鎖情形。db2glock 進(jìn)程運(yùn)行在多分區(qū)數(shù)據(jù)庫的目錄分區(qū)上。 |
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2govd |
DB2 控制器,它是一個反應(yīng)性的管理進(jìn)程。如果啟用了 DB2 控制器,該進(jìn)程按照控制器配置文件中指定的時間間隔來拍攝快照,并依據(jù)所有的配置規(guī)則來檢查快照。如果違反了某個規(guī)則,則采取指定的操作。 |
所有 |
| db2panic |
緊急代理程序。如果任何數(shù)據(jù)庫分區(qū)上的代理程序都不空閑,那么該進(jìn)程就處理一些緊急的請求。 |
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2pdbc |
PDB(并行數(shù)據(jù)庫,Parallel Database)控制器。它處理來自遠(yuǎn)程節(jié)點的并行請求。 |
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2rebal |
重新均衡器進(jìn)程。當(dāng)將容器添加到某個現(xiàn)有的表空間,并且需要對現(xiàn)有數(shù)據(jù)進(jìn)行重新均衡時,就調(diào)用該進(jìn)程。該進(jìn)程異步地執(zhí)行重新均衡工作。 |
所有 |
| db2resyn |
重新同步管理器進(jìn)程,用于支持使用兩階段提交的應(yīng)用程序 |
所有 |
| db2srvlst |
該進(jìn)程用于管理系統(tǒng)(如 OS/390)的地址列表。 |
所有 |
| db2sysc |
主 DB2 系統(tǒng)控制器或引擎。如果沒有該進(jìn)程,數(shù)據(jù)庫服務(wù)器就不能運(yùn)行。 |
所有 |
| db2syslog |
系統(tǒng)記錄器進(jìn)程。該進(jìn)程寫到操作系統(tǒng)的錯誤日志工具。在 UNIX 上,必須通過編輯文件 syslog.conf 才能啟用該進(jìn)程。在 Windows 上,DB2 將自動編寫 Windows 事件日志。 |
所有 |
| db2wdog |
DB2 看守程序。在 UNIX 中,該進(jìn)程是必需的,因為 UNIX 中的進(jìn)程只能跟蹤其父進(jìn)程的標(biāo)識。每次新進(jìn)程啟動時,db2gds 就會通知 DB2 看守程序。如果任何 DB2 進(jìn)程接收到 ctrl-c 或其它異常信號,該進(jìn)程就會向看守程序發(fā)送信號,而看守程序會將信號傳播給實例中其它所有進(jìn)程。 |
只適用于 UNIX |
| dlasync |
DB2 數(shù)據(jù)鏈路(Data Link)(文件管理器)服務(wù)器的監(jiān)視器。僅當(dāng) DB2 配置了數(shù)據(jù)鏈路時該進(jìn)程才存在。 |
只適用于數(shù)據(jù)鏈路 |
表 2. 每個實例和每個連接
| 進(jìn)程名 |
描述 |
適用范圍 |
| db2agent |
DB2 協(xié)調(diào)程序代理程序,它代表應(yīng)用程序執(zhí)行所有數(shù)據(jù)庫請求。除非啟用了連接集中器,否則每個已連接的應(yīng)用程序都將有一個 db2agent 進(jìn)程。
如果啟用了分區(qū)內(nèi)并行性,那么 db2agent 進(jìn)程將調(diào)用 DB2 子代理程序來執(zhí)行工作,并且它們會將結(jié)果集返回給協(xié)調(diào)程序代理程序,再返回給應(yīng)用程序。
在分區(qū)數(shù)據(jù)庫中,協(xié)調(diào)程序代理程序?qū)⑽挥趹?yīng)用程序連接到的分區(qū)上。
|
所有 |
| db2agentg |
DRDA 應(yīng)用程序請求器(Application Requester)的網(wǎng)關(guān)代理程序。 |
所有 |
| db2agnsc |
并行恢復(fù)代理程序。在前滾和重新啟動恢復(fù)的過程中使用該代理程序來并行地執(zhí)行日志中的操作。與串行恢復(fù)相比,這可以縮短恢復(fù)時間。
注:該進(jìn)程支持已記錄事務(wù)中的并行性以及并行事務(wù)之間的并行性。
|
所有 |
| db2agnta |
空閑的子代理程序,過去協(xié)調(diào)代理曾使用過,并且現(xiàn)在仍然與協(xié)調(diào)代理進(jìn)程關(guān)聯(lián)。
當(dāng) INTRA_PARALLEL dbm cfg 參數(shù)設(shè)置成 YES 時會出現(xiàn)該進(jìn)程。
|
所有 |
| db2agntp |
這是一個子代理程序,它代表與之相關(guān)的協(xié)調(diào)代理執(zhí)行當(dāng)前工作。這些進(jìn)程提供了分區(qū)內(nèi)并行性,也就是在數(shù)據(jù)庫實例/分區(qū)中并行地執(zhí)行查詢的能力。
當(dāng) INTRA_PARALLEL dbm cfg 參數(shù)設(shè)置成 YES 時會出現(xiàn)該進(jìn)程。
|
所有 |
| db2ipccm |
IPC 通信管理器。每個數(shù)據(jù)庫分區(qū)就有一個這樣的管理器。這是用于本地客戶機(jī)連接的進(jìn)程間通信偵聽器。
本地客戶機(jī)連接是由運(yùn)行 DB2 服務(wù)器的同一臺計算機(jī)上的某個應(yīng)用程序(如 CLP)建立的連接。
|
所有 |
| db2tcpcm |
TCP 通信管理器。它充當(dāng) TCP/IP 連接請求的通信偵聽器。當(dāng)偵聽器接收到連接請求時,它就將連接與代理程序相關(guān)聯(lián),然后再繼續(xù)偵聽更多連接請求。 |
所有 |
| db2tcpdm |
用于 TCP/IP 發(fā)現(xiàn)請求的通信偵聽器。當(dāng)配置助手(CA)在網(wǎng)絡(luò)中搜索遠(yuǎn)程 DB2 服務(wù)器及其數(shù)據(jù)庫時,它就會發(fā)出發(fā)現(xiàn)請求。 |
所有 |
| db2snacm |
SNA/APPC 通信管理器。它充當(dāng) SNA/APPC 連接請求的通信偵聽器。當(dāng)偵聽器接收到連接請求時,它就將連接與代理程序相關(guān)聯(lián),然后再繼續(xù)偵聽更多連接請求。 |
所有 |
表 3. 每個實例和每個活動數(shù)據(jù)庫
| 進(jìn)程名 |
描述 |
適用范圍 |
| db2dlock |
本地死鎖檢測器,每個數(shù)據(jù)庫分區(qū)就有這樣一個檢測器。它掃描鎖定列表,并查找死鎖情形。當(dāng)遇到死鎖情形時,其中涉及的某個應(yīng)用程序/事務(wù)就被選做“犧牲品”并被回滾。 |
所有 |
| db2estor |
用于復(fù)制數(shù)據(jù)庫緩沖池和擴(kuò)充存儲器之間的頁面。僅當(dāng)啟用了數(shù)據(jù)庫的擴(kuò)充存儲器時這些進(jìn)程才出現(xiàn)。 |
所有 |
| db2event |
事件監(jiān)視器進(jìn)程。每個活動的事件監(jiān)視器,每個活動的數(shù)據(jù)庫就會有一個 db2event 進(jìn)程。這些進(jìn)程捕獲已定義的“事件”并寫到為事件監(jiān)視器指定的輸出文件。 |
所有 |
| db2loggr |
數(shù)據(jù)庫日志閱讀器。該進(jìn)程在執(zhí)行下列操作時讀取數(shù)據(jù)庫日志文件:
- 事務(wù)處理(即回滾)
- 重新啟動恢復(fù)
- 前滾操作
|
所有 |
| db2loggw |
數(shù)據(jù)庫日志記錄器。該進(jìn)程使用日志緩沖區(qū)的日志記錄對磁盤上的日志文件進(jìn)行刷新。 |
所有 |
| db2logts |
該進(jìn)程用于收集有關(guān)當(dāng)某個表空間被修改時哪些日志是活動的歷史信息。該信息記錄在數(shù)據(jù)庫目錄的 DB2TSCHG.HIS 文件中。通過啟用跳過操作(即跳過前滾操作不需要的那些日志文件),可以使用該進(jìn)程來加速表空間前滾恢復(fù)。 |
所有 |
| db2pclnr |
緩沖池頁面清除程序。這些進(jìn)程以異步方式將“臟”頁面從緩沖池寫回到磁盤。“臟”頁面是這樣一個頁面:在將該頁面讀入緩沖池后對其進(jìn)行過更改,并且磁盤上的映像與緩沖池中的映像不再一樣。
當(dāng)頁面清除程序被“觸發(fā)”時,它們將同時全部運(yùn)行。一旦它們完成其分配的工作,就進(jìn)入睡眠狀態(tài),直到被再次觸發(fā)。
頁面清除程序的任務(wù)是確保緩沖池有空間可以容納正在被應(yīng)用程序檢索的新頁面。
每個數(shù)據(jù)庫的頁面清除程序的數(shù)量是通過 NUM_IOCLEANERS 數(shù)據(jù)庫配置參數(shù)配置的。
|
所有 |
| db2pfchr |
緩沖池預(yù)取程序。這些進(jìn)程代表應(yīng)用程序在讀取數(shù)據(jù)和索引信息之前,從磁盤讀該信息并且將該信息讀入數(shù)據(jù)庫緩沖池。預(yù)取程序異步地執(zhí)行這個“預(yù)讀(read-ahead)”操作。
代表應(yīng)用程序進(jìn)行工作的 DB2 代理程序發(fā)送預(yù)取請求,預(yù)取程序為這些請求提供服務(wù)。預(yù)取程序執(zhí)行大塊 I/O 來更有效地讀取數(shù)據(jù)。每個數(shù)據(jù)庫的預(yù)取程序的數(shù)量是由 NUM_IOSERVERS 數(shù)據(jù)庫配置參數(shù)配置的。
|
所有 |
表 4. 按功能分類的其它進(jìn)程
| 進(jìn)程名 |
描述 |
適用范圍 |
| db2bm |
備份/恢復(fù)緩沖區(qū)操縱器。該進(jìn)程用于在備份操作過程中從表空間進(jìn)行讀取,以及用于在恢復(fù)操作過程中寫到表空間。通過 BACKUP 或 RESTORE 命令配置的每個備份/恢復(fù)緩沖區(qū)都將有一個 db2bm 進(jìn)程。 |
所有 |
| db2fmp |
這是一些受防護(hù)的進(jìn)程,用于在防火墻外的服務(wù)器上運(yùn)行用戶代碼,這些代碼 既有存儲過程, 又有用戶定義的函數(shù)。
db2fmp 始終是獨(dú)立的進(jìn)程,但是根據(jù)它執(zhí)行的例程類型,也可能是多線程的。
注:該進(jìn)程替換了 DB2 以前版本中使用的 db2udf 和 db2dari 這兩個進(jìn)程。
|
所有 |
| db2lbs |
LOAD LOB 掃描程序。僅當(dāng)裝入工具正在裝入帶有 LOB 列的表時才使用它們。這些進(jìn)程掃描表的 LOB 對象,并將該信息讀回表中。 |
所有 |
| db2lbmX |
LOAD 緩沖區(qū)操縱器。最后一個字符“X”表示一或更大的數(shù)字。該進(jìn)程將已裝入的數(shù)據(jù)寫到數(shù)據(jù)庫,并且可能涉及到異步 I/O。“X”始終是 1,不過通常也會是更大的數(shù)字,這取決于試探值(heuristic)。試探值取決于系統(tǒng)上的 CPU 數(shù)以及被寫的容器數(shù)。
這個“智能的缺省值”可能會被 LOAD 命令的 DISK_PARALLELISM 修飾符覆蓋。
我們應(yīng)當(dāng)明白,這個異步 I/O 不是某些操作系統(tǒng)支持的異步文件 I/O;它只意味著我們有一些寫 I/O 的獨(dú)立進(jìn)程。這意味著,正在格式化數(shù)據(jù)的其它進(jìn)程不用被 I/O 等待所束縛。
|
所有 |
| db2lfrmX |
LOAD 格式化程序進(jìn)程。最后一個字符“X”表示一或更大的數(shù)字。該進(jìn)程將輸入數(shù)據(jù)格式化成內(nèi)部格式。它始終出現(xiàn)在 LOAD 中。該進(jìn)程使用了智能的缺省值,它可能會被 CPU_PARALLELISM 修飾符覆蓋,以選擇最佳的 CPU 數(shù)。 |
所有 |
| db2lfs |
當(dāng)被裝入的表包含 LONG VARCHAR 列時則使用這些進(jìn)程。這些進(jìn)程用來讀和格式化表中的 LONG VARCHAR 列。 |
所有 |
| db2lmr |
這是一個 LOAD 媒體閱讀器(Media Reader)進(jìn)程。它讀取裝入輸入文件,一旦讀完所有輸入文件,該進(jìn)程就會消失。甚至在整個裝入操作完成之前該進(jìn)程就會消失。 |
所有 |
| db2lmwX |
這些是 LOAD 媒體記錄器進(jìn)程。最后一個字符“X”表示一或更大的數(shù)字。
如果為 LOAD 命令指定了“裝入副本(load copy)”選項,那么該進(jìn)程將生成裝入副本。裝入副本本質(zhì)上就是裝入到表中的數(shù)據(jù)備份。
這些媒體記錄器與 BACKUP 和 RESTORE 使用的媒體記錄器相同。就象在命令行上描述的那樣,每個復(fù)制會話調(diào)用一個媒體記錄器(您可以創(chuàng)建多個文件的裝入副本)。如果沒有裝入副本,則沒有媒體記錄器。它們根據(jù)數(shù)據(jù)的類型在裝入時從其它進(jìn)程獲取輸入,但是,由緩沖區(qū)操縱器寫的每位數(shù)據(jù)通常都將被傳遞到媒體記錄器。就如同其它所有的進(jìn)程那樣,它們由裝入代理程序控制。
|
所有 |
| db2lrid |
該進(jìn)程在 LOAD 期間執(zhí)行索引排序,并構(gòu)建索引記錄標(biāo)識(Record ID,RID)。
該進(jìn)程不會出現(xiàn)在非并行數(shù)據(jù)庫實例(即禁用 INTRA_PARALLEL 的實例)中。該進(jìn)程執(zhí)行的任務(wù)由非并行實例中的格式化程序 EDU 完成。
該進(jìn)程完成下列三種功能:
- SMP 同步
- 分配 RID,最后一個將構(gòu)建索引
- 控制 LOAD 格式化程序進(jìn)程的同步
|
所有 |
| db2ltsc |
LOAD 表掃描程序。這些進(jìn)程掃描數(shù)據(jù)對象,查找被裝入的表,并讀取 LOAD 工具的信息。在 LOAD 追加操作過程中使用這些進(jìn)程。 |
所有 |
| db2linit |
LOAD 初始化子代理程序。這個子代理程序獲取數(shù)據(jù)庫分區(qū)上必需的資源,并將應(yīng)答序列化,返回給裝入目錄子代理程序。 |
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lcata |
LOAD 目錄子代理程序。這個子代理程序只在目錄分區(qū)上執(zhí)行,它負(fù)責(zé):
- 衍生初始化子代理程序
- 處理其應(yīng)答
- 存儲目錄分區(qū)上的鎖信息。
該目錄子代理程序還查詢系統(tǒng)目錄表以確定哪些分區(qū)用于數(shù)據(jù)分割和分區(qū)。
正常的裝入作業(yè)只有一個目錄子代理程序。異常情況是裝入無法獲取某些分區(qū)上的裝入資源。如果數(shù)據(jù)庫分區(qū)上的設(shè)置錯誤被隔離出來,那么協(xié)調(diào)程序?qū)难b入的內(nèi)部分區(qū)列表除去發(fā)生故障的分區(qū),并衍生一個新的目錄子代理程序。這一過程會重復(fù)進(jìn)行,直到成功獲取所有分區(qū)上的資源,或者在所有分區(qū)上都遇到了故障。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lpprt |
裝入預(yù)分區(qū)子代理程序。這個子代理程序?qū)⑤斎霐?shù)據(jù)從一個輸入流預(yù)分區(qū)成多個輸出流,每個分區(qū)子代理程序都有一個這樣的進(jìn)程。
每個輸入流都將有一個預(yù)分區(qū)子代理程序。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lpart |
裝入分區(qū)子代理程序。這個子代理程序?qū)⑤斎霐?shù)據(jù)分區(qū)成多個輸出流,將寫入數(shù)據(jù)的每個數(shù)據(jù)庫分區(qū)都有一個這樣的進(jìn)程。
分區(qū)子代理程序的數(shù)量可以由用戶進(jìn)行配置。缺省數(shù)量取決于輸出數(shù)據(jù)庫分區(qū)的總數(shù)。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lmibm |
裝入微型緩沖區(qū)操縱器子代理程序進(jìn)程。
如果為裝入使用了 partition_only方式,那么該子代理程序就編寫分區(qū)的輸出文件。
每個輸出數(shù)據(jù)庫分區(qū)就有一個微型緩沖區(qū)操縱器子代理程序。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lload |
裝入子代理程序進(jìn)程。這個子代理程序負(fù)責(zé)完成每個數(shù)據(jù)庫分區(qū)上的裝入操作。它衍生格式化程序、ridder、緩沖區(qū)操縱器和媒體記錄器 EDU,并監(jiān)視它們的工作。
每個輸出數(shù)據(jù)庫分區(qū)都有一個裝入子代理程序。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lrdfl |
裝入讀文件子代理程序進(jìn)程。這個子代理程序讀取給定數(shù)據(jù)庫分區(qū)上的消息文件,并將數(shù)據(jù)發(fā)送回客戶機(jī)。每個輸出分區(qū)、分區(qū)的分區(qū)和預(yù)分區(qū)的分區(qū)都有一個讀文件子代理程序。 |
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2llqcl |
裝入查詢清除子代理程序進(jìn)程。這個子代理程序從給定分區(qū)除去所有裝入臨時文件。
每個輸出分區(qū)、分區(qū)的分區(qū)和預(yù)分區(qū)的分區(qū)都有一個清除子代理程序。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lmitk |
裝入微型任務(wù)子代理程序進(jìn)程。這個子代理程序釋放了在某次從游標(biāo)調(diào)用的裝入或 CLI 裝入中使用的所有 LOB 定位器。
運(yùn)行在協(xié)調(diào)程序分區(qū)上的每個游標(biāo)/CLI 裝入都有一個微型任務(wù)子代理程序。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lurex |
裝入用戶出口子代理程序進(jìn)程。這個子代理程序運(yùn)行用戶的文件傳送命令。
使用文件傳送命令選項的每個裝入作業(yè)都將有一個用戶出口子代理程序。
|
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| db2lmctk |
該進(jìn)程用于持有、釋放或降級(downgrade)目錄分區(qū)上持有的由于裝入而產(chǎn)生的鎖。 |
只適用于多分區(qū)數(shù)據(jù)庫環(huán)境 |
| d2med |
這些進(jìn)程對用于 LOAD、備份和恢復(fù)的數(shù)據(jù)庫表空間進(jìn)行讀和/或?qū)懖僮鳌?
它們將已格式化頁面中的數(shù)據(jù)寫到表空間容器。
|
所有 |
| db2reorg |
該進(jìn)程用于執(zhí)行 DB2 V8.1 中新的聯(lián)機(jī) — 就地重組操作。該進(jìn)程的工作原理類似于磁盤整理碎片工具,它以特定的順序放置數(shù)據(jù)行。 |
所有 |
表 5. 一些常用的可執(zhí)行文件
| 進(jìn)程名 |
描述 |
適用范圍 |
| db2 |
DB2 命令行處理器(CLP)前臺進(jìn)程。它解析 DB2 命令和 SQL 語句等。
該進(jìn)程是 DB2 CLP 的交互式組件。
這個前端/后端配置對于命令行性能確實有一些益處:前端處理到用戶的連接,而后端與數(shù)據(jù)庫進(jìn)行連接。
您可以使用 CTRL-C/CRTL-Break 來停止處理工作(即當(dāng)返回太多記錄時),而無需殺死到數(shù)據(jù)庫的連接。
|
所有 |
| db2bp |
這是 DB2 CLP 的持久后臺進(jìn)程,并且它是實際連接到數(shù)據(jù)庫的進(jìn)程。
因為 DB2 CLP 允許 OS 及 DB2 命令/語句,因此這個后臺進(jìn)程是必需的。
|
所有 |
| db2cmd |
類似于 db2 可執(zhí)行文件,但適用于 Windows。db2cmd 調(diào)用 Windows 命令窗口。在 Windows 上,當(dāng)父線程被終止時,它們不能終止其子進(jìn)程。DB2 命令行處理器具有一個前端和后端進(jìn)程/線程,因此我們需要一個 cookie(通過 DB2CMD.EXE 啟動的)在 Windows 上將這些線程聯(lián)系在一起,這樣,如果用戶退出或殺死前端進(jìn)程,那么后端進(jìn)程也被終止。 |
只適用于 Windows |
| db2start |
啟動 DB2 引擎的用戶命令。 |
所有 |
| db2star2 |
真正的 db2start 程序。 |
所有 |
| db2stop |
停止 DB2 引擎的用戶命令。 |
所有 |
| db2stop2 |
真正的 db2stop 程序。 |
所有 |
表 6. 其它 Windows 服務(wù)/進(jìn)程
| 進(jìn)程名 |
描述 |
| db2dasrrm.exe |
DB2 管理服務(wù)器(Admin Server)進(jìn)程。通過使用 DB2 控制中心(Control Center),該進(jìn)程支持本地和遠(yuǎn)程管理請求。 |
| db2dasstm.exe |
DB2 管理服務(wù)器工具 DB 管理器進(jìn)程。如果已經(jīng)在 DB2 服務(wù)器上設(shè)置了該進(jìn)程,那么它就會將信息存入工具數(shù)據(jù)庫,并從工具數(shù)據(jù)庫檢索信息。 |
| db2fmp.exe |
該進(jìn)程處理/執(zhí)行所有受防護(hù)的存儲過程和 UDF。 |
| db2rcmd.exe |
DB2 遠(yuǎn)程命令服務(wù)(Remote Command Service),它自動處理分區(qū)間的管理通信。 |
| db2jds.exe |
DB2 JDBC applet 服務(wù)器服務(wù)。該服務(wù)攔截和處理連接到 DB2 服務(wù)器的所有 JDBC 應(yīng)用程序。 |
| db2licd.exe |
DB2 許可證守護(hù)程序。該進(jìn)程驗證 DB2 啟動時正確的 DB2 許可證是否安裝到了服務(wù)器上。 |
| db2sec.exe |
在 Windows 的 DB2 服務(wù)器上使用該進(jìn)程來檢查用戶標(biāo)識和密碼。由于 DB2 依賴于操作系統(tǒng)級別的認(rèn)證,因此,當(dāng)某個用戶或應(yīng)用程序連接到服務(wù)器上的數(shù)據(jù)庫時,使用該進(jìn)程驗證用戶標(biāo)識和密碼。當(dāng)將認(rèn)證設(shè)置為 SERVER 時,或者當(dāng)連接是從非安全的操作系統(tǒng)建立的時候,就會進(jìn)行這一認(rèn)證。 |
| db2syscs.exe |
Windows 上的主要 DB2 系統(tǒng)控制器或引擎。EDU 是該進(jìn)程中的線程。
請注意末尾的“s”代表 Windows 服務(wù)。
|
| IWH2SERV.EXE |
倉庫管理器中心(Warehouse Manager Center)。該中心作為 DB2 ESE 的一部分(而不是 DB2 引擎的一部分)安裝。 |
下表可能是一個非常有用的索引,可以用它來找到給定的進(jìn)程。它以字母順序列出了所有進(jìn)程,并且?guī)в械缴鲜霰淼逆溄印?/p>
表 7. 按字母順序排列的所有進(jìn)程
| # |
進(jìn)程/Windows 服務(wù)/可執(zhí)行文件名 |
到提供更詳細(xì)信息的表的鏈接 |
| 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 |

 |

|
示例
下面這一節(jié)為您演示了一些輸出示例,當(dāng)您在 AIX 中執(zhí)行 ps -ef 命令時可能會獲得這樣的輸出。
運(yùn)行 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
|
數(shù)據(jù)庫管理器配置文件包含下列設(shè)置,它們會影響您最初看到的進(jìn)程:
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,所以在運(yùn)行 db2start 時不會顯示“db2agent (idle)”進(jìn)程。例如,如果在運(yùn)行 db2start 之前將 NUM_INITAGENTS 設(shè)置為 5,那么在發(fā)出 db2start 之后,將顯示下面這些額外的進(jìn)程:
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)
|
在連接到數(shù)據(jù)庫 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 數(shù)據(jù)庫后,“db2agent (SAMPLE)”進(jìn)程出現(xiàn)了。該進(jìn)程表明實際上有一個到 SAMPLE 數(shù)據(jù)庫的連接。如果我們發(fā)出以下命令:
db2agent (SAMPLE) 現(xiàn)在將變成 db2agent (idle)。這是因為 NUM_POOLAGENTS 被設(shè)置成了大于零的數(shù),這意味著該代理程序盡管是空閑的,但在池中將仍然保持被分配的狀態(tài)。如果 NUM_POOLAGENTS 被設(shè)置成零,那么在運(yùn)行了“connect reset”后,將不再有 db2agent 進(jìn)程運(yùn)行。
SAMPLE 數(shù)據(jù)庫的數(shù)據(jù)庫配置文件包含下列這些設(shè)置:
Number of asynchronous page cleaners (NUM_IOCLEANERS) = 1
Number of I/O servers (NUM_IOSERVERS) = 3
|
請注意,有三個 db2pfchr 進(jìn)程(與 NUM_IOSERVERS 的值對應(yīng))和一個 db2pclnr 進(jìn)程(與 NUM_IOCLEANERS 的值對應(yīng))。
結(jié)束語
根據(jù)不同的 DB2 操作和配置設(shè)置,將會有許多其它進(jìn)程出現(xiàn)和消失。我們已經(jīng)為您展示了一些樣本方案,這些方案演示了您可以如何觀察哪些進(jìn)程正在運(yùn)行、這些進(jìn)程表明了什么以及數(shù)據(jù)庫設(shè)置對其產(chǎn)生了怎樣的影響。現(xiàn)在您可以使用這一知識來提高您管理 DB2 數(shù)據(jù)庫的能力。