DB2資料庫故障與效能瓶頸診斷思路小記一
1、在db2資料庫主機遇到重大故障時我們可以通過db2support收集資料庫診斷日誌資料
#在可以連線的時候
#db2support . -d sample -c -g -s
#不能連線的時候
#db2support . -c -g -s
2、bufferpool設定的太大連線資料庫時導致系統宕機的解決方法:
操作步驟:
#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)如果系統CPU,IO都很空閒,那麼說明可以是有鎖的問題
4)如果系統IO,CPU都非常忙,說明有執行代價非常高的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、基於下列原因可考慮使用多個緩衝池:
可以把臨時表空間分配給單個緩衝池中,以便為需要臨時儲存器的查詢尤其是執行大量排序的查詢提供更佳效能。
如果資料必須由很多小的更新事務應用程式反覆地快速訪問,考慮將包含該資料的表空間指定給單獨的緩衝池。如果此緩衝池的大小定得合適,將有更多的機會找到它的頁,以利於縮短響應時間和降低事務成本。
您可以將資料隔離到不同的緩衝池中,以利於特定的應用程式、資料和索引。例如,您可能要將頻繁更新的表和索引置於一個單獨的緩衝池中,與那些雖頻繁查詢但不頻繁更新的表和索引分開。此更改將減少對第一組表的頻繁更新對第二組表的頻繁查詢具有的影響。
對於很少使用的應用程式所訪問的資料,可使用較小的緩衝池,尤其對於需要對一個很大的表非常隨機地進行訪問的應用程式。在 這種情況下,不需要將資料儲存在緩衝池中的時間超過單個查詢的儲存時間。最好為此資料保留一個小緩衝池,而釋放多餘的記憶體用於其他用途,如用於其他緩衝 池。
當將不同的活動和資料隔離到不同的緩衝池之後,可從統計資訊和記帳跟蹤獲得一個良好的、相對成本較低的效能診斷資料。