2008年2月1日金曜日

DB2 v8.2 メモリをチューニングする

貧弱な開発環境向けに、CMのDB2のメモリ使用率を下げます。
@IT DB2チューニング・ベストプラクティス(2)を参考にすると、DB2のグローバルメモリ使用率は以下の計算式で概算がでるようです。
バッファ・プール+dbheap+util_heap_sz+pckcachesz+aslheapsz+locklist+約10%のオーバーヘッド
※太字部分は@ITのサイトに誤植(pkgcachsz)がありました。

当方の環境(icmnlsdb)で調べて見ると、以下の通りでした。
(icmnlsdbに接続します)
db2inst1@ホスト名 [sql/] $ grep -v ^-- sys.sql
select substr(bpname,1,20),npages,pagesize from syscat.bufferpools
db2inst1@ホスト名 [sql/] $ db2 -f sys.sql

1 NPAGES PAGESIZE
-------------------- ----------- -----------
IBMDEFAULTBP 1000 4096
ICMLSFREQBP4 1000 4096
ICMLSVOLATILEBP4 8000 4096
ICMLSMAINBP32 8000 32768
CMBMAIN4 1000 4096

5 レコードが選択されました。

db2inst1@ホスト名 [sql/] $ db2 get db cfg | egrep -i '(util_heap|dbheap|pckcache|aslheapsz|locklist)'
データベース・ヒープ (4KB) (DBHEAP) = 2400
ユーティリティー・ヒープ・サイズ (4KB) (UTIL_HEAP_SZ) = 5000
ロック・リスト用最大ストレージ (4KB) (LOCKLIST) = 1000
パッケージ・キャッシュ・サイズ (4KB) (PCKCACHESZ) = (MAXAPPLS*8)
db2inst1@ホスト名 [sql/] $ db2 get dbm cfg | egrep -i '(util_heap|dbheap|pckcache|aslheapsz|locklist)'
アプリケーション・サポート層ヒープ・サイズ (4KB) (ASLHEAPSZ) = 15

ざっくり計算すると、以下のような感じです。
a. バッファプール:(上から)4MB + 4MB + 32MB + 250MB + 4MB = 約300MB
b. DBヒープ:8MB
c. UTILヒープ:20MB
d. ロックリスト:4MB
e. アプリヒープ:60K
効きそうなのは、順に「250MBのバッファプール」>「32MBのバッファプール」>「20MBのUTILヒープ」のようです。他は無視しましょう。
では、各サイズを変更します。ALTER BUFFERPOOLコマンドとUPDATE DB CFGコマンドを使います。
db2inst1@ホスト名 [sql/] $ grep -v ^-- sys.sql
alter bufferpool ICMLSVOLATILEBP4 size 2000 -- 8000
alter bufferpool ICMLSMAINBP32 size 2000 -- 8000
update db cfg using UTIL_HEAP_SZ 2000
db2inst1@ホスト名 [sql/] $ db2 -f sys.sql
DB20000I SQL コマンドが正常に終了しました。

DB20000I SQL コマンドが正常に終了しました。

DB20000I UPDATE DATABASE CONFIGURATION コマンドが正常に終了しました。

db2inst1@ホスト名 [sql/] $ db2 -f sys.sql

1 NPAGES PAGESIZE
-------------------- ----------- -----------
IBMDEFAULTBP 1000 4096
ICMLSFREQBP4 1000 4096
ICMLSVOLATILEBP4 2000 4096
ICMLSMAINBP32 2000 32768
CMBMAIN4 1000 4096

5 レコードが選択されました。
db2inst1@ホスト名 [sql/] $ db2 get db cfg | egrep -i '(util_heap|dbheap|pckcache|aslheapsz|locklist)'
データベース・ヒープ (4KB) (DBHEAP) = 2400
ユーティリティー・ヒープ・サイズ (4KB) (UTIL_HEAP_SZ) = 2000
ロック・リスト用最大ストレージ (4KB) (LOCKLIST) = 1000
パッケージ・キャッシュ・サイズ (4KB) (PCKCACHESZ) = (MAXAPPLS*8)
(念のためDBを再起動します)

以上です。

0 件のコメント: