天天看點

DB2 緩沖池調優BufferpoolsDB2 緩沖池調優Bufferpools

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% (索引命中率更是如此)。

要提高緩沖池的命中率,可以增加緩沖池的大小,也可以考慮配置設定多個緩沖池,可以為每個經常通路的具有自己的表空間的大型表使用一個緩沖池,也可以為一組小型表使用一個緩沖池。