DB2 SMSテーブルスペースチューニング

DB2のテーブルスペースのコンテナでSMSを使用する場合、Direct I/Oを使用するようにする。

理由は、Linuxカーネル(2.6)のファイルキャッシュとDB2のバッファプールが同じ働きをするから。

→要するに同じことを2回やっているので、処理時間とメモリ容量が無駄!

db2 “ALTER TABLESPACE <テーブルスペース名> NO FILE SYSTEM CACHING”

DB2 ユーザデータの格納場所の移動

DB2 ユーザデータの格納場所の移動

DB2 ユーザデータの格納場所(コンテナ)の移動する方法。

DB2のリダイレクトリストア(RESTORE コマンド)機能を利用する

1.テーブルスペース・コンテナ情報取得
 テーブルスペース名とテーブルスペースIDの確認

$ db2 “LIST TABLESPACES”

 テーブルスペースIDごとに現在のコンテナパスの確認

$ db2 “LIST TABLESPACE CONTAINERS FOR <テーブルスペースID>

2.バックアップ取得

$ db2 “BACKUP DATABASE <DB名> ~(以下省略)

3.リダイレクトオプションを使用して、リストアを実行。
 ※リストアはペンディング状態になる

$ db2 “RESTORE DATABASE <DB名> FROM <バックアップイメージディレクトリパス> TAKEN AT <使用データのタイムスタンプ(YYYYMMDDhhmmss)> REDIRECT

4.リストアするデータ格納場所(コンテナパス)の変更

$ db2 “SET TABLESPACE CONTAINERS FOR <テーブルスペースID> USING (path ‘<新しいコンテナのパス>‘)”

5.リストアを再開する

$ db2 “RESTORE DATABASE <DB名> CONTINUE

DB2 テーブルスペース設計メモ

DB2のテーブルスペース設計に関するメモです。

○容量
テーブルスペースに格納する全テーブル及び全インデックスの合計容量が必要

・テーブル容量とインデックス容量の合計
・テーブル容量
1ページあたりのレコード数=(ページサイズ - ページヘッダー76バイト)/(レコード長 + レコードヘッダー10バイト)
※但しレコード数は255が最大
データ格納ページ数=(見積もり件数/1ページあたりのレコード数)*1.1
テーブル容量=データ格納ページ数*ページサイズ

※ページサイズ
4K、8K、16K、32のいずれか
・列数(項目数)
4K・・・500
それ以上・・・1024

756 列以上を表す IXF データ・ファイルをインポートすることはできません。

・レコード長
レコード長が(ページサイズ - (ページヘッダー+α))を超えてはいけない。
* 4kの場合、行の最大長は 4005 バイト。
* 8k の場合、行の最大長は 8101 バイト。
* 16k の場合、行の最大長は 16 293 バイト。
* 32k の場合、行の最大長は 32 677 バイト。
・テーブルサイズ
4K ・・・ 64GB
8K ・・・128GB
16K・・・256GB
32K・・・512GB

・インデックスサイズ
1インデックス容量=(項目長の合計+8バイト)*見積もり件数
インデックス容量=1インデックス容量+1インデックス容量+…..

・REORGするなら、さらにコピーを作成する容量が必要(テーブルスペース内の最大テーブルがもう1個入る容量)

○エクステントサイズ
* 25Mbytes未満の場合は、エクステント・サイズを8にします
* 25~250Mbytesの間の場合は、エクステント・サイズを16にします
* 250~2Gbytesの間の場合は、エクステント・サイズを32にします
* 2Gbytesを超える場合は、エクステント・サイズを64にします

OLAPデータベース、主にスキャンされる表(照会のみ)、
急速に増大する表の場合は、より大きな値を使用します。

表スペースがディスク・アレイ上(RAID)に存在する場合は、
エクステント・サイズをストライプ・サイズ(すなわち、
アレイ内の1つのディスクに書き込まれるデータのサイズ)に設定します。

○プリフェッチサイズ
・RAIDでない場合
プリフェッチ・サイズ=(複数の物理ディスク上に存在する表スペースのコンテナ数)×エクステント・サイズ

・RAIDの場合
プリフェッチ・サイズ=エクステント・サイズ×(アレイ内のパリティ・ディスク以外のディスクの数)

○その他
・マスタ系と詳細データ系に分ける(バッファプールのため)
・さらにデータ更新の種類((IMPORT/INSERT/UPDATE/DELETE) と LOAD)に分ける(トランザクションログ管理のため)
※故に最低4つあれば望ましい