https://blog.csdn.net/liujinwei2005/article/details/8547190
DB2 緩沖池調優Bufferpools
背景知識 緩沖池是內存中的一塊存儲區域,用于臨時讀入和更改數據庫頁(包含表行或索引項)。緩沖池的用途是為了提高數據庫系統的性能。從內存訪問數據要比從磁盤訪問數據快得多。因此,數據庫管理器需要從磁盤讀取或寫入磁盤的次數越少,性能就越好。對一個或多個緩沖池進行配置之所以是調優的最重要方面,是因為連接至數據庫的應用程序的大多數數據(不包括大對象和長字段數據)操作都在緩沖池中進行。 缺省情況下,應用程序使用緩沖池 IBMDEFAULTBP,它是在創建數據庫時創建的。當 SYSCAT.BUFFERPOOLS 目錄表中該緩沖池的 NPAGES 值為 -1 時,DB2 數據庫配置參數 BUFFPAGE 控制著緩沖池的大小。否則會忽略 BUFFPAGE 參數,并且用 NPAGES 參數所指定的頁數創建緩沖池。 建議 對于僅使用一個緩沖池的應用程序,將 NPAGES 更改成 -1,這樣 BUFFPAGE 就可以控制該緩沖池的大小。這使得更新和報告緩沖池大小以及其它 DB2 數據庫配置參數變得更加方便。 確保可以使用數據庫配置中的 BUFFPAGE 參數來控制緩沖池大小之后,將該參數設置成合適的值。根據數據庫的大小和應用程序的性質將該參數設置成一個合理的大值,這種做法很安全。通常,該參數的缺省值非常小,可能滿足不了要求。請考慮下列情況: 一開始,如果您的機器上有足夠大的內存,請將 BUFFPAGE 設置成 40000 個頁(160 MB),或者等于機器總內存的 10%。 對于大型 OLTP 數據庫,在保持系統穩定的同時為緩沖池留出盡可能多的內存。一開始,先嘗試使用 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 -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 緩沖池命中率表明數據庫管理器不需要從磁盤裝入頁(即該頁已經在緩沖池中)就能處理頁請求的時間百分比。緩沖池的命中率越高,使用磁盤 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%。要提高緩沖池命中率,請嘗試下面這些方法: 增加緩沖池大小。 考慮分配多個緩沖池,如果可能的話,為每個經常被訪問的大表所屬的表空間分配一個緩沖池,為一組小表分配一個緩沖池,然后嘗試一下使用不同大小的緩沖池以查看哪種組合會提供最佳性能。 如果已分配的內存不能幫助提高性能,那么請避免給緩沖池分配過多的內存。應當根據取自測試環境的快照信息來決定緩沖池的大小。 |
緩沖池命中率
這個比率說明了為頁面請求提供服務時,數據庫管理器不需從磁盤裝入頁(即該頁已經在緩沖池中)就能處理頁請求的時間百分比。
計算:
BPHR = (1 - ((緩沖池數據物理讀 + 緩沖池索引物理讀) /
(緩沖池數據邏輯讀 + 緩沖池索引邏輯讀) ) ) * 100%
索引命中率
這個比率表明了可以在緩沖池中找到的頁面能夠滿足的對索引頁的所有讀請求所占的百分比。
計算:
IHR = (1 - (緩沖池索引物理讀 / 緩沖池索引邏輯讀) ) ) * 100%
數據命中率
這個比率說明了可以在緩沖池中找到的頁面能夠滿足的對數據頁的所有讀請求所占的百分比。
計算:
DHR = (1 - (緩沖池數據物理讀 / 緩沖池數據邏輯讀) ) ) * 100%
結論
緩沖池命中率大于 80% 被認為是理想的。對于 OLTP 系統來說,該值的理想情況是盡可能接近于 100% (索引命中率更是如此)。
要提高緩沖池的命中率,可以增加緩沖池的大小,也可以考慮分配多個緩沖池,可以為每個經常訪問的具有自己的表空間的大型表使用一個緩沖池,也可以為一組小型表使用一個緩沖池。