DB2設定での対応
DB2設定での対応
一方のDB2設定での対応は、2通りあります。以降では、それらについて解説していきます。
DB2の処理でページキャッシュを使わない方法
DB2側の対応方法の1つとして、ページキャッシュ使用量を抑え、DB2でページキャッシュを使用しないことを検討します。
具体的には、表スペースの定義でraw deviceを利用する、あるいはdirect i/oを利用することを検討します。direct i/oは、create tablespace文において「no file system caching」のオプションをつけるだけで利用可能です。
なお一般に、DB2の一時表スペースはSMSのタイプ(注1)が推奨ですが、一時表スペースを大量に利用するような処理が多くある場合(情報系システムなど)では、direct i/oおよびraw deviceの利用を検討してください。
Linux上でメモリをロックする方法
DB2のメモリをスワップされないようにするためには、2つの方法があります。
1つ目としてあげられるのが、DB2登録変数を「DB2_PINNED_BP=YES」に指定することです。この指定は、DB2のデータベースグローバル・メモリをLinux上でロックして、スワップされないようにする指定です。
なお、連載の「第6回:DB2の設定情報を取得する(前編)」でDB2のメモリの種類について説明しましたが、DB2が利用するメモリの多くは、このデータベースグローバル・メモリとなります。
このように設定することで、以下のように、共用メモリがLinux上で、ロックされていることがわかります。
[db2inst1@db2v9svr ~]$ ipcs -m
------ 共有メモリセグメント --------
キー shmid 所有者 権限 バイト nattch 状態
0x4d6d1b74 5832715 db2inst1 767 39987136 21
0x4d6d1b61 5865484 db2inst1 701 23461888 19
0x00000000 5898253 db2inst1 701 23052288 20
0x4d6d1c68 5931022 db2inst1 761 50331648 1
0x00000000 5996560 db2inst1 701 1073741824 8 ロック
0x00000000 6029329 db2inst1 701 1073741824 8 ロック
0x00000000 6062098 db2inst1 701 1073741824 8 ロック
0x00000000 6094867 db2inst1 701 1073741824 8 ロック
0x00000000 6127636 db2inst1 701 1073741824 8 ロック
0x00000000 6160405 db2inst1 701 1073741824 8 ロック
0x00000000 6193174 db2inst1 701 1073741824 8 ロック
0x00000000 6225943 db2inst1 701 587415552 8 ロック