數據庫從操作系統申請到的內存可分為兩部分:1.緩存池內存(數據頁和空閑頁)2.非緩存池內存(線程/DLL/連接服務器等).在數據庫中,如何設置和調整bufferpool是一個
數據庫從操作系統申請到的內存可分為兩部分:1.緩存池內存(數據頁和空閑頁) 2.非緩存池內存(線程/DLL/連接服務器等). 在數據庫中,如何設置和調整bufferpool是一個重要技巧,值太大可能會使數據庫無法啟動,太小又會使應用出錯,不能充分發揮數據庫性能。
舉例來說:
當你連接DB2數據庫,運行某SQL語句時提示:
SQL1218N There are no pages currently available in bufferpool "4096"。SQLSTATE=57011。
一般解決思路:
調整buffpool的大小
解決方法:
1> 啟動數據庫
db2inst1@tysq: db2start
啟動db2命令行
db2inst1@tysq:db2
2> 連接數據庫
db2 =>connect to test
3> 修改buffer pool
檢查當前數據庫已有的buffer pool
db2=>select * from syscat.bufferpools
結果顯示系統存在默認的bufferpool IBMDEFAULTBP, 大小為4K(1*4096),這個數值明顯太小;
直接修改IBMDEFAULTBP的大小:
db2 =>alter bufferpool IBMDEFAULTBP immediate size 50000
現在bufferpool的大小為200M(50000*4096) ,可以滿足當前應用需求。
4> 重啟數據庫管理程序
db2inst1@tysq: db2stop force
db2inst1@tysq: db2star
還有一種觀察方法
db2inst1@tysq:~> db2pd -db zssqdb01 -buff
Database Partition 0 -- Database ZSSQDB01 -- Active -- Up 23 days 08:43:02 -- Date 2014-01-11-17.58.28.554662
Bufferpools:
First Active Pool ID 1
Max Bufferpool ID 2
Max Bufferpool ID on Disk 2
Num Bufferpools 6
Address Id Name PageSz PA-NumPgs BA-NumPgs BlkSize NumTbsp PgsToRemov CurrentSz PostAlter SuspndTSCt Automatic
0x00002AB4A91D91C0 1 IBMDEFAULTBP 4096 86884 0 0 5 0 86884 86884 0 True
0x00002AB4A91DA3C0 2 BP32 32768 45000 0 0 2 0 45000 45000 0 False
0x00002AB419AE4260 4096 IBMSYSTEMBP4K 4096 16 0 0 0 0 16 16 0 False
0x00002AB419AE5460 4097 IBMSYSTEMBP8K 8192 16 0 0 0 0 16 16 0 False
0x00002AB419AE66A0 4098 IBMSYSTEMBP16K 16384 16 0 0 0 0 16 16 0 False
0x00002AB419AE78E0 4099 IBMSYSTEMBP32K 32768 16 0 0 0 0 16 16 0 False
在這里可看到各個緩沖區的大小。檢查SQL語句,可以發現報緩沖區不足信息的相應涉及表在幾號表空間,那個表空間對應使用的BufferpoolID是什么,這樣可以擴充對應的緩沖區空間,不是所有這個報錯都和IBMDEFAULTBP有關系。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com