DB2數據庫故障與性能瓶頸診斷思路

本文主要介紹了db2數據庫在遇到故障及性能問題時運用什麼方法去快速診斷定位問題,希望本文內容可以為從事db2的網友提供一些指導和參考

1、在db2數據庫主機遇到重大故障時我們可以通過db2support收集數據庫診斷日誌數據

#在可以連接的時候

#db2support . -d sample -c -g -s

#不能連接的時候

#db2support . -c -g -s

2bufferpool設置的太大連接數據庫時導致系統宕機的解決方法:

操作步驟:

#db2set DB2_OVERRIDE_BPF=10000

#db2 terminate

#db2stop

#db2start

#db2 connect to db

#連上db

#db2 alter bufferpool buffer001 numblockpages

#原來的塊SIZE太大,我們這裡禁用它

#db2 force applications all

#db2 connect to db

#db2 alter bufferpool buffername immediate size 50000

#SIZE改小

#db2set DB2_OVERRIDE_BPF= #設置為空,還原回去

#db2 terminate

#db2 force applications all

#db2stop

#db2start

3、如何快速定位問題

  1)如果系統的CPU利用很高,IO很少,那麼數據庫的排序較多

  2)如果系統的IO繁忙,CPU很多是wait,那麼說明數據庫有過多的IO

  3)如果系統CPUIO都很空閑,那麼說明可以是有鎖的問題

  4)如果系統IOCPU都非常忙,說明有執行代價非常高的sql在執行

4、快速找到執行成本較高的sql

  #首先要打開監視器的開關

  #db2 update monitor switches using bufferpool on lock on sort on statement on table on uow on

  #在系統最繁忙的時候,運行

  #db2 get snapshot for all applications > app.out

  #然後在該文件中查找處於Executing狀態的應用,找到執行的對應的sql語句。

  #如果用這種方法找不到,再收集sql的快照

  #db2 get snapshot for dynamic sql on > sql.out

 5、如何優化sql語句

  DB2提供了很好的工具來做sql語句優化。首先要對找到的sql語句進行分析,看是否是該語句引起了性能問題。我們可以使用db2expln來查看sql語句的訪問計劃和執行成本。

  #首先將找到的sql語句寫到一個文本文件中以;結尾,然後運行

  #db2expln –d dbname -f sqlfile -g -o sql.explain查看 sql.explain可以看到這個sql語句的執行成本。

  #如果確認該語句有問題,可以使用db2advis來通過建索引的方法來優化該語句.db2advis -d -i sqlfile如果通過創建索引無法優化該語句,一般只能從業務角度優化。

6、如果發生鎖的問題如何處理

發生鎖的問題,一般有兩種情況,一是鎖等待,二是死鎖。

#首先檢查數據庫配置參數locktimeout,該參數一定不能設為-1,因為會引起某些應用無限期的等待。

  #其次可以通過快照來確定數據庫發生的問題是哪一種。

  #db2 get snapshot for db on

  #查看輸出中的下列內容:

  #Deadlocks detected = 0

  #Lock Timeouts = 0

  #如果發生了死鎖,可以通過創建死鎖監視器來分析產生死鎖的原因,命令如下:

  #mkdir /tmp/dlmon

  #db2 connect to dbname

  #db2 create event monitor dlmon for deadlocks with detail write to file ‘/tmp/dlmon’ replace

  #db2 set event monitor dlmon state 1等有死鎖發生後

  #db2 set event monitor dlmon state 0

  #db2evmon –d /tmp/dlmon >/tmp/dlmon.out

#分析/tmp/dlmon.out文件就可以找到造成死鎖的信息,結合應用就可以找到造成死鎖的原因了。

二、關於bufferpool

1、大緩衝池的優點

它們使頻繁請求的數據頁能夠保存在緩衝池中,這樣可更快地訪問。更少的 I/O 操作可以減少 I/O 爭用,從而可提供更短的響應時間並減少 I/O 操作所需的處理器資源。

它們提供在相同的響應時間內到達更高的事務處理速率的機會。

它們防止頻繁使用的磁盤存儲設備(如目錄表)和頻繁引用的用戶表和索引的 I/O 爭用。由於包含臨時表空間的磁盤存儲設備上的 I/O 爭用減少,查詢所需的排序也從中受益。

許多緩衝池的優點

2、基於下列原因可考慮使用多個緩衝池:

可以把臨時表空間分配給單個緩衝池中,以便為需要臨時存儲器的查詢尤其是執行大量排序的查詢提供更佳性能。

如果數據必須由很多小的更新事務應用程序反覆地快速訪問,考慮將包含該數據的表空間指定給單獨的緩衝池。如果此緩衝池的大小定得合適,將有更多的機會找到它的頁,以利於縮短響應時間和降低事務成本。

您可以將數據隔離到不同的緩衝池中,以利於特定的應用程序、數據和索引。例如,您可能要將頻繁更新的表和索引置於一個單獨的緩衝池中,與那些雖頻繁查詢但不頻繁更新的表和索引分開。此更改將減少對第一組表的頻繁更新對第二組表的頻繁查詢具有的影響。

對於很少使用的應用程序所訪問的數據,可使用較小的緩衝池,尤其對於需要對一個很大的表非常隨機地進行訪問的應用程序。在
這種情況下,不需要將數據保存在緩衝池中的時間超過單個查詢的保存時間。最好為此數據保留一個小緩衝池,而釋放多餘的內存用於其他用途,如用於其他緩衝
池。

當將不同的活動和數據隔離到不同的緩衝池之後,可從統計信息和記帳跟蹤獲得一個良好的、相對成本較低的性能診斷數據。

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營