以下的文章主要向大家講述的是DB2緩沖池問題的診斷以及優化的實際操作步驟,同時本文也有對DB2緩沖池問題的診斷以及優化的背景知識,相關建議的描述,以下就是文章的主要內容的詳細解析。
池問題, 緩沖, 診斷池問題, 緩沖, 診斷
背景知識
緩沖池是內存中的一塊存儲區域,用於臨時讀入和更改數據庫頁(包含表行或索引項)。DB2緩沖池的用途是為了提高數據庫系統的性能。從內存訪問數據要比從磁盤訪問數據快得多。
因此,數據庫管理器需要從磁盤讀取或寫入磁盤的次數越少,性能就越好。對一個或多個緩沖池進行配置之所以是調優的最重要方面,是因為連接至數據庫的應用程序的大多數數據(不包括大對象和長字段數據)操作都在DB2緩沖池中進行。
缺省情況下,應用程序使用緩沖池 IBMDEFAULTBP,它是在創建數據庫時創建的。當 SYSCAT.BUFFERPOOLS 目錄表中該緩沖池的 NPAGES 值為 -1 時,DB2 數據庫配置參數 BUFFPAGE 控制著緩沖池的大小。否則會忽略 BUFFPAGE 參數,並且用 NPAGES 參數所指定的頁數創建緩沖池。
建議
對於僅使用一個緩沖池的應用程序,將 NPAGES 更改成 -1,這樣 BUFFPAGE 就可以控制該緩沖池的大小。這使得更新和報告緩沖池大小以及其它 DB2 數據庫配置參數變得更加方便。
確保可以使用數據庫配置中的 BUFFPAGE 參數來控制緩沖池大小之後,將該參數設置成合適的值。根據數據庫的大小和應用程序的性質將該參數設置成一個合理的大值,這種做法很安全。通常,該參數的缺省值非常小,可能滿足不了要求。請考慮下列情況:
一開始,如果您的機器上有足夠大的內存,請將 BUFFPAGE 設置成 40000 個頁(160 MB),或者等於機器總內存的 10%。
對於大型 OLTP 數據庫,在保持系統穩定的同時為DB2緩沖池留出盡可能多的內存。一開始,先嘗試使用 1.6 GB 的內存,然後嘗試用更多內存。
如何更改該參數
運行下面這個腳本,以便:
驗證目錄值
啟用數據庫配置參數 BUFFPAGE
更新所有數據庫的 BUFFPAGE 值。
- DB2 -v connect to DB_NAME
- DB2 -v select * from syscat.bufferpools
- DB2 -v alter bufferpool IBMDEFAULTBP size -1
- DB2 -v connect reset
- DB2 -v update db cfg for dbname using BUFFPAGE bigger_value
- DB2 -v terminate
研究步驟
要確定數據庫的緩沖池大小是否由 BUFFPAGE 參數所決定,請運行:
- DB2 -v connect to DB_NAME
- DB2 -v SELECT * from SYSCAT.BUFFERPOOLS
- DB2 -v connect reset
- DB2 -v terminate
檢查結果。如果每個緩沖池都有一個為“-1”的 NPAGES 值,那麼緩沖池大小是由數據庫配置中的 BUFFPAGE 參數控制的。
要確定緩沖池大小是否足夠大,請在運行應用程序時收集數據庫和/或DB2緩沖池的快照。類似於下面的腳本為您提供這些所需的信息:
- DB2 -v update monitor switches using bufferpool on
- DB2 -v get monitor switches
- DB2 -v reset monitor all
- -- run your application --
- DB2 -v get snapshot for all databases > snap.out
- DB2 -v get snapshot for dbm >> snap.out
- DB2 -v get snapshot for all bufferpools >> snap.out
- DB2 -v reset monitor all
- DB2 -v terminate
請確保您在斷開數據庫連接之前發出“DB2 -v get snapshot”。當最後一個應用程序與數據庫斷開連接時,該數據庫停止運行,同時所有快照統計信息將會丟失。要確保一直存在使數據庫處於正常運行狀態的連接,請使用下列方法之一:
在收集快照的窗口中保持一個單獨的連接。
使用 DB2 ACTIVATE DATABASE 命令。
在數據庫快照或緩沖池快照的快照輸出中,查找下列“logical reads”和“physical reads”,這樣就可以計算出緩沖池命中率,它可以幫助您調優緩沖池:
- -- Related lines from a sample of bufferpool snapshots --
- Buffer pool data logical reads = 702033
- Buffer pool data physical reads = 0
- Buffer pool data writes = 414
- Buffer pool index logical reads = 168255
- Buffer pool index physical reads = 0
緩沖池命中率表明數據庫管理器不需要從磁盤裝入頁(即該頁已經在DB2緩沖池中)就能處理頁請求的時間百分比。緩沖池的命中率越高,使用磁盤 I/O 的頻率就越低。按如下計算緩沖池命中率:
- (1 - ((buffer pool data physical reads + buffer pool index physical reads) /
- (buffer pool data logical reads + pool index logical reads))
- ) * 100%
這個計算考慮了緩沖池高速緩存的所有頁(索引和數據)。理想情況下,該比率應當超過 95%,並盡可能接近 100%。要提高緩沖池命中率,請嘗試下面這些方法:
增加緩沖池大小。
考慮分配多個緩沖池,如果可能的話,為每個經常被訪問的大表所屬的表空間分配一個DB2緩沖池,為一組小表分配一個緩沖池,然後嘗試一下使用不同大小的緩沖池以查看哪種組合會提供最佳性能。
如果已分配的內存不能幫助提高性能,那麼請避免給緩沖池分配過多的內存。應當根據取自測試環境的快照信息來決定緩沖池的大小。