db2cos是個好東西

2021-05-21 16:40:27 字數 2967 閱讀 2748

[環境]

db2 v8.2,9.1/9.5

unix/linux平台

[問題描述]

在db2 udb 8.2發布之後,乙個很有價值的工具被加入了db2中,它就是db2pd。在監控資料庫,或者進行問題診斷的時候,由於db2pd可以直接從db2的記憶體 中讀取資訊,所以它比起snapshot來說開銷更小,速度也更快。它可以收集db2資訊包括:鎖,緩衝池,記憶體,事務等等。在問題診斷的時候,我們可以 利用db2pd中的乙個很有特點的功能,幫助我們在第一時間內收集重要的診斷資料。這個功能就是callout script/db2cos。

本文將介紹如何利用這一有用的功能在unix/linux平台上收集資料,和如何簡單的定製db2cos指令碼。

[解答]

1. db2pd/db2pdcfg -catch和db2cos介紹

在db2 v8.2/9.1和9.5中,我們可以使用db2pd -catch命令(在db2 9.1和9.5中的等價命令為db2pdcfg -catch),捕捉指定的sql code/zrc/ecf等錯誤**,並且收集資料。命令的格式為:

db2pd -catch [clear|status|] [count=]

例如,如果要在乙個鎖超時錯誤發生時,呼叫db2cos指令碼:

db2pd -catch locktimeout db2cos

在db2例項中的$home/sqllib目錄下有乙個名為db2cos的指令碼,這個路徑是db2cos存放的預設路徑。執行了上面的命令之後,當鎖超時發生時,這個db2cos指令碼就會被執行。預設的db2cos指令碼會把一些重要的資訊輸出到乙個外部文字檔案中。

2. db2cos指令碼介紹

db2 安裝後自帶的預設db2cos指令碼有著簡單的流程。db2呼叫它的時候會同時傳遞給它一些引數。db2cos指令碼通過這些引數得知呼叫自己的例項,程序, 時間點和函式等等資訊。還有乙個傳入的引數叫做typereason,它告訴db2cos被呼叫的原因是什麼,例如資料損壞(data_cor),鎖超時 (locktimeout),死鎖(deadlock)或者其他錯誤**(sqlcode)。

db2cos會遍歷上面的引數,記錄下他們的值,然後根據typereason引數的定義,執行對應的動作。每次db2cos被呼叫,db2diag.log中都會有相應的記錄。例如:

3. 用db2cos分析鎖超時

使用預設的db2cos指令碼就可以方便的分析鎖超時問題。首先賦予db2cos指令碼執行許可權:

chmod u+x $home/sqllib/db2cos

然後使用db2pd -catch命令開啟捕獲開關。這個命令會告訴db2在發生鎖超時(lock timeout)的時候執行指令碼db2cos。

db2pd -catch locktimeout

於是,這個預設的db2cos指令碼會在鎖超時發生後,生成乙個名為db2cos.rpt的檔案在$home/sqllib/db2dump/下,其中的資訊會對分析鎖超時很有幫助。

4. db2cos和db2 trace一起使用

使用db2cos配合db2的trace命令,可以有效捕捉那些沒有出現規律的問題。

在 實際工作中,有些問題並不是有規律的發生。它們並不能被輕易的重現。當它們再次發生的時候,如何收集到盡量完整的診斷資料,有時會困擾分析人員。db2 trace是乙個強有力的跟蹤工具,db2trc -l命令以迴圈的方式收集db2 trace資訊,它在快取中只保留最新的trace資訊。

簡單的修改預設的db2cos指令碼,就可以讓db2pd -catch配合db2trc -l使得問題發生時的關鍵跟蹤資料被及時的儲存起來。請看下面的示例。

如果有乙個sql30082的錯誤無規律的發生,我們需要分析當時到底發生了什麼。首先修改預設的db2cos指令碼,在「sqlcode」段後面增加兩行儲存和關閉trace的命令:

"sqlcode")

db2trc dmp /tmp/db2trc.dmp

db2trc off

... ...

然後開啟捕獲sql30082錯誤的開關,同時開啟trace,等待問題發生。

db2pd -catch -30082

db2trc on -l 64m

當問題發生後,db2trc.dmp檔案會被立即生成在/tmp/目錄下面,同時db2trc off命令將trace關閉。這保證了在db2trc的快取中保留的診斷資料可以在第一時間內被儲存下來,而不會被後續的資訊所覆蓋。

5. 定製和改進db2cos指令碼

有些問題,我們可能需要捕捉不只一次資料,例如鎖超時和死鎖。db2pd -catch有乙個引數count可以控制db2cos最多被呼叫幾次。例如,如何我們需要連續捕捉十次鎖超時:

db2pd -catch locktimeout count=10

預設的db2cos指令碼會將所有資訊寫入到同乙個db2cos.rpt檔案中,不方便分析。我們可以為每一次鎖超時指定不同的檔名。在db2cos指令碼的開頭,定義輸出檔名:

cosout=$home/sqllib/db2dump/db2cos.rpt.`date +%y%m%d.%h%m%s`

然後將"locktimeout")下面的每個輸出檔名指向這個檔案:

echo "lock timeout caught" > $cosout

date >> $cosout

echo "instance " $instance >> $cosout

... ...

每次生成的檔案會形如 db2cos.rpt.20080314.172409。

6. db2 9.5中,db2cos的預設路徑更改為$home/sqllib/adm/,如果這裡找不到,那麼$home/sqllib/bin/目錄下面的db2cos會被執行。

db2cos是乙個很有用的工具,它給分析人員和使用者提供了更加自主的空間,為靈活診斷問題帶來了便利。

CCProxy是個好東西

我在之前的部落格裡提到了用teamviewer ccproxy做內網穿透,當時只是簡單提了一下,因為發現這種方式網速比較慢。今天又用到了它,雖然慢點,但是總比沒的用好,哈哈哈。不得不感嘆ccproxy是個好東西,小巧靈活,好多次用學校的ip下 都靠它的,設定也比較簡單。上網本質上和 一樣,只要內網機...

槍油是個好東西

冷風扇失效。而且噪音比較大。本想更換乙個原裝的,問了維修點 原裝的要300元。還 是自己動手豐衣足食吧,將風扇拆下來,清理到灰塵後,將散熱片和風扇拆開,撕開風 扇後的標籤,滴上2滴槍油,重新裝好。測試 自己寫了乙個程式,死迴圈內做mac操作。目的占用cpu資源,讓風扇盡快開啟。沒有一會風扇開啟,起先...

Markdown是個好東西

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...