緩存池:
沖池是內存中的一塊區域,db2會將用到數據放到緩沖池中提高性能。緩沖池太小,每次查詢仍然要到磁盤中操作,達不到緩沖的效果。緩沖池太大,超出操作系統管理的限制,會導致數據庫無法連接的錯誤。
緩沖池是通過表空間與數據表發生聯系的,數據表存放在指定的表空間中,每個表空間又有指定的緩沖池。因為每張數據表存儲的數據量都不同,一般根據每條記錄存放的最大數據量,我們會為數據表分別指定4k-32k不同的表空間來存放,以達到優化存儲和性能的目的,緩沖池也是類似。這個一般在創建數據庫時就會分配好了。
案發預警:
應用系統程序:一般是登錄、首頁、待辦列表等數據量比較大的模塊,響應時間長,耗時數秒到數十秒都有可能。有時候是用戶訪問高峰期慢,下班時間又比較正常。 操作系統上的表現:一般是中間件服務器(WAS)系統正常,CPU和IO占用不會持續超過50%,系統運行進程不會有持續的等待。數據庫服務器則非常繁忙,CPU占用持續在50%以上,往往會達到持續90%左右,IO占用可能不高。從系統層面判斷,性能瓶頸出在數據庫上
調優思路:
db2的性能和操作系統、鎖、緩沖池、索引等參數,以及SQL的寫法都有很大關系,受限於個人認識,這里主要介紹緩沖池和索引的調優方法。
緩沖池的調整比較簡單,一般可以先調整緩沖池,若效果不明顯,則再調整索引和sql
切換實例用戶id 查看緩存池相關內容 su db2inst1 db2 connect to db //查看緩存池信息 db2 "select BPNAME,NPAGES,PAGESIZE from syscat.bufferpools" 表空間名稱(TableSpaceName) 使用的緩沖池名稱(BufferpoolName),表空間的頁大小(TBSPageSize) 緩沖池的數量(BufferpoolPages),緩沖池的頁大小數據(BufferpoolSize)信息
查看mv_workitem表所在表空間和緩沖池信息,一般“MV_”開頭的表使用的緩沖池是重點關注對象:
db2 "select TABSCHEMA TableSchemaName, TABNAME TableName, t.TBSPACE TableSpaceName,b.BPNAME BufferpoolName, b.NPAGES BufferpoolPages, b.PAGESIZE BufferpoolSize from SYSCAT.TABLES t ,SYSCAT.BUFFERPOOLS b,SYSCAT.TABLESPACES s where tabname='MV_WORKITEM' and s.BUFFERPOOLID=b.BUFFERPOOLID and t.TBSPACE=s.TBSPACE" //注意TableSchemaName、BufferpoolName、BufferpoolSize
//開啟緩沖池監控器: db2 update monitor switches using bufferpool on //在應用系統重現問題后,檢查緩沖池的快照: db2 get snapshot for bufferpools on pzbdw|grep -i buffer|more
檢查db2緩沖池快照,重點關注data和index的邏輯/物理讀寫數據,一般來說在緩沖池足夠的情況下,physiical reads值趨進於0,而logical和reads值則很大,情況反之就是不夠用有問題,例如一下案例是xxx系統的32k緩沖池快照:
Bufferpool Snapshot Bufferpool name = BF32 //Buffer pool data logical reads = 493907 //Buffer pool data physical reads = 78 Buffer pool temporary data logical reads = 129662 Buffer pool temporary data physical reads = 0 Buffer pool data writes = 1 //Buffer pool index logical reads = 10302 //Buffer pool index physical reads = 122 //如果發現物理和邏輯讀的值相差不大,則使用下面的命令調整緩沖池大小,一般可以每次增加2000左 右
db2 ALTER BUFFERPOOL BF32 size 18000
緩沖池的調整是立即生效的,不需要重啟數據庫。需要注意的是,緩沖池的大小受物理內存和操作系統限制,一般32位操作系統下,總的緩沖池大小不能超過1G。如果在這個限制下,不能滿足所有緩沖池都達到物理讀趨近於0,則考慮盡可能保證用戶體驗影響較大的(MV、UM等開頭的表使用的)緩沖池大小。理論上64位操作系統可以管理更大的內存空間,因此可以獲得更好的性能。如下所示緩沖池,總大小為:
1x4+4x4+3x8+2.5x16+2.5x32+1x32=226M
重復以上步驟再次收集快照信息:
db2 update monitor switches using bufferpool off db2 update monitor switches using bufferpool on db2 get snapshot for bufferpools on pzbdw|grep -i buffer|more //由於緩沖池的監控器收集的是自啟用以后的數據,為獲得調整后的准確情況,應關閉后重新打開,再 次收集快照信息