21.02.2013 Aufrufe

hUZ6T

hUZ6T

hUZ6T

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

データベース物理設計<br />

【DB2 9.5 対応版】<br />

お断り:当資料は、DB2 for Linux, UNIX and Windows V9.1をベースに作成されています。<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

2<br />

データベース物理設計


DB2デザイン・ガイド<br />

目次<br />

物理設計の流れ<br />

物理設計作業開始にあたって<br />

①表/索引定義の作成<br />

②データ容量の見積もり<br />

③インスタンスの構成とデータベースの分割<br />

④表の分類と表スペースの構成<br />

⑤表スペースの配置<br />

⑥表スペース以外のオブジェクトの配置<br />

⑦構成パラメーターの設定<br />

⑧シェル/コマンドの作成<br />

OS特有の設定<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

3<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

4<br />

データベース物理設計


DB2デザイン・ガイド<br />

物理設計の流れ<br />

①表/索引定義の作成<br />

②データ容量の見積もり<br />

③ インスタンスの構成とデータベースの<br />

分割<br />

④表の分類と表スペースの構成<br />

⑤表スペースの配置<br />

⑥表スペース以外のオブジェクトの配置<br />

⑦構成パラメーターの設定<br />

⑧シェル/コマンドの作成<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

・表の分割/参照整合や制約/属性、長さの決定<br />

・主キー(1次索引)<br />

・検索やジョインのパターンによって2次索引作成<br />

・データ項目、長さ、索引などは既に決まっている前提<br />

・ページ・サイズの決定<br />

・表、(索引)サイズの見積もり<br />

・インスタンスの分割も検討<br />

・バックアップ単位であるデータベースの分割を検討<br />

・表の分類と表スペース構成の決定<br />

・表スペースのタイプ、その他の属性の決定<br />

・物理ディスク上への表スペースの配置<br />

・コンテナーの設計<br />

・ログ、バックアップ用、ワークスペースの配置<br />

・物理設計にあわせた構成パラメーターの変更<br />

・これまでに設計したオブジェクトを作成するコマンドおよびシェルを作成<br />

5<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

6<br />

データベース物理設計<br />

� データベースの物理設計を行う場合、ディスクおよびサーバーを含むハードウェア構成が決まっている必要がありま<br />

す。また、表の論理設計も既に終了していることが前提です。<br />

� 表の論理設計を実際のハードウェア上にどのように構築するかを決定することが、「物理設計」ということになります。<br />

� 純粋な論理設計では、まだどのデータベース製品を使うかにはあまり依存しません。しかし、どのようにディスク上に<br />

配置し、メモリを割り振るかを決定する物理設計はデータベース製品に特化した作業になります。<br />

� ①DBMSに特化しない論理設計では、カラムの属性・長さなどが決まりません。物理設計の最初にまずこれらの<br />

DBMSに特化した表定義を決定します。例えば、データは日付なのですが、格納方法はDATEにするか<br />

TIMESTAMP,CHARまたはVARCHARにするかなどの選択肢があります。<br />

� ②データ容量を見積もります。論理設計によってできあがった表のレイアウトとレコード数から容量を見積もり、必要<br />

となるディスク容量を計算します。<br />

� ④次にそれらの表を幾つかのグループに分類します。そしてそれらの表を配置する表スペースの定義を決めていき<br />

ます。<br />

� ⑤物理ディスクへの表スペースの配置を決定します。<br />

� ⑥⑤で配置した表スペース以外のオブジェクトの配置を決定します。<br />

� ⑦物理設計に関連した構成パラメーターを設定します。<br />

� ⑧最後に行うのは、これらの設計に基づいたファイルシステムや論理ボリュームなどを作成するシェル・スクリプトの<br />

作成と、これらの上に表スペースおよび表、索引を作成するDDLの作成です。<br />

� データベースの物理設計は基本的には以上の作業を行い、ドキュメントを作成し、実際のハードウェア上に構築する<br />

ところで終了します。


DB2デザイン・ガイド<br />

物理設計作業開始にあたって<br />

�論理データベース設計作業が完了していることが前提<br />

� 論理データベース仕様の後からの変更は困難<br />

� アプリケーション開発作業に多大な手戻りを発生させる可能性がある<br />

� 論理設計で決めた表をDB2データベースの表として定義<br />

� 作成したデータベース仕様をシステム上の物理記憶域にマッピング<br />

� DB2の製品仕様に依存する作業であるため、DB2の製品知識が必要<br />

� 使用するオペレーティング・システム毎の知識も要求される<br />

�データベース設計の最終目標<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

7<br />

データベース物理設計<br />

� 時代の変化に伴う多様な要求の出現に対応できる安定したデータベースを構築す<br />

る<br />

� 各種要件(アプリケーション、性能、運用等)を最適に実装するデータベースを検討<br />

する � 運用設計、障害回復設計とも同期を取りながら進めて行く<br />

� パフォーマンス・チューニングや運用の効率化のため適宜物理設計の見直しも必要<br />

� 充分にテストを実施して、データベース設計が最適に実装されているかを検証する<br />

必要がある


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

8<br />

データベース物理設計<br />

� 物理設計作業開始にあたっては、論理データベース設計作業がきちんと完了していることが必要です。論理設計完<br />

了後の変更は、アプリケーション開発作業に多大な手戻りを発生させる可能性があります。<br />

� 物理設計作業は、表の論理設計で決められた表を、DB2のデータベースの表として定義することです。<br />

� 実際に、物理記憶域のどこにどのように表スペースや表、索引といった各オブジェクトを配置するかのマッピングを<br />

行ないます(論理設計で作られた論理モデルの「実装」を行なうことになります。)<br />

� DB2の製品仕様に依存する作業であるため、DB2の製品知識が必要とされます。<br />

� また、ファイル・システムなど使用するオペレーティング・システム毎の知識が要求されることもあります。<br />

� データベースの設計の目標となるのは、自分の環境を、理解しやすくしかも将来の拡張の基礎となるよう表現したも<br />

のを作ることです。また、データの一貫性や整合性を保ちやすいデータベース設計が望ましいと言えます。そのため<br />

には、設計の段階で冗長性を少なくし、データベースの更新時に生じ得る異常をなくす必要があります。<br />

� また、アプリケーション要件や、性能、運用要件等を最適に実装するものでなければいけません。<br />

� 運用設計、障害回復設計とも同期を取りながら進めて行く必要があります。<br />

� データベースの設計は、一度で終了するものではありません。多くの場合、何度かやり直すことが必要になります。<br />

パフォーマンス・チューニングや運用の効率化のため適宜物理設計の見直しも必要になるのです。


DB2デザイン・ガイド<br />

①表/索引定義の作成<br />

�列の設計<br />

� データ・タイプと長さの決定<br />

�主キーと外部キー<br />

�制約<br />

� 固有制約<br />

� 参照制約<br />

� 表検査制約<br />

�表の設計<br />

�索引の設計<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

9<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

10<br />

データベース物理設計<br />

� 表、および索引定義の作成にあたっては、事前にDBMSに特化した仕様を考慮して、様々<br />

な項目を決定する必要があります。<br />

� ページサイズは、データの容量やディスク容量、DB2の制限値を考慮して、適切なものを<br />

決定します。<br />

� 主に以下のような点について、DBMSに特化した表定義を決定していきます。<br />

� 列の設計(データ・タイプと長さなど)<br />

� 主キーと外部キー<br />

� 制約 � 固有制約<br />

� 参照制約<br />

� 表検査制約<br />

� 索引設計(1次、2次)<br />

� 変更により適用業務に大きな影響を与えるものとして、例えば以下のものがあります。(V9<br />

では、以下の変更はALTER TABLEステートメントで行うことができます。)<br />

� データ・タイプの変更<br />

� データの長さの変更<br />

� NOT NULL指定の変更<br />

� 以下のものは、変更があっても適用業務に影響しないよう回避する方法はあります。<br />

� データベース名の変更<br />

� CATALOG DATABASEで別名設定<br />

� 表名の変更<br />

� RENAME TABLEで表名の変更、視点の作成により対応<br />

� 列名の変更<br />

� 視点の作成により対応<br />

� 列の順序変更<br />

� 視点の作成により対応


DB2デザイン・ガイド<br />

列の設計<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

11<br />

データベース物理設計<br />

�列のデータ・タイプと長さの決定<br />

� データ長やとり得る値の制限値により、最適なデータ・タイプを選択する<br />

� 開発言語環境による生産性の観点での考慮なども必要<br />

� 文字列(CHAR/VARCHAR/GRAPHIC/VARGRAPHIC)<br />

� 可変長 or 固定長? ⇒ 原則、固定長を使用することを推奨<br />

– 可変長(VARCHAR)は固定長(CHAR)に比べて4バイト分余計に必要<br />

– 可変長は、該当列の位置を認識するためにCPU負荷が増加<br />

– 固定長は定義した長さ分の領域を必ず使用する(圧縮を採用した場合はこの限りでない)<br />

� GRAPHICはホスト系(EBCDIC)との互換のために使用<br />

� 日付/時刻形式(DATE/TIME/TIMESTAMP)<br />

� CHARで保持するより、格納サイズが小さい<br />

� YEAR , MONTH , DAY などの日付計算、時間計算関数が使用可能。DB2が計算・値のチェックを<br />

行える<br />

� 数値(SMALLINT/INTEGER/BIGINT/REAL/DOUBLE/DECIMAL/DECFLOAT)<br />

� 算術に使用するのであれば、通常は数値型。最大取り得る値によって、データ・タイプを選択する<br />

� CHARで保持するより、格納サイズが小さい<br />

� 小数点以下がある場合はDECIMALを検討<br />

� LONG型(LONG VARCHAR/LONG VARGRAPHIC/CLOB/DBCLOB/BLOB)<br />

� LONG VARCHARは文字列というよりLONG型である。(ページ内にデータが格納されない)<br />

� LONG VARCHAR、LONG VARGRAPHICについてはdescriptorのための20バイトが行データ中に<br />

とられる。<br />

� 上限値にほとんど差異はない。LONG VARCHAR,LONG VARGRAPHICよりも、<br />

VARCHAR,VARGRAPHICを使用する。<br />

� LOBについても、他の表データとは別の場所に保管され、各列の情報(ポインター)のみを他データ<br />

と共に持つ<br />

� データが4KB以下の場合、LONGはなるべく使用しない<br />

� 拡張マークアップ言語(XML)<br />

� XML文書を格納する。<br />

� 単一パーティションで、コード・セットUTF-8のデータベースの場合のみ使用可能。<br />

V9.5


DB2デザイン・ガイド<br />

解説<br />

� 数値・文字列(固定長・可変長)・日付・XMLなどのうちどれを選択するか、データ長や、と<br />

り得る値の制限値により適したデータ・タイプを選択します。<br />

� また、開発言語環境によって扱い易いデータ・タイプであるのか、生産性の観点などから<br />

の考慮も必要です。<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

12<br />

データベース物理設計<br />

� 文字列<br />

� 可変長か固定長か決定する必要がありますが、まずは固定長を検討します。<br />

� 可変長の場合は、長さとオフセット情報を入れる領域が列あたり4バイト分余計に必要になります。<br />

� 可変長の場合は、該当列の位置は先頭からたどらなければならないため、CPUの負荷が該当列の位置がわかっている固定<br />

長よりも余計にかかります。<br />

� 列長の差が大きい(列あたり平均20バイト以上)時には可変長を採用することで、DISKスペースは削減されます。<br />

� GRAPHICはダブルバイト文字列のためのものですが、主にホスト系(EBCDIC)環境のDBとの互換のために使用されます。<br />

� 日付/時刻のデータ<br />

� 日付計算、時間計算、関数の使用が可能になるように、DATE/TIME/TIMESTAMPを使用してください。また、その方が、<br />

CHARデータタイプとして格納するよりもDISKスペースは軽減されます。<br />

� 数値 � 算術に使用するのであれば、通常は数値型で格納すべきです。該当の項目の最大取り得る値によって、データ・タイプを選択<br />

します。また、文字列で格納するよりもDISKスペースは軽減されます。<br />

� LONG型<br />

� LONGタイプは表データ・ページに実際の列のデータは含まれません。別の表オブジェクトとして表スペースに格納されます。<br />

行データ中にはそれらの列の20バイトの記述子(descriptor)は含まれます。<br />

� LONGタイプのデータをLONG専用の表スペースに格納させることも、CREATE TABLE時の指定で可能です。<br />

� 4KB以下の文字データについては、上述のような特異な扱いを避けるためにもLONGタイプは使用しないようにするなど、<br />

データ長の制限値により、適したデータタイプを選択してください。<br />

� XML � XML文書は、階層構造を持つデータとして格納されます。<br />

� LOB 列と同様に、XML列は列の記述子であるXMLデータ指定子(XDS)のみを保持します。XMLデータ自体は、別個にXDAと<br />

呼ばれるストレージ構造保管されます。<br />

� XML文書のサイズの上限は、2GBです。


DB2デザイン・ガイド<br />

参考:DB2がサポートするデータ・タイプ<br />

時刻<br />

日付/時刻<br />

タイム・<br />

スタンプ<br />

日付<br />

TIME TIMESTAMP DATE<br />

固定長<br />

CHAR<br />

文字 グラフィック<br />

可変長<br />

16ビット<br />

固定長<br />

ストリング<br />

GRAPHIC<br />

32ビット<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

可変長<br />

バイナリー<br />

BLOB<br />

可変長<br />

13<br />

正確な値<br />

VARCHAR CLOB VARGRAPHIC DBCLOB<br />

2進整数<br />

64ビット<br />

SMALLINT INTEGER BIGINT<br />

符号付数値<br />

10進<br />

パック<br />

概算値<br />

浮動<br />

小数点数<br />

単精度<br />

DECIMAL<br />

倍精度<br />

Extensible<br />

Markup<br />

Language<br />

XML<br />

REAL DOUBLE<br />

データベース物理設計<br />

10進浮動小数<br />

点数<br />

V9.5<br />

DECFLOAT


DB2デザイン・ガイド<br />

V9.5<br />

参考:DB2がサポートするデータ・タイプ<br />

・文字タイプ<br />

データタイプ 説明 制限値<br />

CHAR(n) nバイトの固定長文字列 1


DB2デザイン・ガイド<br />

参考:DB2がサポートするデータ・タイプ<br />

・ラージ・オブジェクト<br />

データタイプ 説明 制限値<br />

CLOB(n<br />

DBCLOB(n<br />

BLOB(n<br />

K|M|G) 文字ラージ・オブジェクトストリング 2,147,483,647バイト<br />

K|M|G) 2バイト文字ラージ・オブジェクト 1,073,741,823文字<br />

K|M|G) 2進ラージ・オブジェクト 2,147,483,647バイト<br />

・ラージ・オブジェクトのディスクリプタ<br />

LOBの最大長 LOB<br />

1,024 72<br />

8,192 96<br />

65,536 120<br />

524,000 144<br />

4,190,000 168<br />

・XML<br />

Descriptor長<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

LOBの最大長 LOB<br />

134,000,000 200<br />

536,000,000 224<br />

1,070,000,000 256<br />

1,470,000,000 280<br />

2,147,483,647 316<br />

データタイプ 説明 制限値<br />

XML XML文書 2ギガバイト<br />

15<br />

Descriptor長<br />

データベース物理設計


DB2デザイン・ガイド<br />

V9.5<br />

参考:<br />

Decimal Floating Point<br />

�16桁または34桁の最大精度を持つ10進浮動小数点数<br />

� より大きな数、より精度の高い演算が可能<br />

� 従来のDECIMAL型では、1-10 31 から10 31-1 までの範囲、精度は31桁が最大<br />

Type DECFLOAT(16) DECFLOAT(34)<br />

Size 8 Bytes 16 Bytes<br />

指数範囲 10 -383<br />

� DECFLOAT(16):<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

~10 +384 10 -6143 ~10 +6144<br />

精度 16 34<br />

� 負の値: -9.999999999999999 x 10 +384 ~ -1.000000000000000 x 10 -383<br />

� 正の値: 1.000000000000000 x 10 -383 ~ 9.999999999999999 x 10 +384<br />

� DECFLOAT(34):<br />

� 負の値: -9.999999999999999999999999999999999 x 10 +6144 ~<br />

1.000000000000000000000000000000000 x 10 -6143<br />

� 正の値: 1.000000000000000000000000000000000 x 10 -6143 ~<br />

9.999999999999999999999999999999999x 10 +6144<br />

16<br />

データベース物理設計


DB2デザイン・ガイド<br />

列の設計(続き)<br />

� その他設計上の考慮点<br />

� NOT NULLの指定<br />

� NULL可能にした場合、列毎に1バイトのNULLフラグが必要であり、CPU負荷が増加する<br />

� NULL標識変数を準備しなければならず、プログラムが煩雑になる<br />

� 比較、結合、UNIONの処理がある列はデータ・タイプを揃える<br />

� データ変換負荷の軽減<br />

� パフォーマンスを考慮した列の順序<br />

� 可変長列は、自動的に全ての固定長列の後ろに配置される<br />

� 更新される列は可能であれば近くに並べる<br />

� 適用業務には列の指定順序は影響しない(順序にこだわる場合、視点(View)で対応も可)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

17<br />

データベース物理設計<br />

� 圧縮効率を考慮した列の順序<br />

� データ行圧縮を使用する場合、複数列に跨って繰り返されるパターンのデータがあれば、それらの列は隣接<br />

して並べる(圧縮効果が高くなる)<br />

� VARCHAR列:適当なデータ・タイプかどうか要検討<br />

� 読み取りに2ステップ要:長さ→データ<br />

� VARCHAR列への変更:長くなった場合、Tombstoneが発生する場合あり<br />

� 更新がある場合、データのフラグメンテーションを招く ⇒ REORG運用が必要となる可能性が高い<br />

� 列の自動生成<br />

� 生成列(GENERATED COLUMN)の利用<br />

– 指定されたルールに従い、列の値が動的に生成される列<br />

– 列の値を事前に加工して入れておくことにより、SQL実行時のパフォーマンスを向上させる<br />

� 識別列(IDENTITY COLUMN)の利用<br />

– DB2が列の値として、固有の数値を生成する列<br />

– 固有の値を取得するために別途表を用意したり、MAX関数を使用して取得したりする必要がない<br />

– 行をユニークに識別可能な、列の値を事前に入れておくことにより、識別列を使用した照会処理が可能<br />

– シーケンス・オブジェクトの利用も検討


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

18<br />

データベース物理設計<br />

� 列にNULLデータが入る可能性がなければ、以下の理由からNOT NULLを指定してください。<br />

� NOT NULLでない場合<br />

� 列毎に1バイトのNULLフラグが必要<br />

� NULLか否か調べるCPU負荷の増加<br />

� NULLフラグによるDISKスペースの増加<br />

� プログラムではNULL標識変数の準備が必要<br />

� 比較、結合、UNIONの処理がある列は、列同士のデータタイプをそろえることでデータ変換負荷を<br />

軽減させることができます。<br />

� パフォーマンスを考慮した場合、更新される列は近くに並べて下さい。<br />

� 更新時のログは、先頭の更新列から、最後の更新列まで取得される為、更新列が離れているとロ<br />

グデータが増加します。<br />

C1 C2 C3 C4 C5 C6 C7 C8 C9 C10<br />

� update testtab set c5=50 ・・・・・・・・・ ログは、c5のみ<br />

� update testtab set c3=20, c9=90 ・・・ログはc3~c9まで<br />

� ただし、可変長列でその列長が変更されるような更新がおこなわれた場合、行全体(新旧)がログとして取得されます。<br />

� 可変長列は、全ての固定長列の後ろに配列されます。<br />

� DB2は、データの保存時に固定長列、可変長列、LONG VARCHARポインター(20バイト)の順で自動的に格納しています。<br />

LL VARCHAR CHAR INTEGER<br />

固定長のinteger列を得るためにはその前のVARCHAR列からたどらなければならない<br />

CHAR INTEGER LL VARCHAR<br />

integer列は行の先頭からの相対位置が変わらないので直接得ることができる


データベース物理設計<br />

DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

19<br />

解説<br />

� データ行圧縮を使用する場合、複数列に跨って特定のパターンの値が繰り返されるようなデー<br />

タがあれば、それらの列を続けて定義すると圧縮効率が良くなります。<br />

� 圧縮は列単位ではなく行単位で行われますので、列を跨ったパターンで辞書が作成されることもあります。<br />

圧縮後<br />

圧縮前<br />

…<br />

…<br />

Plano, TX,<br />

24355<br />

02<br />

500<br />

01<br />

…<br />

…<br />

Plano, TX,<br />

24355<br />

02<br />

500<br />

01<br />

24355<br />

TX<br />

Plano<br />

10000<br />

500<br />

Fred<br />

24355<br />

TX<br />

Plano<br />

20000<br />

500<br />

John<br />

ZipCode<br />

State<br />

City<br />

Salary<br />

Dept<br />

Name<br />

24355<br />

TX<br />

Plano<br />

10000<br />

500<br />

Fred<br />

24355<br />

TX<br />

Plano<br />

20000<br />

500<br />

John<br />

ZipCode<br />

State<br />

City<br />

Salary<br />

Dept<br />

Name<br />

…<br />

24355<br />

TX<br />

Plano<br />

20000<br />

500<br />

John<br />

24355<br />

TX<br />

Plano<br />

10000<br />

500<br />

Fred …<br />

24355<br />

TX<br />

Plano<br />

20000<br />

500<br />

John<br />

24355<br />

TX<br />

Plano<br />

10000<br />

500<br />

Fred<br />

…<br />

(02)<br />

20000<br />

(01)<br />

John<br />

(02)<br />

10000<br />

(01)<br />

Fred …<br />

(02)<br />

20000<br />

(01)<br />

John<br />

(02)<br />

10000<br />

(01)<br />

Fred<br />

Dictionary


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

20<br />

データベース物理設計<br />

� VARCHAR/VARGRAPHIC列を使用する場合には、可変長であるメリットとデメリットを考慮し<br />

た上で、使用して下さい。<br />

� 可変長列は、2種類の情報を持っています。<br />

� データの長さ<br />

� データ<br />

� 可変長データを読み込む場合、まずデータの長さを読み取り、次にデータをその長さ分読み取るという2段階を経るため、<br />

パフォーマンスに影響が出ます。<br />

� また、可変長データに変更が発生した場合、元データより長くなると同じページに収まらなくなってしまう可能性がありま<br />

す。<br />

� その場合、移動先の情報を持ったTombstoneが元のデータ位置に残されます。<br />

� その為、そのレコードを取得するために、ページを2段階経なければならなくなる可能性があります。<br />

C1 C3 C2Len C2 Data<br />

BPS header<br />

OS0OS1OS2<br />

Tombstone<br />

新しいページ<br />

� 更新がある場合、データのフラグメンテーションを招き、 REORG運用が必要となる可能性が高くなります。<br />

� VARCHAR列を使用するのが望ましい場合:<br />

� データの長さの範囲がまちまちで、ほとんどの列は短い<br />

� データの長さの範囲がまちまちで、全ての範囲でほぼ均等に分布<br />

� VARCHAR列を使うべきでない場合:<br />

� データの長さの範囲はまちまちだが、ほとんどの列は範囲の上の方にある<br />

� VARCHAR列にすることによって、ディスク・スペースが余計にかかり、パフォーマンスが低下するケース<br />

3<br />

Record 2<br />

Record 1<br />

Rec 0


DB2デザイン・ガイド<br />

解説(生成列)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

21<br />

データベース物理設計<br />

� 生成列とは、各行の値を挿入操作または更新操作からではなく、定義した式によって定めることが<br />

できる列です。更新トリガーおよび挿入トリガーを組み合わせて使用すると同様のことが行えます<br />

が、生成列を使用すると、派生した値が式と一貫したものであることを保証できます。<br />

� 表で特定の式や述部を頻繁に使用することがわかっている場合、生成列を使用してあらかじめ値<br />

を生成しておくことにより照会の際のパフォーマンスを向上させることが可能です。<br />

� 表で生成列を作成するには、ALTER TABLEまたはCREATE TABLE時にGENERATED ALWAYS<br />

AS 文節を使用して、列の値を定義する式を含んだ列を指定します。<br />

� 生成列には検査制約やユニーク索引/基本キーが使用できない、生成列を持つ表に対して<br />

RENAME TABLE ができない等の制約事項があるので使用にあたっては考慮が必要です。<br />

� 生成列の例<br />

� "c1" および "c2" という通常の 2 つの列と、表の通常の列から派生した "c3" および "c4" という 2 つの生成された列の入った表<br />

を作成します。<br />

CREATE TABLE T1(c1 INT, c2 DOUBLE,<br />

c3 DOUBLE GENERATED ALWAYS AS (c1<br />

+ c2),<br />

c4 GENERATED ALWAYS AS<br />

(CASE WHEN c1 > c2 THEN 1<br />

ELSE 0<br />

END)<br />

);<br />

INSERT t1 (C1,<br />

C2)<br />

VALUES (10, 3)<br />

INSERT<br />

t1表<br />

t1表<br />

C1 C2 C3 C4<br />

C1 + C2<br />

C1 C2 C3 C4<br />

10 3 13 1<br />

10 + 3 = 13<br />

10 > 3 なので1<br />

C1 > C2 の時は1<br />

それ以外は 0<br />

データベース<br />

マネージャーが<br />

値を生成


DB2デザイン・ガイド<br />

解説(IDENTITYE列とSEQUENCE)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

22<br />

データベース物理設計<br />

� IDENTITY列(識別列)は生成列の中の一つで、表の各行に対して固有な基本キー値を自動<br />

的に生成します。<br />

� 識別列では、アプリケーションがデータベースの外に独自のカウンターを生成する際に生じる、並行性およびパフォーマ<br />

ンス上の問題を回避することが可能です。<br />

� 固有な基本キーを自動生成する際に識別列を使用しない場合には、単一行の表にカウンターを保管するのが一般的な<br />

設計方法です。各トランザクションはこの表をロックして、数を増分してからトランザクションをコミットして、カウンターの<br />

ロックを解除します。しかし、残念ながら、この設計では、カウンターを増分できるのは一度に 1 つのトランザクションのみ<br />

です。一方、識別列を使用して基本キーを自動的に生成すると、アプリケーションでより高度なレベルの並行性を実現で<br />

きます。<br />

� SEQUENCE(シーケンス)とは、値の自動生成を可能にするデータベース・オブジェクトです。<br />

� シーケンスを使用すると、固有キー値を生成することが可能です。IDENTITY列と同様アプリケーションはシーケンスを使<br />

用することで、データベースの外部に固有カウンターを生成したことによって発生する可能性のある、並列性およびパ<br />

フォーマンスの問題を回避することができます。<br />

� 識別列属性とは異なり、シーケンスは特定の表列に関連付けられていないデータベースオブジェクトです。<br />

� シーケンス・オブジェクトはどのアプリケーションでも使用できるため、NEXTVALおよびPREVALの二つの値を返す式が定<br />

められています。<br />

IDENTITY列<br />

IDENTITY列 SEQUENC<br />

t1表<br />

t1表<br />

E<br />

C1 C2 C3 C4<br />

C1 C2 C3 C4<br />

create table t1<br />

(c1 int generated always as<br />

identity<br />

(start with 10, increment by 2),<br />

c2 char(10), c3 double, c4 int)<br />

列内で固有な値を自動生成<br />

NEXTVAL<br />

SEQUENCE<br />

オブジェクト<br />

insert into t1 (c1,c2) values (nextval for seq1, 100)<br />

シーケンス・オブジェクト内で固有な値を自動生成


DB2デザイン・ガイド<br />

主キーと外部キー<br />

� 主キー(Primary Key)<br />

� 主キーは表の保全性を保証する<br />

� 格納されるデータの値は、ユニークでなければならない<br />

� NOT NULL指定必須<br />

� 主キーを付与するとユニーク索引(1次索引) は自動的に作成される(固有制約)<br />

� 参照制約を使用しない場合は基本キーではなく、別途ユニーク索引を定義しても可<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

<br />

部門番号 部門名<br />

100 営業部<br />

200 電算部<br />

300 総務部<br />

主キー<br />

23<br />

社員番号 社員名 部門番号<br />

A111 田中 100<br />

B222 山田 200<br />

C333 鈴木 200<br />

データベース物理設計<br />

<br />

� 外部キー(Foreign Key)<br />

外部キー<br />

� 親表と従属表の間の親子関係を示す働きをする<br />

� 別の表の主キーが、その表のデータ項目になっている時、そのキーは外部キーとなりうる<br />

� 結合操作の結合列になる ⇒ 索引の候補<br />

� 外部キーは参照の整合性を保証するために、主キーに存在しない値を持ってはいけない(参照制<br />

約)<br />

� 参照制約を使用しない場合、あくまでも論理的なものであって、物理定義する必要はない<br />

� 定義時には、CONSTRAINTにより制約名をつける<br />

� 管理が容易


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

24<br />

データベース物理設計<br />

� 主キー<br />

� 表の固有キーとは、それぞれの値が固有の行を識別する、1つの列または複数の列の順序集合のことです。たとえば、社員<br />

番号の列の各値は一人の社員だけを指すものなので、これを固有キーとして定義することができます。二人の社員が同じ社<br />

員番号を共有することはできません。<br />

� 表の主キーは、1つの表上に定義された固有キーの1つですが、その表上で1番目に重要なキーとして選択されたものです。<br />

1つの表上には1つだけの基本キーが可能で、そのエンティティ内で行を唯一無二のものとして識別できるデータ項目です。<br />

� 主キーはエンティティの保全性を保証するために、ユニークであり、空白値は許されません。<br />

� 外部キー<br />

� 表の外部キーは、親表の固有キーまたは主キーを参照する、表内の1つの列または1組の列のことです。<br />

� 外部キーは表(親表)と表(従属表)の間の参照の整合性を保証するために、基本キーに存在しない値を持ってはならず、結<br />

合操作時には結合列になります。<br />

� 参照制約を使用しないのであれば、親表と従属表の間の親子関係を示すあくまでも論理的な<br />

意味合いのものであり、主キーと外部キーの物理的な設定は必須ではありません。<br />

� 主キー、外部キーの定義時には、CONSTRAINTにより制約名をつけたほうが管理しやすくなり<br />

ます。<br />

� 主キーの定義<br />

CREATE TABLE 親表名<br />

(主キー列名 ・・・ NOT NULL,<br />

・・・・・・・,<br />

・・・・・・・,<br />

CONSTRAINT 制約名 PRIMARY KEY(主キー列名))<br />

� 外部キーの定義<br />

CREATE TABLE 従属表名<br />

(・・・・・・・,<br />

外部キー列名<br />

・・・<br />

NOT<br />

NULL,<br />

・・・・・・・,<br />

CONSTRAINT 制約名 FOREIGN KEY(外部キー列名)<br />

REFERENCES 親表名<br />

ON DELETE 規則)


DB2デザイン・ガイド<br />

制約<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

25<br />

データベース物理設計<br />

� データの保護や、データ間の相互関係の定義をDBMSに行わせる<br />

� アプリケーション・ロジックとしてコードを作成する必要がない<br />

� 事前に制約を使用するか否かの方針決めが必要<br />

� 使用する場合は、制約違反エラーのハンドリング・ロジックが必要<br />

� データ格納時にDB2により厳格にチェックされる<br />

� バッチによる大量の更新時や、テスト環境でのテスト・データ作成時に、格納順番やデータの値を考<br />

慮する必要あり<br />

� 3種類の制約を提供<br />

� 固有制約<br />

col1 col2<br />

固有?<br />

� 表の 1 つまたは複数の列に重複する値を指定することを禁止する規則<br />

1 A1<br />

� 表検査制約<br />

� 表の各行の1つ以上の列について可能な値を指定する規則<br />

20<br />

� 参照制約<br />

INSERT<br />

� 外部キーの値が親キーの値として現れる場合、または外部キーの構成要素の一部がヌル値の場合<br />

のみ有効とする規則<br />

'A3' INSERT<br />

� (情報制約)<br />

� DB2による制約情報チェックの適用/非適用の設定が可能な制約(V8)<br />

1<br />

INSERT<br />

col3<br />

col3 < 20?<br />

col2<br />

10 A1<br />

col1 col2<br />

1 A1<br />

親表に存在する?<br />

c1<br />

A1<br />

A2


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

26<br />

データベース物理設計<br />

� 制約を利用すると、データの保護や、データ間の相互関係の定義をデータベース・システ<br />

ムに行わせることが可能です。これにより、アプリケーションでコードを作成し、これらの規<br />

則を施行する必要がなくなります。<br />

� 事前に制約を使用するか否かの方針決めを最初に確定させる必要があり、使用するので<br />

あれば、制約違反エラーのハンドリング・ロジックは必要となります。<br />

� データ格納時にDB2により厳格にチェックされるため、バッチによる大量の更新時や、特に<br />

テスト環境でのテスト・データ作成時に、格納順番やデータの値を考慮するが必要ありま<br />

す。例えば、参照制約が定義されている表については、データのINSERTは必ず親表を先<br />

にする必要があります。<br />

� DB2は以下の種類の制約を提供しています。<br />

� 固有制約<br />

� 表の 1 つまたは複数の列に重複する値を指定することを禁止する規則<br />

� 表検査制約<br />

� 表の各行の1つ以上の列について可能な値を指定する規則のことです。<br />

� 参照制約<br />

� 外部キーの値が親キーの値として現れる場合、または外部キーの構成要素の一部がヌル値の場合のみ有効とする<br />

規則<br />

� (情報制約)<br />

� V8から、情報制約(Informational Constraint)と呼ばれる新しいタイプの制約により、DB2による制約情報チェックの適<br />

用/非適用が設定可能になりました。<br />

� 制約情報を非適用とすることにより、ビジネス・アプリケーションのロジックによってチェックされ、この場合、データベー<br />

ス・マネージャーによってチェックされることはありません。また、オプティマイザーによる制約の利用を活動化、または<br />

非活動化させる指定も可能です。<br />

� 下記のオプションを CREATE または ALTER TABLE で指定します。<br />

– ENFORCED:DB によって更新操作時、常に制約をチェックさせる。<br />

– NOT ENFORCED:DB に制約をチェックさせない。また、SET INTEGRITY を使用しても、チェックされません。この場合、<br />

実際に制約に違反するデータが入る可能性あるため、アプリケーションでのチェックする必要があります。<br />

– ENABLE QUERY OPTIMIZATION:オプティマイザーのQuery Rewriteを活動化する。<br />

– DISABLE QUERY OPTIMIZATION:オプティマイザーのQuery Rewriteを非活動化する。<br />

� 制約は、CREATE TABLE文およびALTER TABLE文を使用して、表の列に対して定義します。


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

27<br />

データベース物理設計<br />

� 固有制約の例<br />

� 表t1 には、列 (col1, col2, col3) があり、col1 の各データは表で固有でなくてはならない場合、例えば次のように定<br />

義します。<br />

create table t1 (col1 int not null,<br />

col2 char(10) not null,<br />

col3 int,<br />

constraint t1_uniq UNIQUE (col1))<br />

� このcol1列に重複した値をINSERTすると、SQL0803Nのエラーとなります。<br />

� 表検査制約の例<br />

� t1のcol3には、かならず20未満でなくてはならない場合は、以下のように表を定義します。<br />

create table t1 (col1 int not null,<br />

col2 char(10) not null,<br />

col3 int,<br />

constraint col3check CHECK (col3 < 20));<br />

� col3に20以上の値をINSERTしようとすると、SQL0545Nのエラーになります。<br />

� 情報制約の例<br />

� 上記で定義した表検査制約と同等ですが、アプリケーションで保証することとし、DB2はチェックしません。<br />

create table t1 (col1 int not null,<br />

col2 char(10) not null,<br />

col3 int,<br />

constraint col3check CHECK (col3 < 20) NOT ENFORCED ENABLE QUERY<br />

OPTIMIZATION);


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

28<br />

データベース物理設計


DB2デザイン・ガイド<br />

表の設計<br />

�1行のレコードがページをまたがることはできない<br />

� LONGデータを除く<br />

� 最適なページ・サイズの決定(4KB/8KB/16KB/32KB)<br />

�行の削除によるスペース解放はない<br />

� 削除してもDiskの使用率は変わらない<br />

� 再利用はされる<br />

� APPENDモードの指定により再利用させないことも可能<br />

� REORGなどの運用が必要<br />

�ページの空き領域の設定<br />

� 予め、ページ内にフリー・スペースを残す設定<br />

� 設定が必要か否かの検討が必要<br />

� 離れたページにデータが挿入されると、パフォーマンスに影響を与える<br />

– クラスター索引を持つ表<br />

– 可変長列の更新がある表<br />

� ALTER TABLEによるPCTFREE指定<br />

� LOAD、REORG時に指定されたフリー・スペースを確保<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

29<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

� 1行のレコードが複数のページにまたがることはできません。<br />

� 1レコードの長さがページ内に収まらない場合は、ページサイズを大きくして下さい。<br />

� 4KB → 8KB → 16KB → 32KB<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

30<br />

データベース物理設計<br />

� データの削除が行われたとき、そのレコードのあった場所は解放されません。(再利用はされま<br />

す。)削除のフラグが立つのみです。Diskの使用率は変わりません。<br />

� 削除されたスペースを解放させるためには、reorg tableを実行して下さい。<br />

� APPENDモード<br />

� INSERT時に表内の空きページを検索することなく、最終ページにレコードを追加する機能。(APPENDモード ON)<br />

� レコードが単調増加していく特性の表にINSERTする場合、パフォーマンスが向上しますが、DELETEによる削除レコードの空<br />

き領域は再利用されないため、別途、表自体の再作成(もしくは、0件)、または再編成などの運用により、表容量を適正に保<br />

つ仕組みの検討が必要とななります。<br />

� クラスター索引のある表には適用不可。<br />

� ページの空き領域(PCTFREE)<br />

� 離れたページにデータが挿入されると、パフォーマンスに影響を与える為、予めページ内にフリー・スペースを残す様に設定<br />

することができます。<br />

� ALTER TABLE 表名 PCTFREE 数値<br />

� PCTFREE:0~99 (デフォルト:-1)<br />

� データのロード、およびREORG TABLE時に、指定されたサイズのフリー・スペースをページ内に残します。<br />

� PCTFREEの設定が必要な例<br />

� クラスター索引を持つ表(データの挿入時に、索引順とデータの並び順を同じにするようにデータを格納しようと試みる)に対し<br />

て、業務上の観点から、データの追加、削除処理の頻度にも留意し、ページの空き領域(PCTFREE)の設定の検討が必要<br />

です。データの挿入が多い場合、索引順序にデータを配置しようとしても、ページ内に収まらない場合があります。<br />

� また、可変長の属性の列項目を持つ表において、その列項目に対して更新がある場合、空き領域を設けることを検討する。<br />

� オンライン中の更新がない、または、クラスター索引を持たない列項目の属性が固定長のみで定義されている表については、<br />

空き容量は特に必要ありません。


DB2デザイン・ガイド<br />

ページ・サイズの決定<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

31<br />

データベース物理設計<br />

�表を格納するページサイズを決定する<br />

� データの行長・カラム数の制限<br />

� 表容量の制限<br />

� LARGE RID(V9)が使用可能な表スペース(LARGE DMS表スペース、一時表スペース)の場合、<br />

制限値が異なる。(下表参照。)<br />

� 格納効率も考慮する必要がある<br />

� LARGE RIDを使用しない表スペースでは、ページ・サイズにかかわらず1ページに格納できる<br />

行数は最大255行まで。<br />

� LARGE RIDを使用する表スペースでは、1ページに255行以上格納可能。(下表参照。)<br />

� アプリケーションの特性(OLTP or DSS)や管理面も考慮する<br />

�ページ・サイズによる制限値<br />

ページ・<br />

サイズ<br />

行長<br />

(bytes)<br />

�表の分割、パーティション表(V9)も検討する<br />

� UNION ALL VIEWに対する参照(V6,V7でも可)<br />

� UNION ALL VIEWに対する更新、INSERTも可(V8)<br />

� パーティション表(V9)<br />

列数 非LARGE表スペース LARGE表スペース<br />

表容量 行数/ページ 表容量 行数/ページ<br />

4KB 4005 500 64GB 255 2TB 287<br />

8KB 8101 1012 128GB 255 4TB 580<br />

16KB 16293 1012 256GB 255 8TB 1165<br />

32KB 32677 1012 512GB 255 16TB 2335


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

32<br />

データベース物理設計<br />

� ページ・サイズ<br />

� 表に必要となるディスク容量を計算する時に、どのページサイズを使用するかが非常に重要な要素になります。<br />

� DB2では、4K/8K/16K/32Kバイトの4種類のページサイズをサポートします。<br />

� 1行のレコードが複数のページにまたがることはできません。1レコードの長さがページ内に収まらない場合は、ペー<br />

ジサイズを大きくして下さい。<br />

� 表の最大容量の制限<br />

� V8までは、表の最大容量は64/128/256/512GB(それぞれのページサイズは4/8/16/32KB)でしたが、V9以降では、<br />

LARGE RIDを使用することにより、最大容量が2/4/8/16TB (ページサイズは4/8/16/32KB)に拡張されました。<br />

� 格納効率<br />

� LARGE RIDを使用しない表スペースの場合、1ページに格納できるのは最大255行までという制限があります。<br />

� 1行のサイズが100バイトの表があった場合、32KBページでは最大約 (32000 ÷ 100) 320行を1ページに格納できるは<br />

ずですが、この制限によって(320 - 250)約70行分のデータ領域にはデータが格納されず使われない無駄な領域にな<br />

ります。<br />

� 例えば、レコードサイズがLOB(Large Object:BLOB,CLOB,DBCLOB,LONG VARCHAR)を含まない5000バイトの表が<br />

あった場合、4KBページでは表を作成することができません。5000バイトの長さを持つ表を作成するためには、少なくと<br />

も8Kバイトのページサイズを使用する必要があります。しかしこの場合、8Kバイトページのうち5000バイトにしかデータ<br />

が書かれない為、残りの3000バイトは使用されない無駄な領域になります。このようなケースの場合、16KBページとい<br />

う選択肢もあります。16KBページには、5000バイト長のレコードは3レコード入ります。残りは1000バイトとなり、使用さ<br />

れないスペースを抑えることができます。<br />

� LARGE RIDを使用する表スペースでは、この行数の上限値が大きくなりますので、レコードが格納されない無駄な<br />

領域を減らすことができます。(1ページ当たりに格納できる行数の上限値は、ページサイズ毎に異なります。)<br />

� 行のランダム読み取り および 書き込みを実行するOLTPアプリケーションは、不必要な行に使用するバッファー<br />

ページを少なくするために小さいページサイズを使用するようにしてください。<br />

� 一度に多くの連続した行にアクセスするDSSアプリケーションは、指定された数の行を読み取るのに必要な入出力<br />

要求の数を減らすように大きなページサイズを使用するようにしてください。<br />

� 異なるページ・サイズによる考慮点<br />

� バッファプール、一時表スペースはページサイズ毎に必要<br />

� USEオプションを使用した再編成では、一時表スペースは表スペースと同じページサイズである必要がある<br />

� 拡張ストレージは大きなページサイズに合わせる<br />

� バックアップを異なるページサイズに復元することは出来ない


DB2デザイン・ガイド<br />

参考:デフォルト・ページ・サイズの変更(V8.2.2以降)<br />

�V8.2.2以降では、データベース作成時に4KB以外(8,16,32KB)のデフォルト・<br />

ページ・サイズを指定可能。<br />

� 指定方法<br />

� CREATE DATABASEコマンドのPAGESIZEオプション<br />

– 4096, 8192, 16384, 32768または、4 K, 8 K, 16 K, 32 Kを指定可能<br />

� sqlecrea()APIの引数pDbDescriptorExt<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

33<br />

データベース物理設計<br />

� 初期表スペースSYSCATSPACE, TEMPSPACE1, USERSPACE1、デフォルト・バッファー<br />

プールIBMDEFAULTBPは、データベース作成時に指定されたページ・サイズで作成され<br />

る。<br />

� 明示的にページ・サイズを指定して表スペース、バッファープールを作成することも可能。<br />

�考慮点<br />

� 不必要に大きいページ・サイズを使用すると、領域が無駄になることがある。<br />

� バッファープールに読まれるときの領域の無駄<br />

– 特に、データにランダムにアクセスするOLTPアプリケーションの場合<br />

� 1ページあたりの行数の制限<br />

– ページ・サイズに関わらず255行まで<br />

� データベース作成時に指定したデフォルト・ページ・サイズは後から変更できない。


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

34<br />

データベース物理設計


DB2デザイン・ガイド<br />

参考:UNION ALL VIEWによる表分割<br />

�UNION ALLビューとは<br />

� 複数の結果表を組み合わせて新たな結果表として定義されたView<br />

� UNION ALLを指定すると結果は該当表のすべての行から構成される<br />

�表分割の目的<br />

� 表スペースサイズの制限による分割<br />

� 履歴データ等のレンジ・パーティションを実現<br />

� データ削除を分割された表単位のIMPORT REPLACEなどで実行できる<br />

� REORGなどの運用を表毎に個別に行える<br />

�VIEW定義の方法<br />

� CREATE VIEW文中のSELECT文で、WHERE文節によって値を制限<br />

� このVIEWに対するINSERTは不可<br />

� 表に対するCONSTRAINTによって値を制限<br />

� INSERTを使うためにはCONSTRAINTが必要(V8以降)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

35<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

�UNION ALLビューの例<br />

CREATE TABLE Q1(order DATE,month SMALLINT,item VARCHAR(10));<br />

ALTER TABLE Q1 ADD CONSTRAINT q1ckc1 CHECK (MONTH BETWEEN 1 AND 3);<br />

ORDER MONT ITEM<br />

2003-01-01 H<br />

2003-02-01<br />

1 xxxx<br />

2 xxxx<br />

表Q1<br />

2003-03-01 3 xxxx<br />

CREATE TABLE Q2(order DATE, month SMALLINT,item VARCHAR(10));<br />

ALTER TABLE Q2 ADD CONSTRAINT q2ckc1 CHECK (MONTH BETWEEN 4 AND 6);<br />

ORDER MONT ITEM<br />

2003-04-01 H 4 xxxx<br />

2003-05-01 5 xxxx<br />

2003-06-01 6 xxxx<br />

表Q2<br />

CREATE TABLE Q3(order DATE, month SMALLINT,item VARCHAR(10));<br />

ALTER TABLE Q3 ADD CONSTRAINT q3ckc1 CHECK (MONTH BETWEEN 7 AND 9);<br />

ORDER MONT ITEM<br />

2003-07-01 H<br />

2003-08-01<br />

7 xxxx<br />

8 xxxx<br />

表Q3<br />

2003-09-01 9 xxxx<br />

CREATE TABLE Q4(order DATE, month SMALLINT,item VARCHAR(10));<br />

ALTER TABLE Q4 ADD CONSTRAINT q4ckc1 CHECK (MONTH BETWEEN 10 AND 12);<br />

ORDER MONT ITEM<br />

2003-10-01 H<br />

2003-11-01<br />

10 xxxx<br />

11 xxxx<br />

表Q4<br />

2003-12-01 12 xxxx<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

36<br />

データベース物理設計<br />

CREATE VIEW VIEW_YEAR(order,<br />

month,item) AS SELECT * FROM Q1<br />

UNION ALL<br />

SELECT * FROM Q2<br />

UNION ALL<br />

SELECT * FROM Q3<br />

UNION ALL<br />

SELECT * FROM Q4;<br />

ビュー<br />

VIEW_YEAR<br />

ORDER MONTH ITEM<br />

2003-01-01 1 xxxx<br />

2003-02-01 2 xxxx<br />

2003-03-01 3 xxxx<br />

2003-04-01 4 xxxx<br />

2003-05-01 5 xxxx<br />

2003-06-01 6 xxxx<br />

2003-07-01 7 xxxx<br />

2003-08-01 8 xxxx<br />

2003-09-01 9 xxxx<br />

2003-10-01 10 xxxx<br />

2003-11-01 11 xxxx<br />

2003-12-01 12 xxxx


DB2デザイン・ガイド<br />

参考:UNION ALL VIEWによる表分割(続き)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

37<br />

データベース物理設計<br />

�UNION ALL VIEW 使用上の注意点<br />

� アクセス・パスを充分確認した上で使用する<br />

� VIEWへのSELECTを表へのSELECTに変換するのはオプティマイザーであ<br />

る。<br />

� オプティマイザーが解らない場合は、表を特定できない。その場合、全て<br />

の表にアクセスしてしまう<br />

� 表を特定できない例<br />

– 照会の条件が、CHECK制約やVIEW定義のWHERE条件に合致しない<br />

– CHECK制約にMONTHなどの関数を使用...等<br />

� オプティマイザーはVIEW中のSQL文を展開してから評価するので、展開後<br />

のSQL文が長くなる可能性がある<br />

� ステートメント・ヒープ、アプリケーション・ヒープがより多く必要<br />

� SQL文の長さの制限(64K)を超える可能性がある<br />

� 長すぎるSQL文でオプティマイザーがあきらめて、単純なアクセスパスに<br />

走る可能性がある<br />

� UNION ALL VIEWへの更新系処理はオーバーヘッドが生じる<br />

� 各表へのチェック処理<br />

� 更新処理は、なるべく実体の表に対して直接処理を行う


DB2デザイン・ガイド<br />

解説<br />

�オプティマイザ-によって表が特定される例<br />

Create Table Q1_2(Order Date,month smallint,item varchar(10));<br />

alter table q1_2 add constraint q1chck2 check (month between 1 and 3);<br />

Create Table Q2_2(Order Date,month smallint,item varchar(10));<br />

alter table q2_2 add constraint q2chck2 check (month between 4 and 6);<br />

Create Table Q3_2(Order Date,month smallint,item varchar(10));<br />

alter table q3_2 add constraint q3chck2 check (month between 7 and 9);<br />

Create Table Q4_2(Order Date,month smallint,item varchar(10));<br />

alter table q4_2 add constraint q4chck2 check (month between 10 and 12);<br />

Create view VIEW_YEAR2(order,month,item) as<br />

select * from Q1_2 union all<br />

select * from Q2_2 union all<br />

select * from Q3_2 union all<br />

select * from Q4_2;<br />

Original Statement:<br />

-----------------select<br />

* from view_year2 where month = 1<br />

Optimized Statement:<br />

-------------------<br />

SELECT Q1."ORDER" AS "ORDER", Q1."MONTH" AS "MONTH",<br />

Q1."ITEM" AS "ITEM"<br />

FROM ADMINISTRATOR.Q1_2 AS Q1<br />

WHERE (Q1."MONTH" = 1)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

�オプティマイザ-によって表が特定されない例<br />

38<br />

データベース物理設計<br />

Create Table Q1_1(Order Date,month smallint,item varchar(10));<br />

alter table q1_1 add constraint q1chck1 check (MONTH(order) between 1 and 3);<br />

Create Table Q2_1(Order Date,month smallint,item varchar(10));<br />

alter table q2_1 add constraint q2chck1 check (MONTH(order) between 4 and 6);<br />

Create Table Q3_1(Order Date,month smallint,item varchar(10));<br />

alter table q3_1 add constraint q3chck1 check (MONTH(order) between 7 and 9);<br />

Create Table Q4_1(Order Date,month smallint,item varchar(10));<br />

alter table q4_1 add constraint q4chck1 check (MONTH(order) between 10 and 12);<br />

Create view VIEW_YEAR1(order,month,item) as<br />

select * from Q1_1 union all<br />

select * from Q2_1 union all<br />

select * from Q3_1 union all<br />

select * from Q4_1;<br />

Original Statement:<br />

-----------------select<br />

* from view_year1 where month = 1<br />

Optimized Statement:<br />

-------------------<br />

SELECT Q9.$C0 AS "ORDER", Q9.$C1 AS "MONTH", Q9.$C2 AS "ITEM"<br />

FROM<br />

(SELECT Q1."ORDER", Q1."MONTH", Q1."ITEM"<br />

FROM ADMINISTRATOR.Q1_1 AS Q1 WHERE (Q1."MONTH" = 1)<br />

UNION ALL<br />

SELECT Q3."ORDER", Q3."MONTH", Q3."ITEM"<br />

FROM ADMINISTRATOR.Q2_1 AS Q3 WHERE (Q3."MONTH" = 1)<br />

UNION ALL<br />

SELECT Q5."ORDER", Q5."MONTH", Q5."ITEM"<br />

FROM ADMINISTRATOR.Q3_1 AS Q5 WHERE (Q5."MONTH" = 1)<br />

UNION ALL<br />

SELECT Q7."ORDER", Q7."MONTH", Q7."ITEM"<br />

FROM ADMINISTRATOR.Q4_1 AS Q7 WHERE (Q7."MONTH" = 1) ) AS Q9


DB2デザイン・ガイド<br />

参考:パーティション表による表分割<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

39<br />

データベース物理設計<br />

�データの範囲によって、ひとつの表を複数のパーティションに物理的に分割し<br />

て保存する<br />

� CREATE TABLEステートメントのPARTITION BY文節で指定されたパーティション・キー列の値<br />

に従って、表を複数のパーティションに分割する<br />

� それぞれのパーティションは、異なる表スペースにも、同じ表スペース内にも配置することがで<br />

きる<br />

�新しいパーティションのアタッチ/デタッチが可能<br />

履歴表A<br />

区分の<br />

デタッチ<br />

JAN01 JAN02 JAN03 JAN04<br />

JAN01<br />

JAN05<br />

JAN05<br />

区分の<br />

アタッチ


DB2デザイン・ガイド<br />

参考:パーティション表による表分割(続き)<br />

�表を分割<br />

�区分化された単位は「データ・パーティション」、または「レンジ」と呼ばれる<br />

�キーレンジによるデータ分散<br />

�大規模データベースの実現<br />

�巨大な表<br />

�高速なデータアクセス<br />

�高速なロールイン/ロールアウト<br />

CREATE TABLE T1<br />

( COL1 INT, COL2 DATE )<br />

PARTITION BY RANGE (COL2)<br />

(<br />

STARTING FROM (‘2006-01-01’)<br />

ENDING (‘2006-12-31’)<br />

EVERY (3 MONTH)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

)<br />

40<br />

表 T1<br />

キーレンジによるデータ分散<br />

JAN-MAR APR-JUN JUL-SEP OCT-DEC<br />

データ・<br />

パーティション0<br />

データ・<br />

パーティション1<br />

データ・<br />

パーティション2<br />

DBパーティション0<br />

データベース物理設計<br />

データ・<br />

パーティション3


DB2デザイン・ガイド<br />

参考:パーティション表による表分割(続き)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

41<br />

データベース物理設計<br />

� パーティション表のメリット<br />

1. 保存期間を過ぎた行の高速な削除<br />

� 保存期間の過ぎた行を含むパーティションをデタッチし、デタッチした表をDROPする<br />

2. 新規データのオンライン高速ロード<br />

� あらかじめLOADしておいた表を、既存のパーティション表にアタッチする<br />

3. データアクセスの性能向上<br />

� 指定された条件によって、特定パーティションのみにアクセスする<br />

4. 故障範囲の局所化(各パーティションを異なる表スペースへ配置)<br />

� 各パーティションを異なる表スペースへ配置しておけば、ある表スペースがアクセス<br />

不能になっても、その他の表スペースに配置されたパーティションへのアクセスは可<br />

能<br />

5. バックアップ性能の向上<br />

� 各パーティションを異なる表スペースへ配置し、並列でバックアップを実行する<br />

(BACKUPコマンドのPARALLELISMオプションを使用)


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

42<br />

データベース物理設計


DB2デザイン・ガイド<br />

索引の設計<br />

� 索引の目的<br />

� 照会処理の処理効率を高める<br />

� アクセス・パスにおける索引の使用による効率のよいデータへのアクセス<br />

� 行のユニーク性を維持する<br />

� ユニーク索引<br />

� データの並び順を索引順に維持することにより、データ・アクセスの効率を向上させる<br />

� クラスター索引<br />

� 設計手順<br />

� パフォーマンス改善を目的とし、繰り返し行う必要がある<br />

� 索引候補の検討<br />

� 索引数の検討<br />

� 索引候補の取捨選択<br />

� 索引の物理定義と検証<br />

� 索引が有効に利用され最適なアクセスパスになっているか<br />

� 意図した索引を使用しているか<br />

� メンテナンス負荷を軽減するため、使用されていない場合にはDROP<br />

� SYSCAT.PACKAGES(静的SQL)、または、EXPLAINツールで確認<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

43<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

44<br />

データベース物理設計<br />

� 表に作成する索引は、本の索引と同様の機能を果たします。<br />

� 索引の第一の目的は、データをアクセスする際の処理効率を向上させることです。余計な<br />

入出力をすることなく、最短の方法で目的のデータにたどりつくには、索引は非常に有効<br />

です。<br />

� ユニーク索引を作成した際には、索引のキー列のユニーク性を保証する機能を使用可能<br />

です。<br />

� クラスター索引<br />

� クラスター索引を作成すると、データの挿入時に、索引順とデータの並び順を同じにするようにデータを格納しようと<br />

試みます。<br />

� データを索引の列項目の値順に読み込む場合、I/O回数が軽減され、処理効率が向上します。<br />

� クラスター索引を作成する場合、データが格納されるページに空きスペースを準備する必要があります。<br />

� 索引の列項目の値が更新される(更新があった場合、索引順に再格納は行わないため、再編成の必要性を検討す<br />

る必要がある)場合や、検索結果が常に1件となる照会処理が頻繁に行われる場合は、作成してもメリットはありま<br />

せん。<br />

� 索引の設計手順<br />

� パフォーマンス改善を目的とし、内部設計から統合テストの局面まで、繰り返し行う必要があります。<br />

� 索引候補の検討<br />

� 主キーや外部キーなどは、データの意味から索引候補として決定可能であるため、外部設計後に可能な作業です。一<br />

方、その他の2次索引については、具体的なSQL文を元にアクセス・プランを検討し、候補の洗い出しを行います。<br />

� 索引数の検討<br />

� 索引数が増えると、索引のメンテナンス負荷が高くなり、処理効率が低下します。従って、トランザクションの内容によ<br />

り、索引数を制限して作成する必要があります。<br />

� 索引候補の取捨選択<br />

� どの列に索引を付与するか、最適なアクセス・プランを検討し、本当に必要と思われる索引を選択します。<br />

� 索引の物理定義と検証<br />

� 索引が有効に活用されているかを確認し、使用されていない場合には、DROPする必要があります。索引が存在す<br />

ることによるメンテナンス負荷を軽減するためです。静的SQLプログラムについては、SYSCAT.PACKAGESで確認で<br />

きます。また、動的SQLプログラムについては、EXPLAINツールで確認します。


DB2デザイン・ガイド<br />

索引候補の検討<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

45<br />

データベース物理設計<br />

�ユニーク索引が必要か<br />

� ユニーク性の維持が必要な場合:ユニーク索引<br />

� 参照の整合性が必要な場合:主キー<br />

� CREATE TABLE実行時に、自動的に主キーに対する昇順のユニーク索引が作成<br />

される<br />

– 索引名 : SQL+タイムスタンプ+番号<br />

– 索引スキーマ: SYSIBM<br />

– CONSTRAINTで制約名をつけると管理が容易<br />

�外部キーに索引をつける<br />

� 結合列になる可能性が高い列に索引があると、処理効率は良い<br />

�条件句(WHERE句に現れる述語)の中で頻繁に使用される列を<br />

検討 � 結合列<br />

� 探索条件の列<br />

� ANDで結ばれた等号述語<br />

� 範囲指定の述語(BETWEEN,不等号述語)<br />

� ソート列(DISTINCT、ORDER BY、GROUP BYで指定された列)<br />

� 索引のみのアクセスを目的とした索引<br />

� INCLUDE列つきのユニーク索引


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

46<br />

データベース物理設計<br />

� 基本的な索引候補<br />

� まず、ユニーク索引が必要かどうかを検討します。ユニーク性を維持しなければならない列が存在するので<br />

あれば、ユニーク索引が必要です。<br />

� 主キーの必要性を検討します。他の表の列と整合性を保たなければならない、マスターとなる列が存在す<br />

るのであれば、表に主キーを設定します。基本キーの設定は、表の作成(CREATE TABLE)時に指定す<br />

るか、または、表の変更(ALTER TABLE)で指定します。<br />

� 外部キーがある場合、検索条件の結合列となる可能性が高いため、索引の候補になります。<br />

� さらに、その他の2次索引候補を検討します。<br />

� 候補になる列は、条件節での登場回数が多い列です。<br />

� また、ソートの対象となる列も候補になります。<br />

� FOREIGN KEY(外部キー)が定義されている列項目<br />

� レコードの探索条件として、「=」述部に指定されることの最も多い列項目、もしくは、最初のキーとしての個<br />

別の値が最も多い列<br />

� 表を結合するときに使用するすべての列<br />

� INCLUDE列つきのユニーク索引<br />

� ユニーク索引の列として、ユニークではない列を含むことが可能<br />

� 目的: 索引のみのアクセスによるパフォーマンス向上<br />

� 冗長な索引を作成しない<br />

� 表にアクセスすることなく、索引のみで照会処理要求を満たすことができます。これをindex-only accessとい<br />

います。<br />

� INCLUDE列を指定してユニーク索引を作成することにより、データページのアクセス頻度が軽減されます。<br />

� 索引キーの一部の列については、ユニーク性を保持する<br />

� ユニークではない列については、ユニーク性の検査が発生しない<br />

� 作成方法: CREATE UNIQUE INDEX 索引名 ON 表名 (列名) INCLUDE (列名)<br />

� 複数列の指定が可能<br />

� ユニークではない列については、索引順(ASC,DESC)の指定は無効


DB2デザイン・ガイド<br />

参考:INCLUDE列つきのユニーク索引の使用例<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

47<br />

データベース物理設計<br />

� 処理するSQLステートメントの例:(employee_idに主キーがある)<br />

� SELECT employee_id, mgr_id FROM my_employee WHERE employee_id = 78379 ;<br />

� INCLUDE列を使用しない例:2つの索引を作成・維持する必要あり<br />

� 1.表の作成<br />

� CREATE TABLE my_employee ( employee_id integer not null, mgr_id integer, phone_no integer,<br />

hire_date date, PRIMARY KEY (employee_id) );<br />

– DB2は主キーには自動的にユニーク索引を作成する<br />

� 2.索引のみのアクセスのために、索引を作成する<br />

� CREATE INDEX col_index ON my_employee (employee_id, mgr_id) ;<br />

� INCLUDE列を使用する例:1つの索引だけで INDEX ONLY ACCESS<br />

� 1.表の作成<br />

� CREATE TABLE my_employee ( employee_id integer not null, mgr_id integer, phone_no integer,<br />

hire_date date) ;<br />

� 2.INCLUDE列つき索引の作成<br />

� CREATE UNIQUE INDEX my_index on my_employee (employee_id) INCLUDE (mgr_id) ;<br />

� 3.主キーの作成<br />

� ALTER TABLE my_employee add PRIMARY KEY (employee_id);<br />

– 既存の索引が主キーになる


DB2デザイン・ガイド<br />

索引候補の取捨選択<br />

� 索引の作成を避けた方がよい列<br />

� 可変長列<br />

� 索引のメンテナンスの負荷が高い<br />

� 統計情報のCOLCARDの値が小さい(重複値の多い)列<br />

� (例) フラグ(0 or 1)や区分など<br />

� SYSCA.COLUMNSのCOLCARD列:ユニークな値の数<br />

� オプティマイザ-が索引を選択しない<br />

� サイズがごく小さい表の列<br />

� アクセス・パスの決定時に索引が有効とみなされず、表スキャンになる可能性が高い<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

48<br />

データベース物理設計<br />

� 複合列索引の考慮点<br />

� 複合列索引の全ての列が等号で使用されるものは有効<br />

� 索引列は、最も頻繁に等号で指定される列か、最もユニーク性の高い列から順に指定する<br />

� 最初の索引列で結果行を大幅に絞り込める索引は使用されやすい<br />

� 完全にマッチングする索引を優先する<br />

� (例)索引1(col1,col2,col3) と 索引2(col1,col2)がある場合で、条件がcol1=x and col2=x であ<br />

れば索引2を優先<br />

– 索引2はFULLKEYCARDが有効であり、かつ、キー長が短いのでバッファーヒット率が高い<br />

� 統計情報でFULLKEYCARDが大きいものは有効<br />

� SYSCAT.INDEXES(FULLKEYCARD):列全体でユニークな値の数


DB2デザイン・ガイド<br />

索引数の検討<br />

�索引数の目安:表あたり5個以下が望ましい<br />

� むやみに索引を作成することは、ディスクを無駄に消費し、負荷を増やすことになる<br />

� オンラインでの更新処理環境:1-2個<br />

� 照会のみの環境:5個以上作成してもよい<br />

� オンラインの更新処理と照会処理の混在した環境:2-5個<br />

�更新処理時には索引のメンテナンスが必要となり、負荷が発生する<br />

� INSERT処理では、索引列の追加処理が発生<br />

� DELETE処理では、索引列の削除処理が発生<br />

� 索引列に対するUPDATE処理では、索引列の変更処理<br />

� 索引のスプリット処理<br />

� 行のランダムな追加を予想し、事前にページにフリースペースを確保しておく(PCTFREE)<br />

�その他の負荷<br />

� クラスター索引がある表へのINSERTは、索引順を極力保持するようにデータを格納する<br />

� ディスク・スペース使用量の増加<br />

� LOAD、REORG時の索引の再作成の負荷<br />

� 索引の追加によりプログラムのPREPARE時間が増加<br />

� 静的SQLではBIND時、動的SQLでは実行時の時間が増加する<br />

� 検討すべきアクセスパスの組み合わせが増加する<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

49<br />

データベース物理設計<br />

� 前方スキャン、逆方向スキャンの両方が必要な場合、ALLOW REVERSE<br />

SCANSオプションを指定して索引を作成する(二つの異なる索引を作成する<br />

必要はない)<br />

� V9以降、新規で作成される主キー、ユニーク・キー、または索引(拡張索引は除く)は、デフォル<br />

トでALLOW REVERSE SCANS設定になる。


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

50<br />

データベース物理設計<br />

� 索引数が増えると、照会のパフォーマンスは向上する可能性がある一方で、索引のメンテナン<br />

ス負荷が高くなり、更新の際の処理効率が低下します。従って、トランザクションの内容により、<br />

索引数を制限して作成する必要があります。<br />

� 複数の索引を作成する前には、ディスク・スペースや処理時間への影響も留意し検討する必要<br />

があります。<br />

� 索引のスプリット処理<br />

� 索引のリーフ・ページが満杯になった時点で、さらにそのページにデータが格納される必要があったとき、索引ページは分割<br />

され、2つのリーフ・ページになります。分割されるデータの割合は、満杯になった索引ページが索引構造内でどの場所にあっ<br />

たかにより異なります。<br />

� 索引ページのフリースペース(PCTFREE)<br />

� 表にランダムにデータをINSERTするようなアプリケーションにより、索引のリーフページが頻繁にスプリットされてしまうのを<br />

防ぐために有効です。<br />

� CREATE INDEX ステートメントのオプションです。また、LOAD時にMODIFIED BY INDEXFREESPACE=xにより、再指定するこ<br />

とも可能です。<br />

� フリースペースが確保されるタイミングはLOADおよびREORG時です。<br />

� 以下の場合には、フリースペースは必要ありません。<br />

� INSERT,DELETEがない<br />

� 索引キーの更新がなく、固定長列のみなので更新による行のネスティングが発生しない<br />

� 照会のみである<br />

� LOADに関する考慮点<br />

� LOADの前に索引作成を行っておいたほうが、LOAD後に索引を作成した場合と比較すると、合計時間が短くてすみます。ま<br />

た、事前にユニーク索引を作成しておいた場合には、LOAD時にユニーク性の検査が行われます。<br />

� LOADの前に索引を作成しておく場合には、索引を作成するための一時領域を確保しておく必要があります。メモリー領域と<br />

しては、DB構成パラメーターSORTHEAPに設定された容量のソート領域が使用されます。また、ディスク領域としては、一時<br />

表スペースが使用されます。


DB2デザイン・ガイド<br />

V9.5<br />

索引に関するその他の検討事項<br />

� 索引用の表スペース<br />

� 索引用の表スペースを作成する(DMSのみ)<br />

� 表データとは別の物理ディスクに配置することによる並列I/Oが期待できる<br />

� 索引だけ早いディスクに格納することができる<br />

� 索引用の表スペースに対するバッファープールを作成する<br />

� 索引をメモリー上に保持し、バッファーヒットさせたい場合<br />

� 索引用の表スペースはDMSファイル表スペースにすることも検討?<br />

� AIXファイルシステムのキャッシュが使用可能<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

51<br />

データベース物理設計<br />

� 索引が有効利用され、最適なアクセスパスを得るために<br />

� 索引順を維持する<br />

� クラスター索引により索引順を維持する<br />

� REORGにより定期的に索引順を維持する<br />

� ユニーク索引の列による1件検索の場合には、クラスター率が低くても問題はない<br />

� RUNSTATSの実行による統計情報更新とBIND実行<br />

� 実行タイミング<br />

– 表のデータがLOADされ、適切な索引が作成された時<br />

– 表のデータがREORGされた時やアプリケーションをBINDする時<br />

– 表および索引のデータの10%-20%がUPDATE/DELETE/INSERTされた時<br />

� 現時点の統計情報に更新することにより、現状で最適なアクセス・パスが選択される(動的SQ<br />

Lの場合)<br />

� RUNSTATS実行後、BINDを実行する(静的SQLの場合)<br />

� 索引のTYPE<br />

� DB2 V9.5 では、タイプ 1 索引は推奨されません、将来のリリースで廃止される可能性があります。


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

52<br />

データベース物理設計<br />

� 索引データを索引用の表スペースに格納するためには、表の作成(CREATE TABLE)時に、<br />

その表に対して作成された索引のデータをどの表スペースに格納するかを明示的に指定しま<br />

す。 � CREATE TABLE 表名 (COL1 INTEGER, .......) IN 表の表スペース名 INDEX IN 索引の表スペース名<br />

� 索引が作成されている索引用の表スペースをDROPすることはできません。DROP時に、関連す<br />

るデータベース・オブジェクトが存在するためにDROPが不可能である旨のエラー・メッセージが<br />

戻されます。この場合、索引を全てDROP後に、表スペースをDROPするか、または、DROP<br />

TABLESPACE文で、関連する表スペースを全て指定することにより、表スペースをDROPするこ<br />

とが可能です。<br />

� RUNSTATSは、表のデータが大きく変化した場合に、統計情報を最新の状態に更新するために<br />

実行します。動的SQLは動的にBINDを実行するため、RUNSTATSで統計情報を変更するこ<br />

とによりアクセス・パスが変わる可能性があります。<br />

� 静的SQLの場合は、RUNSTATS実行後、より最適なアクセス・パスを得るには、BINDを実行す<br />

る必要があります。<br />

� RUNSTATSはAND INDEXESオプションつきで実行します。また、必要に応じて、WITH<br />

DISTRIBUTIONオプションつきで実行し、非一様分布統計情報を収集してみます。


DB2デザイン・ガイド<br />

参考:索引列の最大数と索引キーの最大長<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

53<br />

データベース物理設計<br />

�索引列の最大数と索引キーの最大長は、V8以前とV9で異なる。<br />

(V9で拡張された。)<br />

バージョン ページ・<br />

サイズ<br />

索引列の最大数 索引キーの最大長<br />

(bytes)<br />

V8まで 4/8/16/32KB 16 1024<br />

V9 4KB 64 1024<br />

8KB 64 2048<br />

16KB 64 4096<br />

32KB 64 8192


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

54<br />

データベース物理設計


DB2デザイン・ガイド<br />

②データ容量の見積もり<br />

�表/索引の見積もり<br />

�表スペースの見積もり<br />

� カタログ表スペース<br />

� ユーザー表スペース<br />

� 一時表スペース<br />

�ログ領域の見積もり<br />

� アクティブ・ログ領域<br />

� アーカイブ・ログ領域<br />

�製品インストール・ディレクトリーの見積もり<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

55<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

56<br />

データベース物理設計


DB2デザイン・ガイド<br />

表/索引の見積もり<br />

�前提:<br />

� 見積もりの基礎となる前提の数値、算定根拠を明確にする<br />

� 各表のレコード件数を見積もる上で必要な数値の収集<br />

– コード類、マスター類の件数、1日あたりの処理件数<br />

– データの保持期間、データ増加率 ...etc.<br />

� お客様にAuthorizeされた前提の数値であることが重要<br />

– 前提に変更があれば、都度再見積もり可能なようにワークシートにまと<br />

めておく<br />

� あくまでも見積もりであり、テスト環境のDBでデータを格納し確認<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

57<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

58<br />

データベース物理設計<br />

� 論理設計のアウトプットである表を作成した場合に、どれだけのディスク容量が必要となるかを見積もる必要があり<br />

ます。<br />

� この容量見積もりは、表に含まれるデータだけではなく、索引のデータも含まれます。後段階でパフォーマンス<br />

チューニングを行う際に索引が追加されることも考慮し、索引を作成する表スペースの容量には余裕を持たせる必<br />

要があります。<br />

� 見積もり作業を開始するにあたっては、表や索引の定義が決定していることは言うまでもありませんが、見積もりの<br />

基礎となる前提の数値(コード類、マスター類の件数、1日あたりの処理件数、データの保持期間、データ増加率...<br />

etc)や算定根拠を明確にする必要があります。<br />

� 各表のレコード件数を見積もる上で必要な数値の収集は、お客様にAuthorizeされた前提の数値であることが重要<br />

です。<br />

� 前提に変更があれば、都度再見積もりが必要となりますので、再見積もりが容易になるようにワークシートにまとめ<br />

ておきましょう。<br />

� データベース・オブジェクトのサイズは、正確に見積もることができません。サイズの見積もりを難しくする原因は、<br />

ディスクのフラグメント化によって発生するオーバーヘッド、フリー・スペース、および可変長列の使用などです。これ<br />

は、列タイプや行の長さが広い範囲で異なる可能性があるためです。まずデータベースのサイズを見積もってから、<br />

テスト・データベースを作成し、それに標準的なデータを入れてみてください。


DB2デザイン・ガイド<br />

表/索引の見積もり<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

59<br />

データベース物理設計<br />

� 表容量概算:(論理レコード長+10)×レコード件数×安全率<br />

� 論理レコード長<br />

� 各データ項目のデータ・タイプ、桁数から各項目の物理サイズを算出。可変長の場合は、平均長を採用。<br />

� NULL値を許す場合1バイト、可変長の場合4バイトを各該当の列項目あたり加算<br />

� すべてを合計したのが1行あたりの論理レコード長<br />

� レコード件数<br />

� 保存期間、データ増加率も加味<br />

� 安全率(余裕率)<br />

� PCTFREEの割合やAPPENDモードであるかも考慮する<br />

� オーバーヘッド分(フラグメンテーションやオーバー・フロー・レコードの有無)<br />

� Long列データは他の表データとは別のところに保管<br />

� LONG VARCHAR、LONG VARGRAPHICは24バイト、LOBは各列の情報(ポインターなど)のみを他データと共<br />

に持つ<br />

� 必要なディスク容量<br />

� 表スペースのページ・サイズを決定し、1ページあたりの行数から必要ページ数を導く(後述)<br />

� 索引容量概算:(平均索引キー・サイズ+9)×行数×安全率<br />

� 基本的な算出方法の考え方は表と同等<br />

� LARGE表スペースに作成した表に定義する索引の場合(LARGE RIDを使用する場合)<br />

� 索引の1つの行項目当たり 2 バイトが追加で必要。<br />

– (平均索引キー・サイズ+9 +2 )×行数×安全率<br />

� LARGE表スペースに作成したパーティション表に定義する索引の場合、LARGE RID分の2バイトと、パーティ<br />

ションID用の2バイトが追加で必要。<br />

– (平均索引キー・サイズ+9 +2 +2)×行数×安全率<br />

� 安全率<br />

� ノンリーフ・ページやフリー・スペースなどのオーバーヘッドのため、少なくとも2倍は必要<br />

� 索引の作成時のソートに必要な一時スペースの領域は、上記の式の安全率を3.2として見積もる<br />

� 後にパフォーマンスチューニングで索引が追加されることも考慮し余裕を見ておく


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

60<br />

データベース物理設計<br />

� ここで、レコード長を計算する場合、ヌルが可の場合1バイト、可変長の場合4バイトを加える必要があります。<br />

� 論理レコード長は、各データ項目のデータ・タイプ、桁数から各項目の物理サイズを算出して、可変長の場合は、平<br />

均長を採用します。NULL値を許す場合1バイト、可変長の場合4バイトを各該当の列項目あたり加算し、これらをす<br />

べて合計したのが1行のレコード長となります。<br />

� レコード件数は、保存期間、データ増加率も加味します。また、安全率としてPCTFREEの割合やAPPENDモードであ<br />

るかの考慮や、オーバーヘッド分(フラグメンテーションやオーバー・フロー・レコードの有無)も考慮します。<br />

� 索引のキー長も算出方法は基本的には表と同等です。<br />

� V9からサポートされたLARGE RID(6バイト)は、通常のRID(4バイト)より2バイト拡張されているため、LARGE表ス<br />

ペースに作成した表に対して定義する索引の場合、索引の1つの行項目あたり追加で2バイト必要です。<br />

� 更に、その表がパーティション表である場合、索引キーにパーティションIDが含まれますので、その分の2バイトが追<br />

加で必要になります。<br />

� 後段階でパフォーマンスチューニングを行う際に索引が追加されることも考慮し、索引を作成する表スペースの容量<br />

には余裕を持たせる必要があります。<br />

� 最終的に必要なディスク容量は、表スペースのページ・サイズを決定し、1行の長さから1ページあたりの行数を算出<br />

し、全データ件数をその1ページあたりの行数で割ることにより、必要ページ数を導きます。(後述)


DB2デザイン・ガイド<br />

解説<br />

�各データ・タイプ毎のサイズ<br />

データ・タイプ バイト<br />

INTEGER 4<br />

SMALLINT 2<br />

DOUBLE 8<br />

DECIMAL(n,m) (n/2 + 1)<br />

CHARACTER(n) n<br />

VARCHAR(n) n+4<br />

LONG VARCHAR 24<br />

GRAPHIC n*2<br />

VARGRAPHIC (n*2)+4<br />

LONG VARGRAPHIC 24<br />

DATE 4<br />

TIME 3<br />

TIMESTAMP 10<br />

XML 96<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

61<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

62<br />

データベース物理設計<br />

� LONG列データ<br />

� long varchar, long vargraphic のデータです。<br />

� ファイル名は、SQLxxxx.LFです。<br />

� 32KB + 4KB(アロケーションとフリースペース情報)<br />

� 32KBのデータエリアの中は 512×2の累乗のセグメントにわかれています。<br />

� 512、1024、2048、・・・、32KB<br />

� LOBデータ<br />

� SQLXXXX.LB 1024*2の累乗のセグメントずつ増えます。<br />

� 1024、2048、・・・、64MB<br />

� SQLXXXX.LBA アロケーションとフリー・スペース情報<br />

� 64GB毎に4KBページ 1個 + 8MB毎に4KBページ1個。<br />

� COMPACTパラメータ(CREATE TABLE XXXX)<br />

� LOBデータの将来の更新のために予めフリースペースを確保しないようにします。<br />

– LOBデータをより小さいセグメントに分割させます。(パフォーマンスは悪くなりますが,ディスク<br />

スペースは少なくなります)<br />

� not compactはスペースを確保します(デフォルト)<br />

– LOBデータをひとつのセグメントの中に連続してとります<br />

� 例) create table blob (col0 clob(10m) compact)<br />

– 2500バイト/行 × 1000 行 load<br />

– compact-3MB 2048+1024バイトずつとります<br />

– not compact -4MB 4096バイトずつとります


DB2デザイン・ガイド<br />

参考:LOBデータ<br />

�セグメント(1024)単位でデータを格納<br />

� 1024バイト*2の累乗<br />

1MBセグメント 2MBセグメント<br />

1MB<br />

LOBデータ<br />

1.1MBバイト<br />

LOBデータ<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

63<br />

データベース物理設計<br />

�compactオプション<br />

� データが格納されないままのディスク・スペースを有効に活用できる<br />

� パフォーマンスは低下する可能性がある<br />

� 再編成(REORG)に注意する<br />

� compactオプションを使用しない場合、再編成でサイズが大きくなる可能性が<br />

ある


DB2デザイン・ガイド<br />

参考:LOBデータ<br />

�LOBデータオブジェクト<br />

� CREATE TABLE時のLOB最大サイズはディスク使用量に影響しない<br />

�LOB割り振りオブジェクト<br />

� 64GBごとに4Kページ1個 +8MBごとに4Kページ1個<br />

�LOB記述子<br />

REGULAR表スペース<br />

LONG表スペース<br />

LOB記述子<br />

LOBデータオブジェクト<br />

LOB割り振りオブジェクト<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

64<br />

LOB最大サイズ(バイト) LOB記述子サイズ<br />

データベース物理設計<br />

1K 72<br />

8K 96<br />

64K 120<br />

512K 144<br />

4M 168<br />

128M 200<br />

512M 224<br />

1G 256<br />

1.5G 280<br />

2G 316


DB2デザイン・ガイド<br />

参考:LOBデータの表スペース計算<br />

�LOBデータオブジェクト:<br />

� 実際に格納されるデータのセグメント * レコード件数<br />

�LOB割り振りオブジェクト:<br />

� ROUNDUP(LOBデータオブジェクトサイズ/64GB) * 4KB<br />

+<br />

ROUNDUP(LOBデータオブジェクトサイズ/8MB) * 4KB<br />

�LOB記述子<br />

� LOB記述子サイズ * レコード件数<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

65<br />

データベース物理設計


DB2デザイン・ガイド<br />

参考:XMLデータの容量見積もり<br />

�XML部分はRelationalデータとは別に保管される(XDA)<br />

�Relationalデータ部分には、XMLデータ指定子(XDS)と呼ばれるポインターが格納される。<br />

�SMS表スペースにXMLデータを保管する場合、拡張子.xdaのファイルとして格納される。<br />

�XML文書をXML列に格納すると、XML文書サイズの1.5-2.5倍になる<br />

�さらに大きくなることもあるため、余裕を見てXML文書サイズの3倍程度用意する。<br />

create table dept (deptID int,…, deptdoc xml)<br />

deptID<br />

(int) … deptdoc<br />

1 …<br />

… … …<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

(XML)<br />

XML データ指定子(XDS)<br />

66<br />

XDA (XML Data Area)<br />

データベース物理設計


DB2デザイン・ガイド<br />

V9.5<br />

データ・オブジェクト<br />

ID … DOC (XML)<br />

PR27 …<br />

PR28 … XML記述子<br />

ACC …<br />

XDAオブジェクト(XML Data)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

67<br />

索引オブジェクト<br />

Regions<br />

Index<br />

データベース物理設計<br />

参考:DB2 V9.5でのXMLデータの基礎表への格納(inline格納)<br />

�DB2 V9.5では、指定したサイズ以下のXMLデータを基礎表に保持可能<br />

� 基礎表に保持させたいXML列を定義する際に「INLINE LENGTH 」キーワードを付加する。<br />

� 表の作成時に、カラムオプションとして指定<br />

� 下記の例では、10000バイト以下のXMLデータを、ベース表に保持する。<br />

create table dept (deptID char(8),...,doc XML inline length 10000)


DB2デザイン・ガイド<br />

V9.5<br />

参考:XMLデータの基礎表への格納のメリット<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

68<br />

データベース物理設計<br />

�メリット<br />

� XMLデータを参照する際に必要なI/Oリクエスト削減<br />

� SELECT/INSERT/UPDATE全般の性能向上<br />

� XMLデータを処理する際にReagions IndexやXDAの参照が不要になる<br />

� 行圧縮の対象にすることが可能<br />

�考慮点<br />

� 通常データとXMLデータを別テーブルスペースに配置する場合、基礎表と<br />

XDAの容量バランスに注意する。<br />

� XMLデータの基礎表への保管を行う場合、基礎表のページサイズを大きくした<br />

上で、基礎表とXDAを同じ表スペースへ格納することも検討する。<br />

� リレーショナルデータへのアクセスが主たる表に、XML列を追加する場合<br />

� XMLデータを基礎表に保管する場合、1ページ当たりに格納可能なレコード数<br />

が減少する。<br />

� 特に既存のアプリケーション、SQLが存在する場合、1ページ当たりのレコード<br />

数減少が処理性能に影響する可能性があるため、パフォーマンス検証を行うこ<br />

とを推奨。


DB2デザイン・ガイド<br />

参考:NULLとシステム・デフォルト値のデータ圧縮<br />

�V8からの新機能<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

69<br />

データベース物理設計<br />

�目的 � 格納スペースの節約<br />

� 新しいレコードフォーマットでNULL値の場合には実際のデータページを節約<br />

� NULL値でないSYSTEM Default値の場合にも実際のデータをページを節約<br />

� 実際の領域を確保しない<br />

� 結果として1 page上に入る行数を増やすことが可能<br />

– 1page 255行の制約は緩和されたわけではない(LARGE RIDを使用しない表<br />

スペースの場合)<br />

�圧縮指定方法<br />

� CREATE/ALTER TABLEでCompressの指定<br />

� (Table level) VALUES COMPRESS指定<br />

– NULLsおよび0-length varying-length data type (varchar, vargraphics, long<br />

varchar, long vargraphic, BLOB, CLOB, DBCLOB) はInsert/Update時にDisk<br />

上に保管されない<br />

� (Column level) Compress system default指定<br />

– numerical 0s, blanksが圧縮可能<br />

�考慮点<br />

� 内部的にフォーマットが変更されているため、条件によっては、容量が増大する<br />

� カラムのオフセット情報等で各列2バイト確保される<br />

� 圧縮したことにより、オーバーフローが発生する可能性があるので、メリットがある<br />

かを充分検討する必要がある


DB2デザイン・ガイド<br />

解説<br />

Data Type Byte count (new row format) Byte count (old row format). If column<br />

is nullable, add 1 more byte to the<br />

shown list<br />

ROW OVERHEAD 2 0<br />

INTEGER 6 4<br />

SMALLINT 4 2<br />

BIGINT 10 8<br />

REAL 6 4<br />

DOUBLE 10 8<br />

DECIMAL The integral part of (p/2)+3, where p is the The precision integral part of (p/2)+1, where p is<br />

the precision<br />

CHAR(n) n+2 n<br />

VARCHAR(n) n+2 n+4<br />

LONG VARCHAR 22 24<br />

GRAPHIC(n) n*2+2 n*2<br />

VARGRAPHIC(n) (n*2)+2 (n*2)+4<br />

LONG VARGRAPHIC 22 24<br />

DATE 6 4<br />

TIME 5 3<br />

TIMESTAMP 12 10<br />

DATALINK(n) n+52 n+54<br />

Maximum LOB length 1024 70 72<br />

Maximum LOB length 8192 94 96<br />

Maximum LOB length 65536 118 120<br />

Maximum LOB length 524000 142 144<br />

Maximum LOB length 4190000 166 168<br />

Maximum LOB length 134000000 198 200<br />

Maximum LOB length 536000000 222 224<br />

Maximum LOB length 1070000000 254 256<br />

Maximum LOB length 1470000000 278 280<br />

Maximum LOB length 2147483647 314 316<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

70<br />

データベース物理設計


DB2デザイン・ガイド<br />

参考:データ行圧縮<br />

� V9からの新機能<br />

� 目的<br />

� データ・ページ使用量の削減<br />

� 特に、繰り返しデータがあるような場合はお奨め<br />

� I/O負荷の削減<br />

� トレード・オフとして、CPU使用率の増加(圧縮、解凍のため)<br />

� バッファー・プールの使用率向上<br />

� 圧縮された状態でバッファープールに読み込まれる<br />

� ログ書き出し量の削減(例外有り)<br />

� Insert/Delete は圧縮されたイメージでロギング<br />

� Update についてはログ量が増える可能性有り<br />

� 圧縮指定方法<br />

1.<br />

2.<br />

CREATE/ALTER TABLEで表に対する「COMPRESS YES」の定義<br />

オフライン再編成の実施<br />

� 辞書を作成するために「REORG … KEEPDICTIONARY(もしくはRESETDICTIOANRY)」コマンドの実行<br />

� 辞書作成フェーズを経て、表データの圧縮が行われる<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

71<br />

データベース物理設計<br />

� 圧縮率の見積もり<br />

� INSPECTコマンドを使用<br />

� 指定した表のデータのサンプルを基に辞書を作成し、この辞書を使用して圧縮テストを行うことで、圧縮率を<br />

見積もる<br />

� 使用方法<br />

1.<br />

2.<br />

見積もり対象表に対してINSPECTコマンドを実行する<br />

– $ db2 “inspect rowcompestimate table name t1 results keep t1_estimate.dmp”<br />

$INSTANCE_HOME/sqllib/db2dumpディレクトリ配下に生成されたファイルに対して、DB2INSPFコマンドを実行する<br />

– $ db2inspf t1_estimate.dmp t1_estimate.out<br />

� 考慮点<br />

� XML列、LONG/LOB列、索引は圧縮の対象にならない<br />

� データ行圧縮機能を利用するためには、ESEかつ「Storage Optimization Feature」を導入する必要がある


DB2デザイン・ガイド<br />

参考:データ行圧縮<br />

�Lempel Ziv アルゴリズム(LZ78,静的辞書圧縮法)を応用した圧<br />

縮方法<br />

�特定のフレーズを辞書に登録し、辞書にあるデータを基に実<br />

データを圧縮していく<br />

■LZ78の例<br />

辞書を作成<br />

番号<br />

1<br />

2<br />

3<br />

LZ78辞書<br />

文字列<br />

‘AB’<br />

‘BU’<br />

‘UR’<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

圧縮前<br />

A B U R A K A T A B U R A<br />

圧縮後<br />

1 3 A K A T A 2 R A<br />

辞書を元にデータを圧縮<br />

72<br />

データベース物理設計<br />

圧縮前「13文字」あったのが、圧<br />

縮後に「10文字」になっている


DB2デザイン・ガイド<br />

表スペースの見積もり<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

73<br />

データベース物理設計<br />

� システム・カタログ表スペース<br />

� システム・カタログ表が使用する容量は、表スペースのタイプ(SMS or DMS)とエクステント・サイズによって<br />

異なる。<br />

� DMSの場合、各表オブジェクトについて最低 2つのエクステントが割り当てられる。この未使用のスペースを<br />

削減するために、カタログ表スペースをDMSで作成する場合は、エクステント・サイズ を小さくすることを(2 か<br />

ら 4 ページ) を検討する。<br />

� データベース作成時、デフォルトでは自動サイズ拡張が使用可能なDMS(ファイル)表スペースとして作成さ<br />

れる(初期サイズはDB2が自動決定)ため、表スペース容量が不足する前に自動的にサイズが拡張される。<br />

� ファイル・システムがいっぱいになると自動拡張が失敗するため、余裕をもって作成しておく。(通常、数百MB<br />

~1GB程度あれば問題なし。)<br />

� 自動ストレージ表スペースであるため、ALTER TABLESPACEによる拡張はできない。<br />

� ユーザー表スペース<br />

� 既に決まっているページ・サイズと平均行サイズから、1ページに格納できる行数を算出<br />

� 予想される行数を格納するために必要となるページ数を算出<br />

� ROUND DOWN(ページ・サイズ/(論理レコード長)) = 1ページあたりの行数<br />

� (レコード件数/1ページあたりの行数) * 安全率 = 必要ページ数<br />

– 安全率:オーバーヘッド分、PCTFREEの分や、同じ表スペース内でREORGする場合なども考慮<br />

� 一時表スペース<br />

� 一番大きく使用すると思われるケースで検討する<br />

� システム一時表スペース<br />

� JoinやSortを行うアプリケーションやREORG、LOADなどの運用次第で大きく変わる<br />

� SMS表スペースの使用が望ましい<br />

– DMSでは一時表の作成時に多くのオーバーヘッドがある<br />

– SMSではディスク・スペースを動的に割り当てるが、DMSでは事前に割り当てられてしまうため、領域<br />

を有効活用できない<br />

� ユーザー一時表スペース<br />

� 宣言済み一時表を使用する場合<br />

� デフォルトの ユーザー一時表スペースはないため、作成する必要がある<br />

� 一時表スペースの見積もりは最終的には事前に入念なテストを行って確認する


DB2デザイン・ガイド<br />

解説<br />

� DMS表スペース - 必要な最小ページ値<br />

表スペースの作成 コンテナー・タグ 1 ページ/コンテナー<br />

表スペース<br />

メタ データ<br />

表(オブジェクト)の作成<br />

表スペースのヘッダー<br />

スペース・マップ<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

オブジェクト表データ 1 エクステント<br />

エクステント・マップ<br />

データのエクステント<br />

コンテナーで最小限必要なスペース =<br />

(最初のオブジェクトを作成した時)<br />

EXTENTSIZE = 32 ページなら、<br />

1 エクステント<br />

1 エクステント<br />

3 エクステント<br />

1 エクステント<br />

1 エクステント<br />

5 エクステント<br />

74<br />

+ 1 ページ<br />

+ 1 ページ<br />

5*32+1=161ページがコンテナーに必要<br />

データベース物理設計<br />

� 表の再編成実行時に表スペースの名前を指定しない場合、再編成しようとする表を含む表スペースにその表の作業コピーを保管しま<br />

す。<br />

� 一時表スペースを使って表を再編成する場合、一時表スペースのページ・サイズは表のページ・サイズと一致しなければなりません。<br />

� 宣言済み一時表は、独自のユーザー一時表スペース・タイプの中にのみ作成されます。デフォルトのユーザー一時表スペースはありま<br />

せん。<br />

� 一時表スペースの必要なスペースの量は照会および戻される表のサイズや照会アプリケーション、REORG、LOADなどの運用に依存<br />

するため、正確に見積もることは難しいため、事前にテストで確認することが必要です。


DB2デザイン・ガイド<br />

自動保守用表スペースの見積もり(V8.2以降)<br />

� 自動保守用表スペース(SYSTOOLSPACE)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

75<br />

データベース物理設計<br />

� V8.2の新機能、データベースの自動保守(自動統計収集および再編成)を使用する場合に自<br />

動作成される表スペース<br />

� 自動統計収集および再編成の作業データを、SYSTOOLSPACE表スペース中の表に格納する<br />

� SYSTOOLS表スペース作成時、約700KB<br />

� 通常、SYSTOOLSPACEに必要な容量は、データベース中の表の数に比例し、1つの表に対し<br />

て約1KB として計算する


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

76<br />

データベース物理設計


DB2デザイン・ガイド<br />

ログ領域の見積もり<br />

� アクティブ・ログ領域の見積もり<br />

� 最低限必要なサイズ:(logprimary + logsecond) * (logfilsiz + 2 ) * 4096<br />

� 循環ロギングの場合<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

– 上記の式で求めた値に余裕を持たせたサイズを用意する<br />

� アーカイブ・ロギングの場合<br />

77<br />

データベース物理設計<br />

– アーカイブ処理の失敗によりログ・ファイルが再利用されない場合や、ロールフォワード時にロ<br />

グがリトリーブされる領域を考慮し、余裕を持たせる(上記の式で求めた値の2倍程度)<br />

� アクティブ・ログの二重化を行う場合、2倍の容量が必要。<br />

� アーカイブ・ログ領域の見積もり<br />

� 一日にアーカイブされるログ容量と保持期間を掛け合わせて必要な容量を算出する。更に、<br />

アーカイブ・ログの削除や退避が行われなかった事態に備え、余裕を持たせて用意する。<br />

� 複数パスへのアーカイブを行う場合(LOGARCHMETH1とLOGARCHMETH2を使用)、2倍の容<br />

量が必要。(FAILARCHPATHを使用する場合は、その分の容量も必要。)


DB2デザイン・ガイド<br />

参考:ログ・アーカイブ機能(V8.2以降)<br />

� 内容 � アクティブ・ログのアーカイブ機能をDB2の標準機能として提供する<br />

� V8.1までのログのUSER EXITの機能の代替機能を提供する<br />

� アーカイブ方法を2つまで指定することができる<br />

� 最大で2つの別個のロケーションにアーカイブ・ログ・ファイルを保管できる<br />

� アーカイブが失敗した場合の代替ディレクトリーを指定できる<br />

� アーカイブ先が使用可能になると、ログ・ファイルは自動的に移動される<br />

� 方法 � 次のデータベース構成パラメーターにアーカイブ方法を指定する<br />

� LOGARCHMETH1<br />

� LOGARCHMETH2<br />

� 次のデータベース構成パラメーターにアーカイブ・ログ・ファイル用の代替ディレクトリーを指定する<br />

� FAILARCHPATH<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

データベース アクティブ・<br />

ログ<br />

ミラー・ログ<br />

アーカイブに失敗した場合<br />

78<br />

LOGARCHMETH1<br />

LOGARCHMETH2<br />

FAILARCHPATH<br />

DISK<br />

TSM<br />

VENDOR<br />

db2tapemgr<br />

コマンド<br />

データベース物理設計<br />

テープ


DB2デザイン・ガイド<br />

製品インストール・ディレクトリーの見積もり<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

79<br />

データベース物理設計<br />

� DB2のインストールに必要なディスク容量は、選択するインストールのタイプ、<br />

使用するファイル・システムのタイプに応じて異なる。<br />

� DB2セットアップ・ウィザードを使用すると、事前に見積もり可能。<br />

� インストール・タイプ(標準、コンパクト、カスタム)ごとに選択されるコンポーネントに基づいて、<br />

動的にサイズの見積もりを行う。


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

80<br />

データベース物理設計


DB2デザイン・ガイド<br />

③インスタンスの構成とデータベースの分割<br />

�インスタンスとデータベース<br />

�インスタンス構成の考慮点<br />

�サポートされるクライアント&サーバー構成<br />

�データベース作成の考慮点<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

81<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

82<br />

データベース物理設計


DB2デザイン・ガイド<br />

インスタンスとデータベース<br />

�インスタンス<br />

� DB2のオブジェクトの最も大きな単位<br />

� 論理的なデータベース・マネージャー環境<br />

� Unix環境<br />

– db2syscプロセスを中心としたプロセ<br />

ス群<br />

� Windows環境<br />

– 「DB2 - インスタンス名」 サービス<br />

– 「DB2 – DB2コピー名 – インスタンス<br />

名<br />

– ノード番号」サービス<br />

� 全てのオブジェクトが含まれる<br />

� DB2の起動/停止の単位<br />

� db2startコマンド/db2stopコマンド<br />

� 1マシンに複数インスタンスの作成が可能<br />

� db2icrtコマンドで作成<br />

�データベース<br />

� 有機的にまとめられた表スペース、表や索引<br />

の集まり<br />

� 一つのインスタンスに複数のデータベースを<br />

作成することが可能<br />

� create database コマンド<br />

� 接続(CONNECT)の対象となる<br />

� バックアップ・リストアの最大単位<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

83<br />

インスタンス<br />

データベース<br />

表スペース(SMS)<br />

表<br />

LOB<br />

索引<br />

表スペース(DMS)<br />

索引<br />

データベース物理設計<br />

表スペース(DMS)<br />

表<br />

表スペース(DMS)<br />

LOB


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

84<br />

データベース物理設計<br />

� インスタンス<br />

� 一つのデータベース・マネージャー構成ファイルを使用して稼動する、データベース・マネージャー環境のことです。<br />

� インスタンスは、DB2を構成するオブジェクト群の中で、最も大きな単位です。<br />

� db2startで起動し、db2stopで停止するのは、このインスタンスです。(管理サーバーの場合、db2admin start/db2admin stop)<br />

� データベースのエンジンともいえる、db2syscプロセスが立ち上がる単位ということもできます。<br />

� インスタンスは、一台のマシン上に複数持たせることができます。しかし、一つのアプリケーション環境から扱えるのは、一つ<br />

のインスタンス環境のみです。<br />

� db2startで起動されるインスタンス、およびアプリケーション環境で使用するインスタンスは、以下で決まります。<br />

� 環境変数 DB2INSTANCE に指定されているインスタンスが現行インスタンスとして使用されます。<br />

� PC環境では、環境変数「DB2INSTANCE」が設定されていない場合があります。<br />

� その場合、レジストリー変数「DB2INSTDEF」に設定されているインスタンス(デフォルトではDB2)が現行インスタンスとして使用さ<br />

れます。<br />

� DB2INSTDEFは、グローバル・レベルのレジストリー変数です。<br />

� これを変更するには以下を実行します。<br />

� db2set db2instdef=新インスタンス名 -g<br />

� データベース<br />

� DB2のデータベースには、様々なオブジェクトが含まれますが、ユーザーから見るときには、表や索引の集合体と言えるでしょ<br />

う。<br />

� 一つのインスタンス上に、複数のデータベースを作成することが可能です。<br />

� データベースは、接続・運用上および許可の単位です。<br />

� connectコマンドで接続するデータベースの名前を省略した場合、デフォルトでは、DB2DBDFTレジストリー変数に設定されて<br />

いるデータベース名が使用されます。<br />

� connect toでデータベースに最初に接続する時には、ログ・ファイルやバッファープールのアロケーションなど初期作業が行な<br />

われますので、それ以降の接続に比べて時間がかかります。<br />

� 最初の接続に時間をかけたくない場合には、db2start後にactivate databaseコマンドで初期作業を行なわせて下さい。<br />

� データベースは、バックアップ取得や、CONNECT特権の単位でもあります。


DB2デザイン・ガイド<br />

インスタンス構成の考慮点<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

85<br />

データベース物理設計<br />

�インスタンスの分け方<br />

� アプリケーション構成<br />

� 開発環境用と本番環境用<br />

� 運用管理面<br />

� 管理者の権限(SYSADM、SYSCTRL、SYSMAINT)を持つユーザーを分けたいとき<br />

� インスタンスごとにデータベース・マネージャーの構成を最適化する<br />

� 起動/停止のタイミングを分けたい(サービス時間、運用時間の違い)<br />

� 可用性<br />

� エンジン動作部分に影響を与える様なトラブル発生時に、影響範囲を小さくしたい<br />

�その他考慮点<br />

� UNIX環境:作成するインスタンスのビット単位(64ビット/32ビット)指定<br />

� 同居させる他のプロダクトの要件にも注意<br />

V9.5<br />

� V9.5環境では、ほとんどの(下記3つ以外の)プラットフォームにおいて64ビット・イン<br />

スタンスのみサポート<br />

– 32ビット・インスタンスがサポートされるのは、以下のプラットフォームのみ<br />

� x86 用 Linux オペレーティング・システム<br />

� x86 用 Windows オペレーティング・システム<br />

� x64 用 Windows オペレーティング・システム (Windows x86 オペレーティング・システム<br />

用インストール・イメージを使用)<br />

� 異なるバージョン間でのクライアント&サーバー接続<br />

� インスタンスホームの容量


DB2デザイン・ガイド<br />

V9.5<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

86<br />

データベース物理設計<br />

� インスタンスを分ける例としては以下の様な場合があります。<br />

� 開発用と本番用<br />

� 管理者の権限(SYSADM、SYSCTRL、SYSMAINT)を持つユーザーを分けたいとき<br />

� DBMSのエンジン動作をコントロールしたい場合<br />

� 起動/停止のタイミングを分けたい(運用、サービス時間)<br />

� 可用性の観点で、エンジン動作部分に影響を与える様なトラブル発生時に、その影響をできるだけ受けさせ<br />

たくない<br />

� 1つのマシンに複数インスタンスを作成することが可能ですが、インスタンスごと<br />

に、追加のシステム・リソース (仮想メモリーとディスク・スペース) が必要になりま<br />

す。また、追加インスタンスを管理するためにさらに管理が必要になります。<br />

� インスタンス作成の際は、ビット単位(64ビット/32ビット)を指定しますが、同じマ<br />

シン上で稼動する他のソフトウェアの稼動要件も考慮する必要があります。(例え<br />

ば、32ビットカーネルしか対応していないS/Wなど)<br />

� V9.5では、ACSのモジュールが追加されたため、V9.1よりもインスタンス・ホーム・<br />

ディレクトリに必要とされる容量が大きくなっています。参考までに、AIX環境でテ<br />

ストしたところ、V9.1で約15MBだったものが、V9.5GAで、約210MBに増えていまし<br />

た。


DB2デザイン・ガイド<br />

V9.5<br />

構成が可能なクライアント・サーバー 一覧<br />

※DB2 UDB V7との構成は、延長サポート契約がある場合のみを対象としております。<br />

DB2<br />

Clients<br />

V7 32-bit<br />

Server<br />

UNIX,<br />

Windows,<br />

Linux<br />

V7 64-bit<br />

Server<br />

UNIX<br />

V8 32-bit<br />

Server<br />

UNIX,<br />

Windows,<br />

Linux<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

V8 64-bit<br />

Server<br />

UNIX,<br />

Windows,<br />

Linux<br />

87<br />

V9.1 32-bit<br />

Server<br />

Windows,<br />

Linux<br />

V7 32-bit Y N Y(6) Y(2,5,8) Y②③④<br />

Windowsの<br />

み<br />

V9.1 64-bit<br />

Server<br />

UNIX,<br />

Windows,<br />

Linux<br />

Y②③④<br />

Windowsの<br />

み<br />

V7 64-bit N Y N Y(4,5) N Y②③<br />

Windows以<br />

外<br />

V9.5 32-bit<br />

Server<br />

Windows,<br />

Linux<br />

N N<br />

N N<br />

V8 32-bit Y(1,7) N Y Y Y① Y① Y(I) Y(I)<br />

V8 64-bit N Y(1,7) Y Y Y① Y① Y(I) Y(I)<br />

V9.1 32-bit N N Y① Y① Y Y Y(II) Y(II)<br />

V9.1 64-bit N N Y① Y① Y Y Y(II) Y(II)<br />

V9.5 32-bit N N Y(I) Y(I) Y(II) Y(II) Y Y<br />

V9.5 64-bit N N Y(I) Y(I) Y(II) Y(II) Y Y<br />

データベース物理設計<br />

V9.5 64-bit<br />

Server<br />

UNIX,<br />

Windows,<br />

Linux


DB2デザイン・ガイド<br />

V9.5<br />

解説: 構成が可能なクライアント・サーバー 一覧<br />

※DB2 UDB V7との構成は、延長サポート契約がある場合のみを対象としております。<br />

� 注(V8マニュアルより抜粋):<br />

1. DB2 V7サーバーはDRDA AS(Application Server)として構成されている必要がある<br />

2. Windows版 DB2 V8 64bitのみが対象<br />

3. TCP/IPのみ対象(SNAは対象外)<br />

4. Windows版以外のDB2 V8 64bitサーバーを対象<br />

5. SQLのみを対象(ユーティリティー, APIは対象外)<br />

6. AT NODEを使用した、DB2ユーティリティーは対象外<br />

7. DB2 V8クライアントとDB2 V7サーバーを併用している場合には、V7サーバーはFixPak8以降を推奨<br />

8. V7 32bitクライアントとUNIX上のV8 64bitサーバーへの接続を確立したい場合はゲートウェイ(32bit)を使用する<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

88<br />

データベース物理設計<br />

� 詳細は、下記のDB2 UDBオンラインマニュアル[サポートされているクライアント構成とサポートされていないクライアント構成]<br />

をご参照ください。<br />

� http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/start/r0009731.<br />

htm<br />

� 注(V9.1マニュアルより抜粋):<br />

① DB2 V8の機能のみ使用可能<br />

② SQLのみ対象(管理ツール, ユーティリティー, API対象外)<br />

③ V7クライアントとV8サーバーへのアクセスと同じ制限事項<br />

④ Windows以外の他のプラットフォーム上のV9サーバーへの接続を確立したい場合はゲートウェイ(32bit)を使用する<br />

� 詳細は、下記のDB2オンラインマニュアルをご参照ください。<br />

� [クライアントとサーバーのバージョンのサポートされている組み合わせ]<br />

� http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.uprun.doc/doc/r000<br />

9731.htm<br />

� [DB2クライアントの移行に関する重要事項]<br />

� http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.uprun.doc/doc/c002<br />

2579.htm


DB2デザイン・ガイド<br />

V9.5<br />

解説: 構成が可能なクライアント・サーバー 一覧<br />

� 注(V9.5マニュアルより抜粋):<br />

I. DB2 V8の機能のみ使用可能<br />

II. DB2 V9.1の機能のみ使用可能<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

89<br />

データベース物理設計<br />

� 詳細は、下記のDB2オンラインマニュアルをご参照ください。<br />

� [クライアントとサーバーのバージョンのサポートされている組み合わせ]<br />

� http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.qb.clien<br />

t.doc/doc/r0009731.html<br />

� [クライアントのマイグレーションに関する重要事項]<br />

� http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.qb.migration.doc/<br />

doc/c0022579.html


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

90<br />

データベース物理設計


DB2デザイン・ガイド<br />

データベース作成の考慮点<br />

�データベースの分割の目安<br />

� アプリケーション構成(業務内容)<br />

� 同時に処理する要件があるか<br />

� パフォーマンスの観点から一つにすることも検討<br />

� 分割されていると2フェーズ・コミット必要<br />

� JOIN不可(連合DBを使用の場合は可能)<br />

� 運用管理(バックアップ/リストア)の面から検討<br />

� 処理時間<br />

� 運用時間帯<br />

� 可用性<br />

� テスト環境ではフェーズやチーム単位で分割<br />

� コード・セット別<br />

� Unicodeデータベース<br />

V9.5<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

91<br />

データベース物理設計<br />

– V9 XMLデータタイプを使用する場合、UTF-8のデータベースでなければならない<br />

– V9.5のデフォルトでは、UTF-8のデータベースとして作成される。<br />

� 分割する場合、レプリケーション機能の検討も必要か<br />

� デフォルトのページ・サイズはどのサイズにするか<br />

� 自動ストレージ・データベースとして作成するか(V8.2.2以降)<br />

� V9でのデフォルトでは、自動ストレージ・データベースとして作成される<br />

�作成時のCOLLATE USING句指定<br />

� 日本語環境でデータを五十音順に照合したい場合はIDENTITYを指定<br />

� デフォルトはSYSTEM(辞書順)<br />

� 作成後は変更不可


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

92<br />

データベース物理設計<br />

� データベースの分け方<br />

� まずアプリケーションの構成から決定します。業務が全く異なる場合は、別データベースにするべきですが、それぞれに属す<br />

る表同士に何らかの関連があって同時に処理する必要がある場合は、パフォーマンスの観点からも同じデータベースにして<br />

しまうことも検討します。<br />

� バックアップ/リストアといった運用管理の面からも検討します。<br />

� 複数に分けた場合、1つがダウンしても別のデータベースは使用可能ですので、可用性という点では優位です。<br />

� このほかに、データベースを分ける例としては以下の様な場合があります。<br />

� 開発用と本番用<br />

� 共用する表を持たない異なるシステムの場合(表をJOINしたい場合は通常分けない)<br />

� Unicodeデータベースなど、コードセットの異なるDBが必要・・・ など<br />

� CHAR、VARCHAR、LONG VARCHARの照合(ソート、比較など)においては、値の重み付けを考<br />

慮する必要があります。<br />

� 重み付けは、CREATE DATABASEのCOLLATE USING句で指定する事ができます。<br />

� SYSTEM(デフォルト):現行のテリトリーに基づいた照合順序 (辞書順)<br />

� 例:a(X'61')、A(X'41')、b(X'62')、B(X'42')、c(X'63')、C(X'43')、・・・<br />

� COMPATIBIRITY:DB2 V2の照合順序に同じ (電話帳順)<br />

� 例:A、a、B、b、C、c・・・<br />

� IDENTITY:バイト単位で比較 (文字コード順)<br />

� 例:A、B、C、・・・、a、b、c・・・<br />

� 日本語などのダブルバイトの文字については、1バイトずつに分割して照合が行われます。<br />

� SYSTEMの場合の日本語例:<br />

� ヂ(X'8361')、ア(X'8341')、ッ(X'8362')、ィ(X'8342')、ツ(X'8363')、イ(X'8343')、・・・<br />

� COMPATIBIRITYの場合の日本語例:<br />

� ア(X'8341')、ヂ(X'8361')、ィ(X'8342')、ッ(X'8362')イ(X'8343')、ツ(X'8363')、・・・<br />

� IDENTITYの場合の日本語例:<br />

� ァ(X'8340')、ア(X'8341')、ィ(X'8342')、イ(X'8343')、・・・、チ(X'8360')、ヂ(X'8361')、ッ(X'8362')、ツ(X'8363')、ヅ(X'8364')、・・・<br />

� 日本語環境では五十音順にデータを照合したい場合には、COLLATE USING句にIDENTITYを<br />

指定してデータベースを作成する事をお薦めします。<br />

� COLLATE USINGに指定した値は、一旦データベースを作成した後に変更する事はできません<br />

ので注意して下さい。<br />

� GRAPHICタイプのデータについては、COLLATE USING句の指定に関わらず、文字コード順に<br />

照合が行われます。


DB2デザイン・ガイド<br />

④表の分類と表スペースの構成<br />

�表スペースとは<br />

�表スペースの種類と選択<br />

� DMS表スペースとSMS表スペース<br />

�複数表スペースの検討<br />

�一時表スペースの定義<br />

�検討すべき表スペース属性<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

93<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

94<br />

データベース物理設計


DB2デザイン・ガイド<br />

表スペースとは<br />

� 表スペース<br />

� 表のデータを格納するための論理的な領域媒体<br />

� 実際にデータを格納する物理的な媒体をコンテナーという<br />

� コンテナーの実体はファイルシステムのディレクトリ、ファイル、または論理ボリュームなどの<br />

ローデバイス<br />

� 一つの表スペースを1つ以上のコンテナーで構成<br />

� データベース内に作成される表スペース<br />

� システム・カタログ表スペース,システム/ユーザー一時表スペース,ユーザーデータ用表ス<br />

ペース<br />

� 表スペースはバックアップの最小単位<br />

データベース<br />

表スペース<br />

コンテナー<br />

0<br />

コンテナー<br />

1<br />

コンテナー<br />

2<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

表<br />

表スペース<br />

バッファープール バッファープール<br />

索引 表<br />

コンテナー<br />

3 コンテナー<br />

4<br />

95<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

96<br />

データベース物理設計<br />

� 表スペースは、表のデータを記憶するための論理的な領域媒体です。<br />

� 実際に表のデータが物理的に格納されるのは、表スペースに紐付けされたコンテナーになります。<br />

� コンテナーは、表スペースのタイプにより、ディレクトリーやファイル、デバイスといった形態を取ります。<br />

� 一つの表スペースに複数のコンテナーを割り当てることができます。<br />

� データはコンテナー間で平均的に割り振られます。<br />

� 一つのコンテナーは、一つの表スペースにしか属することはできません。<br />

� 表スペースへのデータの書き出しは、エクステントと呼ばれる割り当て単位に行われます。(デフォル<br />

トは32ページ) (詳細は後述)<br />

� create databaseを実行すると、デフォルトでは3つの表スペースが自動的に生成されます。<br />

� SYSCATSPACE:システム・カタログ表スペース<br />

� システム・カタログ表、およびその索引が入っている表スペースです。<br />

� データベース作成時に作られ、一旦作られた後は、変更や削除することができません。<br />

� TEMPSPACE1:システム一時表スペース<br />

� JoinやSort時に一時的にデータが入る表スペースです。<br />

� USERSPACE1:ユーザー・データ用表スペース<br />

� ユーザーのデータや索引が入れられる表スペースです。<br />

� 表スペースを指定せずにcreate tableを実行すると、他のユーザー・データ用表スペースが無い場合は、デフォルトで、この表スペースが使わ<br />

れます。<br />

� 既に他のユーザー・データ用表スペースが作られている場合には、最初に作られた表スペースが使われます。<br />

� 表スペース単位でバックアップ/リストアを行うことも可能です。<br />

� ロールフォワード回復不可能な場合(循環式ロギング)は、データベース単位のバックアップのみ可能<br />

です。<br />

� 循環ロギングの設定<br />

� LOGRETAIN(DB構成パラメーター)=NO<br />

� USEREXIT(DB構成パラメーター)= NO<br />

� LOGARCHMETH1/LOGARCHMETH2 (DB構成パラメーター)=OFF<br />

� ロールフォワード回復可能な場合(アーカイブ式ロギング)は、表スペース単位のバックアップ/リストア<br />

が可能です。<br />

� アーカイブ・ロギングの設定<br />

� LOGRETAIN=ON またはRECOVERY(V6.1より)<br />

� USEREXIT=YES<br />

� LOGARCHMETH1/LOGARCHMETH2でアーカイブ方法を指定


DB2デザイン・ガイド<br />

表スペースの種類と選択<br />

� 適切な表スペースを選択する<br />

� ファイル管理のタイプによる表スペースの種別<br />

� SMS:オペレーティング・システムのファイル・システムによるファイル管理<br />

� DMS:データベース・マネージャーによるファイル管理<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

97<br />

データベース物理設計<br />

� 保管データのタイプによる表スペースの種別<br />

� LARGE(V9以降のDMS表スペースのデフォルト)<br />

– V8以前:LOB、LONGデータ、索引用<br />

– V9以降:通常のデータ、LOB、LONGデータ、索引用<br />

� REGULAR(V9以降のSMS表スペースのデフォルト、V8以前のDMS/SMS表スペースのデフォ<br />

ルト) – 通常のデータ、索引用<br />

� TEMPORARY<br />

– 一時表用<br />

� システム一時表スペース<br />

� ユーザー一時表スペース<br />

� 表スペースのページ・サイズ<br />

� 4KB,8KB,16KB,32KB<br />

� 4KB以外の表スペース作成の場合、事前に同じページ・サイズのバッファープールと一時表ス<br />

ペースを作成する<br />

– V8.2.2以降は、データベース作成時にデフォルトのページ・サイズを指定することができる。<br />

(4KB以外のページ・サイズを使用する場合でも、ページ・サイズを1種類に統一することがで<br />

きる。)


DB2デザイン・ガイド<br />

解説<br />

� ファイル管理のタイプにより、以下のいずれかのタイプを指定します。 (それぞれの詳細は後述)<br />

� SMS(System Managed Storage)<br />

� 各オペレーティング・システムのファイル・システムがファイルを管理します。<br />

� コンテナーとしては、ディレクトリーを設定します。<br />

� DMS(Database Managed Storage)<br />

� データベース・マネージャーがファイルを管理します。<br />

� コンテナーとしては、ファイル、またはデバイスを設定します。<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

98<br />

データベース物理設計<br />

� 保管データのタイプにより、以下のいずれかのタイプを指定します。<br />

� LARGE表スペース<br />

� すべての永続データを保管します。このタイプは、データベース管理スペース (DMS) 表スペースでのみ使用できます。また、タイプを指定しな<br />

い場合の、DMS 表スペースのデフォルト・タイプでもあります。 LARGE 表スペースに表を配置すると、以下のようになります。<br />

– REGULAR 表スペースに配置する表よりもサイズを大きくできます。<br />

– 表のデータ・ページ当たり、255 を超える行数をサポートできるので、データ・ページのスペース使用効率が向上します。<br />

– REGULAR 表スペースに配置した表に索引を定義する場合に比べ、索引の 1 つの行項目当たり 2 バイトが追加で必要になります。<br />

� REGULAR表スペース<br />

� すべての永続データを保管します。このタイプは、DMS 表スペースと SMS 表スペースのいずれも指定可能です(SMS 表スペースでのデフォ<br />

ルト・タイプです)。<br />

� TEMPORARY表スペース<br />

� システム一時表スペース<br />

– JoinやSortで一時的にデータが入る表スペースです。<br />

– システム一時表スペースは、データベースに最低一つは必要です。一つしかない時には、削除しようとするとエラーとなります。<br />

– 4KB以外のページを持つ表スペースがある場合、そのページに合せた一時表スペースも作っておいて下さい。<br />

� ユーザー一時表スペース<br />

– 省略時にはデータベース作成の時点で作成されません。Global Temporary Tableが使用する表スペースです。<br />

� 4KB以外のページを持つ表スペース(表)がある場合、そのページに合せた一時表スペースも作っておいて下さい。<br />

� V8.2.2からは、データベース作成時にデフォルトのページ・サイズを指定できるようになりました。これにより、4KB以外のペー<br />

ジ・サイズを使用する場合でも、データベース内の表スペース、バッファープールのページ・サイズを統一することができます。<br />

� 参考:Global Temporary Table(ユーザー定義一時表)<br />

� アプリケーションは、データベースに接続している間、一時的な表を作成して使用できます。<br />

� 一時表を定義するには、DECLARE GLOBAL TEMPORARY TABLE ステートメントを使用します。<br />

� ユーザー定義一時表が保持されるのは、 アプリケーションがデータベースから切断されるまでの間だけです。 アプリケーショ<br />

ンが終了したりデータベースから切断されたりすると、 表の中のデータはすべて削除され、表は暗黙的に除去されます。<br />

� この表の記述は、システム・カタログには現れません。 したがって、この表を他のアプリケーションのために保持したり、 他の<br />

アプリケーションと共用したりすることはできません。<br />

� ユーザー定義一時表は、ロックとログ記録を回避するので、一時表を活用するアプリケーションは大幅なパフォーマンス改善<br />

を見込めます。


DB2デザイン・ガイド<br />

DMS表スペースとSMS表スペース<br />

�パフォーマンス<br />

�DMSローデバイス>DMSファイル>SMS<br />

�表用、索引用、長形式のデータ用の表スペースを別々に作成できる<br />

�Solaris環境では、パフォーマンス重視のデータにはロー・デバイスを含む<br />

DMS 表スペースを使用することを推奨<br />

�管理の容易さ<br />

�SMS>DMS<br />

�SMSは、同じファイルシステムに複数表スペースを作成でき、表スペースご<br />

とに空きスペースの監視を行う必要がない<br />

�領域のアロケーション<br />

�SMS: エクステント単位(V8.2以降)<br />

ページ単位(V8.1まで)<br />

�DMS: エクステント単位<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

99<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

100<br />

データベース物理設計<br />

� 3つの表スペースを比較した場合、通常パフォーマンスは以下のようになります。<br />

� DMSローデバイス>DMSファイル>SMS<br />

� ローデバイスとファイルDMSの差はそれほど大きくありませんが、DMSとSMSではパフォーマンスに大<br />

きな差が出る場合があります。<br />

� Solaris(TM) では、パフォーマンス重視のワークロード用にはロー・デバイスを含む DMS 表スペース<br />

を使用することが強く勧められています。<br />

� DMSはSMSに比べて、表用、索引用、長形式のデータ用の表スペースを別々に作成できるため、そ<br />

れぞれのディスクI/Oを分散させることが可能です。これによってディスクI/Oを効率化し、パフォーマ<br />

ンスを向上することが可能です。<br />

� DMSでは、データ挿入時にエクステント単位でデータが書き込まれます。また、そのエクステントは、<br />

既に容量を確保して作成されたDMSファイルまたはローデバイスの中に書き込みます。この時、DMS<br />

ファイルやローデバイス自身の大きさは変わりません。<br />

� SMSでは、表のスペースは要求時に割り振られますので、DMSに比べて特に大量データの挿入に関<br />

してパフォーマンスが劣ります。一度に割り振られるスペースの量は、multipage_alloc データベース構<br />

成パラメーターの設定によって左右されます。この構成パラメーターが YES に設定されている場合、<br />

スペースが必要なときにはエクステント全体 (通常は複数のページで構成される) が割り振られます<br />

(マルチページ・ファイル割り振り)。それ以外の場合は、一度に 1 ページのスペースが割り振られま<br />

す。 V8.2以降では、マルチページ・ファイル割り振りはデフォルトで使用可能です。V8.2 より前は、構<br />

成パラメーターのデフォルト設定が NO であったため、一度に 1 ページしか割り振ることができません<br />

でした。このデフォルトは、マルチページ・ファイル割り振りを使用できるようにする db2empfa ツール<br />

を使用して変更できました。 db2empfa を実行すると、multipage_alloc データベース構成パラメーター<br />

は Yes に設定されます。


DB2デザイン・ガイド<br />

参考:エクステント<br />

� エクステント<br />

� 表スペースにおけるコンテナ内の領域の割り振り単位(ページ)<br />

� DMS、V8.2以降のSMSは、一度にエクステント全体をアロケートし、その後でエクステント内のページを使用<br />

� V8.1までのSMSは、エクステント・サイズの値になるまで一度に1ページずつアロケートする<br />

� データはラウンド・ロビン方式でコンテナに書き込む<br />

� DMSのコンテナーで最小限必要なスペース (最初のオブジェクトを作成した時) = 5エクステント + 1ページ<br />

� エクステント・サイズは、表スペース作成時に指定(デフォルトは32ページ)<br />

� 多数の小さい表からなる表スペースは、サイズを減らすことも検討<br />

� 大量の結果行を返す照会を行う表や急激に拡張される表からなる表スペースは、サイズを増やすことも検討<br />

� 作成後は変更が出来ない<br />

コンテナ<br />

0 2<br />

エクステント<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

コンテナ エクステント ページ<br />

0<br />

表スペース<br />

コンテナ1<br />

1 3<br />

A<br />

4K<br />

Extent = 32ページ<br />

(デフォルト)<br />

101<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

102<br />

データベース物理設計


DB2デザイン・ガイド<br />

SMS表スペース<br />

�SMS(System Managed Storage)表スペース<br />

�オペレーティング・システムのファイル・システム・マネージャーが管理<br />

�表データと索引、Longデータは全て同じ表スペースを共有<br />

�管理が容易<br />

�コンテナーはディレクトリー<br />

�ファイルは動的に拡張し、サイズの上限は以下によって決まる<br />

�コンテナーの数<br />

�ファイル・システム/ドライブ/ファイルのOSの限界サイズ<br />

�コンテナーは動的に追加不可<br />

�ファイル・システム/ドライブのサイズは増加可能<br />

�再定義は表スペース復元時に可能(表スペースのリダイレクション)<br />

�各コンテナーサイズは同じ大きさに<br />

�一時表スペースに推奨<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

103<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

104<br />

データベース物理設計<br />

� SMSの特徴<br />

� SMSでは、表スペースはファイルシステムのディレクトリに相当し、表や索引はそれぞれ別々<br />

のファイルになります。SMS表スペース(ディレクトリ)を作成したファイルシステムが許す限り、<br />

表に対してデータを追加することができます。つまり、表スペースの大きさはファイルシステム<br />

の大きさに依存します。<br />

� SMSでは表や索引およびLOBやLONG VARCHARなどの長形式のデータを含むロング形式の<br />

データを全て同じ表スペースに格納する必要があります。<br />

� 複数のディスクにIOを分散させる為に、1つの表スペースに対してコンテナーを複数定義する<br />

ことがSMSでも可能ですが、コンテナーの追加や削除を行うことはできません。表スペースを<br />

作成するときのコンテナー定義を変更する為には、一度削除して再作成する必要があります。<br />

� 複数コンテナーによってSMS表スペースを作成した場合、どれかのファイルシステムが一杯に<br />

なると表スペースはそれ以上のデータを追加することができなくなります。


DB2デザイン・ガイド<br />

DMS表スペース<br />

� DMS(Database Managed Storage)表スペース<br />

�データベース・マネージャーが記憶スペースを管理<br />

�作成時にスペースを割り当て<br />

�コンテナーはファイル、デバイス<br />

�ファイルの操作に対してはファイル・システムI/Oを使用<br />

�ロー・デバイスの操作に対しては直接I/Oを使用<br />

�柔軟なデータ配置<br />

�表用、索引用、および長形式のデータ用の表スペースを別々に作成する<br />

ことが可能<br />

�ディスクのIOを複数の物理ディスクに分散させることが可能<br />

�コンテナの追加/削除/拡張/縮小が可能<br />

�データは自動的に再バランス(オプションにより再バランスさせないことも<br />

可)<br />

�高パフォーマンス<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

105<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

106<br />

データベース物理設計<br />

� DMSの特徴<br />

�DMSでは、表スペースは大きな1つのファイルまたはローデバイスに相当します。中をど<br />

のように使われているのかはOSからは確認できません。表スペースを作成する際に、あら<br />

かじめ必要な大きさを定義する必要があります。DMSではさらに2つのタイプがあり、1つは<br />

DMSファイルともう一つはローデバイスです。<br />

�DMSファイルの場合は、ファイルシステム上に1つの大きなファイルが作成されますが、<br />

ローデバイスの場合はファイルシステムを経由せずにDB2が直接IOを行います。<br />

�DMSでは、表用、索引用、および長形式のデータ用の表スペースを別々に作成すること<br />

が可能です。それによって、ディスクのIOを複数の物理ディスクに分散させることが可能に<br />

なります。<br />

�DMSでも複数のコンテナーを1つの表スペースに対して定義でき、さらに動的に追加する<br />

ことが可能です。表スペースを作成後にコンテナーの大きさを変更することもでき、DB2<br />

UDB V8以降では小さくすることも可能です。<br />

�複数コンテナーからDMS表スペースを構成する場合、どれかのコンテナーが一杯になっ<br />

ても空いているコンテナーを探して書き込もうとします。全てのコンテナーが一杯になった場<br />

合、それ以上データの追加はできません。<br />

�V8.2.2からは、ファイルDMS表スペースの自動サイズ変更が可能です。


DB2デザイン・ガイド<br />

複数表スペースの検討<br />

�表スペースの分割の指針<br />

� パフォーマンスを考慮し、バッファープールの割り当てを検討<br />

� I/Oの並列処理を考慮し、データの物理配置に合わせて表スペースを構成<br />

� バックアップの単位、LOADの並行処理等の運用面で検討<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

107<br />

データベース物理設計<br />

�表をグルーピングし、表スペースを分ける<br />

� 1.できる限りバッファプールに読み込むことが望ましい表<br />

� 頻繁に読み書きされるトランザクション系データ<br />

� 2.バッファプールには読み込む必要が無いデータ<br />

� アプリケーション活動の履歴的な、一度書いたらほとんど変更/参照されないデータ<br />

� 3.1と2の中間<br />

� 4.小さな表はある程度の単位で一つの表スペースにまとめる<br />

� 5.バックアップ取得の頻度で別の表スペースにする<br />

� 大量の更新がある表⇒頻繁なバックアップ取得必要<br />

� 変更が非常に少ない表⇒頻繁なバックアップ取得不要<br />

�LOADを複数同時に実行するには、別々の表スペースにする(特に<br />

V7)<br />

� V7では、LOAD実行中は表スペースをQuiesce(静止)状態にするため、該当の表のみ<br />

ならず、同一表スペース上の他の表にもアクセス不可


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

108<br />

データベース物理設計<br />

� 典型的な分け方は以下のようになります。<br />

� 1.頻繁に読み書きされるトランザクション系データ<br />

� 2.アプリケーション活動の履歴的な、一度書いたらほとんど変更されないデータ<br />

� 3.1と2の中間<br />

� 分類1の表は、アプリケーションのパフォーマンスに大きな影響を与えます。ディスク資源とメモリ資源を十分に割り当てる必<br />

要があります。<br />

� 分類2の表は、容量的には大きくなりますが、一度書いた情報をあまり読まないため、メモリ資源は低く抑えることができます。<br />

このタイプの表を全件検索するようなSQLが実行された場合、ディスクのアクセスが非常に多くなるので、パフォーマンスが常<br />

時必要な分類1の表とは異なる物理ディスクを割り当てることが理想的です。できればディスクへつながるSCSIやファイバー<br />

チャネルなどのインターフェースも別であることが理想的と言えます。<br />

� 分類3は、メモリ資源をそれなりに与える必要がありますが、優先順位では分類1より下になります。<br />

� 表スペースの分け方には、以下のようなケースもあります。<br />

� 頻繁に使用される表、それもアクセスされるデータがほぼ決まっている場合には、大き目のバッファープールを持った表スペース<br />

を割り当てます。<br />

� このときには、データの表スペースと、索引の表スペースとを分けるのもひとつの方法です。(DMSの場合)<br />

� 大きな表に、ランダムにデータ・アクセスする場合には、小さいバッファープールを持った表スペースを割り当てます。<br />

� たまにしか使用されないアプリケーションからアクセスされる表には、小さいバッファープールを持った表スペースを割り当てます。<br />

このような表は、まとめて一つの表スペースに入れるのもひとつの方法です。<br />

� 参照制約,トリガーなど関連のある表同士は一つの表スペースにまとめます。<br />

� 小さな表は全て同じ表スペースにまとめます。<br />

� バックアップを取得する単位で表スペースを分けます。<br />

� 表スペース単位のバックアップは時間とリソースの節約になります。<br />

� 大量の変更がある表スペースは頻繁にバックアップを取り、変更が非常に少ない表スペースは時折バックアップを取ります。<br />

� V9以降は、データベースの再ビルド機能によりデータベース全体のバックアップを取得していなくても、表スペース・バック<br />

アップからデータベースを回復することができます。<br />

� V7では、LOAD実行時、表スペースをQuiesce(静止)状態にし、表スペースと表スペース内の<br />

表すべてに対してZ-LOCK(超排他)を取得するため、LOADの並行処理を可能にするには表ス<br />

ペースを分ける必要があります。(V8では、LOAD中も表に照会アクセスが可能であり、同じ表<br />

スペースの表については、アクセスが自由できます。)


DB2デザイン・ガイド<br />

一時表スペースの定義<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

109<br />

データベース物理設計<br />

�SMS or DMS<br />

� 一時表スペースとしてはSMSがお勧め(一般)<br />

� スペースの有効利用<br />

� 多くのクライアントアプリケーションからのソート要求を処理する場合、DMSよりパ<br />

フォーマンスが良い<br />

� 複数のコンテナーを作成して、パフォーマンス向上を計る<br />

� ファイルシステム上に作成するため、ファイルシステムの制限(ラージイネーブル、<br />

ulimit)に注意が必要<br />

� 一時表スペースとしてのDMS(例外)<br />

� Solarisでは一時表スペースを使用した再編成、ロードや索引作成時などの大量<br />

データの処理の場合パフォーマンス的に有利な場合がある(ケース・バイ・ケースな<br />

ので、ベンチマーク・テストが必要)<br />

� HAのテイクオーバー時間を短くために、fsckの必要になるファイルシステムの代わ<br />

りにローデバイスDMSを選択する場合がある<br />

�ページサイズ毎に1つ作成<br />

� 一時表スペースを使用した再編成の場合、表の存在する表スペースのページサイ<br />

ズと一時表スペースのページサイズは同じである必要がある。<br />

� ソート時に使用する一時表スペースは、格納できるページサイズを選択する。<br />

� 異なるページサイズを持つ別々の一時表は、SMSとして同じファイルシステムに配<br />

置するとスペースの有効利用ができる<br />

�後からでも比較的簡単に作成し直せる表スペース


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

110<br />

データベース物理設計<br />

� 一時表スペースに関しては、DMSよりSMSの方が勧められています。一時表スペースの使われ方は、ソートやジョインに必要なときに<br />

一時的にシステム一時表が作成され、データが格納されます。つまり、表の作成・削除が内部で行われています。表作成時にSMSでは<br />

ファイルが作成され、使用後に削除されます。DMSでは表スペース内の空き領域を管理する「スペースマップ」や、各表に対してディス<br />

クのどの部分を使用しているのかを管理する「エクステントマップ」をメンテナンスする必要があります。多くのユーザーがそれほど大き<br />

くないソートやジョイン用の一時表を作成する場合、この2つのマップのメンテナンス作業が競合し、パフォーマンスが劣化する場合が<br />

あるため、DMSは一時表スペースには勧められていません。<br />

� 例外として、Solarisで比較的大量なデータを一時表スペースに書き出すような場合、索引の作成やロードなどの場合、DMSの一時表の<br />

方がパフォーマンス的に有利な場合があります。<br />

� ただし、Solarisでは必ず一時表スペースはDMSにしなければならないという訳ではありません。使用方法によってはSMSが適当なケー<br />

スも存在します。<br />

� 一時表スペースでは通常の表スペースとは、データを書き込む単位が異なります。通常の表スペースにおいて、DMSではデータはエク<br />

ステント単位に書き込まれ、SMSではページ単位に書き込まれます。SMSではページ単位で書き込む上に、ファイルシステム上で、ファ<br />

イルのサイズを大きくしていく必要があり、これがDMSに比べてオーバーヘッドになり得ます。db2empfaというコマンドがあり、SMSでも<br />

エクステント単位でディスクに書き出すことが可能になるため、通常の表スペースでは効果がありますが、一時表スペースでは、必要な<br />

容量を一度にアロケーションするため、db2empfaの効果は期待できません。<br />

� データベース中に複数のページサイズが存在する場合、一時表スペースをページサイズ毎に作成されることをお勧めします。これは一<br />

時表スペースを使用した再編成を行う場合には必須です。再編成を行う表が含まれる表スペースのページサイズと同じページサイズを<br />

持つ一時表スペースがないと一時表スペースを使用した再編成は行えません。<br />

� 複数の一時表スペースを定義する場合、一時表スペースがSMSであれば、同じファイルシステムに配置することが可能になります。こ<br />

れによって使用率が低いディスクエリアを共有し、ディスクスペースの有効利用が可能になります。<br />

� もちろん、複数の再編成を並行で実行する必要があるような場合は、別々のディスクに配置する方が、ディスクI/Oが衝突せずパフォー<br />

マンス的に有利です。<br />

� 一時表スペースは比較的簡単に作成し直せる唯一の表スペースです。本番稼働を始めた後でも、データのExport/Loadなどの移行な<br />

どが必要ではないためです。ただし、一時表スペースを作成し直す場合、データベースに最低限1つの一時表スペースを残さないとエ<br />

ラーになります。新しい一時表スペースを作成後に、古い一時表スペースを削除すればこのエラーは回避できます。


DB2デザイン・ガイド<br />

参考:自動ストレージ表スペース<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

111<br />

データベース物理設計<br />

� V8.2.2以降、自動ストレージ・データベース、自動ストレージ表スペースが使用可能<br />

� V9以降、データベースを作成すると、デフォルトで自動ストレージ・データベースとして作成<br />

される。<br />

� 自動ストレージ・データベースには、自動ストレージ表スペースを作成可能(通常の自動ストレージでない表ス<br />

ペースを作成することも可能)<br />

� 自動ストレージ表スペース<br />

� 表スペースのコンテナーおよびスペース管理の特性(SMS/DMS)はDB2によって自動的に(以下のように)決<br />

定されるため、指定しなくてもよい。<br />

� REGULARまたはLARGE表スペースの場合、DMS(ファイル・コンテナー)<br />

� TEMPORARY表スペースの場合、SMS<br />

� データベース作成時に定義された(1つ以上の)ストレージ・パスを使用してDB2がコンテナーを自動的に割り<br />

振るため、表スペース作成時にコンテナーの明示的なリストを指定する必要が無い。<br />

� 自動ストレージ表スペースを作成するための指定(CREATE TABLESPACE実行時)<br />

� MANAGED BY AUTOMATIC STORAGE 文節を指定する、または、MANAGED BY 文節を指定しない<br />

自動ストレージ・データベース<br />

自動ストレージ表スペース<br />

データベース<br />

表スペースA 表スペースB 表スペースC<br />

ストレージ・パス(複数のディレクトリー)


DB2デザイン・ガイド<br />

V9.5<br />

参考:V9.5 新機能-自動ストレージ表スペースのサイズ縮小<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

112<br />

データベース物理設計<br />

�ユーザーによる自動ストレージ表スペースのサイズ縮小をサ<br />

ポートする。<br />

� ALTER TABLESPACE ステートメントをREDUCEオプションを指定して実行することで、<br />

表スペースの未使用エクステントを解放することができる。<br />

� 非自動ストレージ表スペースの場合と違い、コンテナー・パスや減少するページ数の指定<br />

は不要である。DB2が解放する領域を判断する。<br />

�メリット<br />

� 解放されたストレージ領域を、同一の自動ストレージ・パス上に存在する他の表スペー<br />

スで使用できる。<br />

� Space Map Pagesが残っていることにより最高水準点が下がらない場合でも、当機能を<br />

使用することで、SMPを削除し最高水準点を下げるため、未使用のストレージ領域を開<br />

放する<br />

�注意事項<br />

� 解放するのは、最高水準点より上の位置にあるフリー・ページで、使用したページで<br />

データが入っていない空き状態のページ(FPAGESとNPAGESの差分)を解放する機能<br />

ではない。


DB2デザイン・ガイド<br />

V9.5<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

113<br />

データベース物理設計<br />

参考:V9.5 新機能-コンテナーあたりの最大サイズを設定するレジストリ変数<br />

�DB2_SET_MAX_CONTAINER_SIZE レジストリ変数<br />

� AutoResize フィーチャーが有効になった自動ストレージ表スペース用のコンテ<br />

ナー 1つあたりの最大サイズを制限するレジストリ変数。<br />

� オペレーティング・システム: すべて<br />

� デフォルトは、-1(設定しない)。コンテナーのサイズに対する制限はなく、従来と<br />

同一の動作を行う。<br />

� 値を設定する場合は、64 MB より大きい正の整数とする。<br />

�注意事項<br />

� 表スペースの最大サイズを指定するレジストリー変数ではない。<br />

� レジストリ変数の設定値まで、コンテナー・サイズが達した場合には、新規にコン<br />

テナーが追加され、表スペースは拡張される。<br />

� このレジストリ変数を使用した場合には、V9.1までと異なり、V9.5からは 1つの<br />

自動ストレージ・パスあたりに、複数のコンテナーが作成される場合がある。


DB2デザイン・ガイド<br />

検討すべき表スペース属性<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

114<br />

データベース物理設計<br />

�ファイルDMS表スペースの自動サイズ変更(V8.2.2以降)<br />

�ダイレクトI/O<br />

�DROPPED TABLE RECOVERY属性<br />

�OVERHEAD/TRANSFERRATE


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

115<br />

データベース物理設計<br />

ファイルDMS表スペースの自動サイズ変更(V8.2.2以降)<br />

�DMSファイル・コンテナのサイズを自動的に拡張<br />

� コンテナがいっぱいになる(SQL0289N)前に、追加領域の必要に応じてコンテナを自動的に拡<br />

張する<br />

� ファイル・コンテナのみ使用可能<br />

� ロー・デバイス・コンテナの自動サイズ変更は不可能<br />

� 表スペースの最後のレンジにあるコンテナが拡張される<br />

� 自動サイズ変更によってリバランスは発生しない<br />

� それぞれのコンテナは同じ量だけ拡張される<br />

� 自動ストレージ・表スペースのDMS、自動ストレージ・表スペースでないDMSのいずれに対して<br />

も使用可能<br />

� 自動ストレージ・表スペースでない場合、ユーザーによるコンテナの拡張、削除が可能<br />

� 従来どおり、ALTER TABLESPACEステートメントを使用する<br />

� 区分化データベース環境でも使用可能<br />

�DMSなのでパフォーマンスがよく、自動的にサイズ拡張するので、<br />

SMS同様管理が容易になる<br />

�考慮点<br />

� 自動サイズ変更が行われる場合、表に対する挿入処理のパフォーマンスに影響が出る。<br />

� 社内実測値では、自動サイズ変更を設定していない環境と比較してimport処理に20%から25%程<br />

度の性能劣化が見られた。<br />

� 一時表スペースを使用しないREORGの際にも自動サイズ変更が行われる。<br />

� REORG完了後もサイズは拡張されたままで、縮小されない。


DB2デザイン・ガイド<br />

解説:<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

116<br />

データベース物理設計<br />

� 自動サイズ変更を使用可能な表スペースでは、既存のスペースがすべて使用され、さらに多く<br />

のスペースが要求される場合、DB2 は表スペースのサイズの増加を試みます。<br />

� DB2は、表スペース・マップ (表スペースのストレージ・レイアウト) の最新の範囲(レンジ)に存在<br />

するコンテナーのみを拡張しますので、リバランス処理は発生しません。<br />

� 最新の範囲(レンジ)に存在するコンテナーはそれぞれ同じ量だけ拡張されます。最新のレンジ<br />

に存在するコンテナーのひとつが、ファイル・システムの上限に達すると、自動サイズ変更が停<br />

止してしまうため、それぞれのコンテナーが使用するファイル・システムのサイズはそろえておく<br />

ことが重要です。


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

117<br />

データベース物理設計<br />

参考:ファイルDMS表スペースの自動サイズ変更の仕組み<br />

Stripes<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

Containers<br />

0 1 2<br />

0<br />

3<br />

6<br />

9<br />

11<br />

13<br />

1<br />

4<br />

7<br />

10<br />

12<br />

14<br />

2<br />

5<br />

8<br />

Range #0<br />

Range #1<br />

既存のエクステント(0~12)以上<br />

のスペースが必要になると、コン<br />

テナの最後のレンジにエクステン<br />

トが追加される<br />

Range<br />

Number<br />

Stripe Set #0<br />

Stripe<br />

Set<br />

Max<br />

Extent<br />

Start<br />

Stripe<br />

End<br />

Stripe<br />

Containers<br />

0 0 8 0 2 3 (0, 1, 2)<br />

1 0 14 3 5 2 (0, 1)<br />

レンジ[0]のみを持つコンテナ2は<br />

拡張されないため、リバランスは<br />

発生しない。


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

118<br />

データベース物理設計


DB2デザイン・ガイド<br />

自動サイズ変更の指定方法<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

119<br />

データベース物理設計<br />

� CREATE TABLESPACEステートメントおよびALTER TABLESPACEステートメントにて<br />

指定する。<br />

.-REGULAR----------.<br />

>>-CREATE--+-----------------------+----------------------------><br />

+-LARGE-----------------+<br />

| .-SYSTEM-. |<br />

'-+--------+--TEMPORARY-'<br />

'-USER---'<br />

>--TABLESPACE--tablespace-name----------------------------------><br />

(中略)<br />

.- MANAGED BY-- AUTOMATIC STORAGE-- | size-attributes |---------------------.<br />

>--+------------------------------------------------------------------------+--><br />

'-MANAGED BY--+-SYSTEM--| system-containers |--------------------------+-'<br />

'-DATABASE--| database-containers |-- | size-attributes |-'<br />

(中略)<br />

size-attributes:<br />

|--+---------------------+--+-----------------------------+-----><br />

'- AUTORESIZE--+- NO--+-' '- INITIALSIZE-- integer--+- K-+-'<br />

'- YES-' +- M-+<br />

'- G-'<br />

>--+------------------------------------+-----------------------><br />

'- INCREASESIZE-- integer--+- PERCENT-+-'<br />

'-+- K-+---'<br />

+- M-+<br />

'- G-'<br />

>--+-----------------------------+------------------------------|<br />

'- MAXSIZE--+- integer--+- K-+-+-'<br />

| +- M-+ |<br />

| '- G-' |<br />

'- NONE-------------'


DB2デザイン・ガイド<br />

自動サイズ変更の指定方法(続き)<br />

�AUTORESIZE { NO | YES}<br />

� 自動サイズ変更機能を使用するかどうかを指定する<br />

� 自動ストレージ表スペースの場合、デフォルトはYES<br />

� 自動ストレージ表スペースでない場合、デフォルトはNO<br />

�INITIALSIZE integer K | M | G<br />

� 自動ストレージ表スペースの、初期サイズを指定する<br />

� 自動ストレージ表スペースの場合のみ指定可能<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

120<br />

データベース物理設計<br />

�INCREASESIZE integer PERCENT または INCREASESIZE<br />

integer K | M | G<br />

� 自動サイズ変更される量を指定する (表スペース全体での増加量)<br />

� パーセントまたは、容量を指定<br />

� パーセントは、自動サイズ変更が行われる時点の表スペースサイズのパーセンテー<br />

ジを意味する<br />

� 指定されていない場合、DB2が自動的に判断する<br />

�MAXSIZE integer K | M | G または MAXSIZE NONE<br />

� 自動的に拡張できる最大サイズを指定する<br />

� 指定されていない場合、NONE


DB2デザイン・ガイド<br />

解説:<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

121<br />

データベース物理設計<br />

� AUTORESIZE<br />

� DMS 表スペースまたは自動ストレージ表スペースの自動サイズ変更機能を使用可能にするかどうかを指定<br />

します。 自動サイズ変更可能表スペースは、いっぱいになると、自動的にサイズが大きくなります。 デフォ<br />

ルトは、DMS 表スペースの場合は NO、自動ストレージ表スペースの場合は YES です。<br />

� NO<br />

� DMS 表スペースまたは自動ストレージ表スペースの自動サイズ変更機能が、使用不可であることを指<br />

定します。<br />

� YES<br />

� DMS 表スペースまたは自動ストレージ表スペースの自動サイズ変更機能が、使用可能であることを指<br />

定します。<br />

� INITIALSIZE integer K | M | G<br />

� 自動ストレージ表スペースの、データベース・パーティションあたりの初期サイズを指定します。 このオプショ<br />

ンは、自動ストレージ表スペースに対してのみ有効です。 整数値の後に K (K バイトの場合)、M (M バイトの<br />

場合)、または G (G バイトの場合) を指定する必要があります。 使用される実際の値は、指定されたものよ<br />

りも若干小さい場合があることにご注意ください。これは、データベース・マネージャーが表スペース内の各コ<br />

ンテナーのサイズの一貫性を維持しようとするためです。 表スペースが自動サイズ変更可能であるものの<br />

INITIALSIZE 文節が指定されていない場合には、データベース・マネージャーが適切な値を判別します。


DB2デザイン・ガイド<br />

解説:<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

122<br />

データベース物理設計<br />

� INCREASESIZE integer PERCENT または INCREASESIZE integer K | M | G<br />

� 自動サイズ変更可能な表スペースがいっぱいになって、スペースの要求がなされたとき、どれほどの量だけ<br />

自動的に大きくするかを、データベース・パーティションごとに指定します。 整数値の後に以下のものを指定<br />

しなければなりません。<br />

� PERCENT。スペースの要求がなされた時点の表スペース・サイズのパーセンテージとして量を指定し<br />

ます。 PERCENT を指定する場合、整数値は 0 と 100 の間でなければなりません (SQLSTATE<br />

42615)。 例えば、自動サイズ変更が可能な表スペースが100MBのサイズで定義されており、<br />

INCREASESIZEが20%と指定されている場合、20MB(100MBの20%), 24MB(120MBの20%),<br />

28.8MB(144MBの20%),…という風に拡張されていきます。<br />

� K (K バイト)、M (M バイト)、または G (G バイト)。バイト単位で量を指定します。<br />

� 使用される実際の値は、指定されたものよりも若干小さかったり大きかったりすることにご注意ください。これ<br />

は、データベース・マネージャーが表スペース内の各コンテナーの増大の整合性を維持しようとするためです。<br />

表スペースが自動サイズ変更可能であるものの INCREASESIZE 文節が指定されていない場合には、データ<br />

ベース・マネージャーが適切な値を判別します。<br />

� MAXSIZE integer K | M | G または MAXSIZE NONE<br />

� 自動サイズ変更可能な表スペースを自動的に大きくできる、最大サイズを指定します。 表スペースが自動<br />

サイズ変更可能であるものの MAXSIZE 文節が指定されていない場合、デフォルトは NONE です。<br />

� integer<br />

– DMS 表スペースまたは自動ストレージ表スペースを自動的に大きくできる、サイズ上のハード限<br />

界を、データベース・パーティションごとに指定します。 整数値の後に K (K バイトの場合)、M (M<br />

バイトの場合)、または G (G バイトの場合) を指定する必要があります。 使用される実際の値<br />

は、指定されたものよりも若干小さい場合があることにご注意ください。これは、データベース・マ<br />

ネージャーが表スペース内の各コンテナーの増大の整合性を維持しようとするためです。<br />

� NONE<br />

– 表スペースをファイル・システムの容量まで、または表スペースの最大サイズ まで増大できるよ<br />

うにすることを指定します。


DB2デザイン・ガイド<br />

自動サイズ変更を解除する方法<br />

�ALTER TABLESPACEステートメント<br />

� AUTORESIZE NOを指定する<br />

ALTER TABLESPACE<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

tablespace-name AUTORESIZE NO<br />

123<br />

データベース物理設計<br />

�注意点<br />

� 一旦AUTORESIZEをNOにすると、それまでに設定していたINCREASESIZE,<br />

MAXSIZEの値は保持されない。<br />

� 自動サイズ拡張が実行されている最中に、自動サイズ拡張を解除しようと<br />

すると、実行中の自動サイズ拡張が完了するまでALTER TABLESPACEス<br />

テートメントは待ち状態になる。<br />

� 実行中の自動サイズ拡張が完了した後、AUTORESIZEがNOに変更される。


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

124<br />

データベース物理設計


DB2デザイン・ガイド<br />

ダイレクトI/O<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

125<br />

データベース物理設計<br />

�利点<br />

� ファイル・キャッシュとバッファープールでの二重バッファリングを回避<br />

� 二重バッファリングを行うCPU負荷を軽減<br />

� ファイル・キャッシュに余分なデータをのせないことによる、本来のファイル・データ<br />

のヒット率向上<br />

� 大量にファイル・キャッシュを使用することによって引き起こされるページングを回避<br />

(システム全体の性能が不安定になることを回避)<br />

�V8.1FixPak4以降、ダイレクトI/Oサポートが拡張されている


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

126<br />

データベース物理設計<br />

� コンテナーにファイルを使ったDMS表スペースやSMS表スペースの場合、表や索引のデータはOSが提供す<br />

るファイル・システムのファイルに格納されます。DB2 for AIXの場合、デフォルトではそれらファイルのアクセ<br />

スはmmap I/O(Memory Mapped I/O)と呼ばれる方式を使います。mmap I/Oを使用すると、アクセスする<br />

ファイルはデータベースの共有メモリー(セグメント14)にマップされ、ファイルをアクセスするDB2の各プロセ<br />

スはこのセグメントをアクセスすることでファイルの入出力を行います。また、DB2_MMAP_READ、<br />

DB2_MMAP_WRITEをともにOFFに設定すると、DB2は表スペースのファイルアクセスのためにmmap I/Oを使<br />

わず、JFSのキャッシュにファイルページをコピーして読み書きを行います。この場合、ディスク上のデータを<br />

DB2エージェントがアクセスできるまでに、ファイルシステム・キャッシュとDB2のバッファー・プールの二重の<br />

バッファーを使っていることになります。<br />

� mmap I/Oを使う場合もそうでない場合にも、SMSやDMS(ファイル)の表スペースを使っている限りは直接<br />

I/Oを行うことはできず、ファイル・システムのためのオーバーヘッドは避けられませんでした。そのため、ハ<br />

イパフォーマンスが要求されるシステムでは、DMSのローデバイス構成が広く使用されてきました。<br />

� Windowsプラットフォームについては、DB2NTNOCACHEレジストリー変数の設定によってダイレクトI/Oが使<br />

用可能でした。 その他のプラットフォームに関しても、V8.1のFixPak4以降、DMSのローデバイスを使わなくと<br />

もダイレクトI/Oが使用できるような機能強化を続けてきました。<br />

� ダイレクトI/Oの使用により、ファイルシステムを使うことによるオーバーヘッドを削減することができ、CPUコ<br />

ストの低下が期待できます。<br />

� また、ダイレクトI/Oを使用することで、ファイルキャッシュに余分なデータが乗らないことになり、本来ファイ<br />

ルキャッシュを十分に活用すべきファイルデータについてキャッシュヒット率の向上が期待できます。<br />

� ダイレクトI/Oを使用しない場合のデメリットとして、ファイル・キャッシュを大量に消費し、その結果引き起こさ<br />

れるページングによってシステム全体の性能が不安定になることが挙げられます。ダイレクトI/Oを使用する<br />

と、この問題を回避することができます。


DB2デザイン・ガイド<br />

ダイレクトI/Oサポートの変遷<br />

�V8.1.4 (FixPak4)<br />

� AIXプラットフォームにおけるサポート追加<br />

� SMS表スペースのみ (LARGE表スペース、一時表スペースは除く)<br />

� レジストリ変数DB2_DIRECT_IOにて設定<br />

� db2set DB2_DIRECT_IO=ON<br />

� AIXのレベルによっては、コンカレント I/Oを使用<br />

� AIX 5.2(ML01)以降でAPAR IY45707の適用された環境<br />

�V8.2 (FixPak7)<br />

� AIXに加え、Solaris、HP-UX、 Linuxのサポート追加<br />

� DMS表スペース(ファイル)のサポート追加<br />

� 一時表スペースは対象外<br />

� CREATE/ALTER TABLESPACEのオプションにて設定<br />

� 表スペース単位の設定が可能<br />

� 指定するオプション<br />

– FILE SYSTEM CACHING :FSキャッシング使用(省略時値)<br />

– NO FILE SYSTEM CACHING :ダイレクトI/O使用<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

127<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

128<br />

データベース物理設計<br />

� V8.1.4、すなわちFixPak4によって、AIX環境のSMS表スペースに対してダイレクトI/Oを使用でき<br />

るようになりました。<br />

� ただし、LOBやLONGデータ、一時表スペースは対象外です。<br />

� DB2はJFS2のダイレクトI/Oの機能を使いますが、AIX5.2(ML01)以降ではコンカレント I/Oとい<br />

う機能を使ってファイルアクセスを行います。(APAR IY45707適用のこと)<br />

� ダイレクトI/Oを行うためには、新しいレジストリー変数 DB2_DIRECT_IOをONに設定してください。<br />

これによりSMS表スペースのI/OをダイレクトI/Oで、またAIX5.2(ML01)以降の環境では、コンカ<br />

レントI/Oにて処理します。<br />

� なお、DB2_DIRECT_IOがONに設定されていて、かつDB2_MMAP_READやDB2_MMAP_WRITEも<br />

ONに設定されている場合、MMAP I/Oの方の設定が自動的にOFFにされます。<br />

� V8.2、すなわちFixPak7では、AIXに加え、Solaris、HP-UX、 Linuxのサポートが追加になりました。<br />

� V8.1.4ではSMS表スペースのみを対象としていましたが、V8.2では、DMS表スペース(ファイル)<br />

のサポートが追加になっています。<br />

� 一時表スペースは依然対象外です。<br />

� また、ダイレクトI/O (およびコンカレントI/O)使用の設定は、表スペースレベルで可能になりま<br />

した。<br />

� CREATE TABLESPACEステートメント、およびALTER TABLESPACEステートメントに、FILE<br />

SYSTEM CACHING (ファイルシステムのキャッシングを使用する)、およびNO FILE SYSTEM<br />

CACHING(ダイレクトI/OおよびコンカレントI/Oの使用)の両オプションが追加となり、こちらの設<br />

定によって表スペース単位にファイルキャッシュを使用するか否かを設定できるようになってい<br />

ます。


DB2デザイン・ガイド<br />

参考:<br />

�ダイレクトI/O設定方法の例<br />

CREATE TABLESPACE TS1 MANAGED BY SYSTEM<br />

USING (‘tspath1’,’tspath2’)<br />

NO FILE SYSTEM CACHING<br />

ALTER TABLESPACE TS1 FILE SYSTEM CACHING<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

129<br />

データベース物理設計<br />

�表スペースのキャッシング使用状態確認は、表スペース<br />

のスナップショットにて確認可能<br />

get snapshot for tablespaces<br />

on sample<br />

Tablespace name = TS1<br />

Tablespace ID = 3<br />

Tablespace Type = System managed space<br />

Tablespace Content Type = Any data<br />

Tablespace Page size (bytes) = 4096<br />

Tablespace Extent size (pages) = 32<br />

Automatic Prefetch size enabled = Yes<br />

Buffer pool ID currently in use = 1<br />

Buffer pool ID next startup = 1<br />

File system caching = Yes<br />

Tablespace State = 0x'00000000'<br />

Detailed explanation:<br />

Normal


DB2デザイン・ガイド<br />

ダイレクトI/Oサポートの変遷(続き)<br />

�V8.2.2以降<br />

� 一時表スペースへのダイレクトI/O設定可能<br />

� 設定方法はV8.2のときと同様<br />

� CREATE / ALTER TABLESPACEのオプション<br />

– FILE SYSTEM CACHING<br />

– NO FILE SYSTEM CACHING<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

130<br />

データベース物理設計<br />

� ダイレクトI/Oが設定可能になったことにより、フラッシュ・コピー対象とすることができる。


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

131<br />

データベース物理設計<br />

� V8.2.2では、SMS、およびDMS (File)の一時表スペースに対しても、ダイレクトI/O(およびコンカレントI/O)を行うこと<br />

ができるようになりました。<br />

� これにより、従来は避けることのできなかった一時表スペースに読み書きされるページの二重バッファリングを回避<br />

することができるようになりました。<br />

� また、大量データを処理する際などに、一時表がファイルキャッシュを大量に使用することによりページングが発生し、<br />

システム全体の性能が劣化するという問題を避けることができます。これまでは、この問題を回避するために、一時<br />

表スペースをローデバイスのDMSにする対応が必要でした。SMS一時表スペースのダイレクトI/Oが使用可能になっ<br />

たことにより、SMSの一時表スペースを使用した場合でもこの問題を回避することができます。<br />

� 設定の方法については、V8.2のときから変わっていません。すなわち、CREATE TABLESPACEステートメント、また<br />

はALTER TABLESPACEステートメントをNO FILE SYSTEM CACHINGというオプションをつけて実行することになりま<br />

す<br />

� ダイレクトI/Oが一時表スペースにも使用できるようになったことで、FlashCopyを使ってDBのバックアップ取得を行っ<br />

ていたり、スタンバイDB作成を行う場合に発生していた考慮点が一部緩和されます。<br />

� こちらの考慮点については、テクニカルフラッシュ「DM05-018 AIXプラットフォームにおけるStorageのFlashCopy機能<br />

を用いたDB2のバックアップに関するガイド」に詳しい記述があります。<br />

� ダイレクトI/OをSMSの一時表スペースに使うことのできない従来の構成でFlashCopyを使用する場合には、SMSの<br />

一時表スペースについて以下のような対応をする必要がありました。<br />

� AIX JFS2のFreeze/Thaw機能を使って、一時表スペースコンテナーの配置されたファイルシステムをFreeze状態にし<br />

てからフラッシュコピーを取得する<br />

� (または) FlashCopy V2のConsistency Group機能を使ったFlashCopyを取得する<br />

� 上記のいずれの対応も不可能な場合には、SMSの一時表スペースをフラッシュコピー対象外とするか、またはDMS<br />

の一時表スペースを使用するように設計を変更する必要がありました。<br />

� 一時表スペースに対するダイレクトI/Oを使用する場合であっても、SMSの一時表スペースに対しては、JFS2の<br />

Freeze/Thaw機能、FlashCopy V2のConsistency Group機能のいずれかを使用することが推奨されます。<br />

� しかし、それらが使用できない場合、SMSの一時表スペースをフラッシュコピー対象外とする、またはDMSの一時表<br />

スペースを使用するように設計を変更する、という従来の対応以外に、SMSの一時表スペースにダイレクトI/Oが使<br />

用されるように設定する、という手段が増えました。<br />

� この方式を選択する場合には、SMSの一時表スペースをフラッシュコピー対象とすることができます。


DB2デザイン・ガイド<br />

V9.5<br />

ダイレクトI/Oサポートの変遷(続き)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

132<br />

データベース物理設計<br />

�V9.5で新しく表スペースを作成すると、No File System Cachingで作成される<br />

� 新規作成のみ、V9.5以前から既存の表スペースへは影響なし<br />

� 但し、以下のものはV9.1の時と同様にFile System Cachingがデフォルト<br />

This change applies to AIX, LinuxR, Solaris, and Windows with the following exceptions,<br />

where the default behavior remains to be FILE SYSTEM CACHING:<br />

AIX JFS<br />

Solaris non-VxFS<br />

Linux for System z<br />

All SMS temporary table space files<br />

SMS permanent table space files, except for long field (LF) data and large object (LOB)<br />

data files.<br />

� DMS FILEの表スペースに、LOBを格納する場合注意が必要。<br />

� LOBの再読込を行うようなアプリケーションでは、パフォーマンス低下の可能性があるため、明<br />

示的な「FILE SYSTEM CACHING」の設定を推奨。<br />

� 特に、WASのセッションDBとして使用している場合、32KBを超えるセッション情報はLOBとして書<br />

き込まれるため、パフォーマンス低下が懸念される。


DB2デザイン・ガイド<br />

DROPPED TABLE RECOVERY属性<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

133<br />

データベース物理設計<br />

� 表スペースのDROPPED TABLE RECOVERY属性<br />

� ドロップされた表をリカバリー可能にするための属性<br />

� 表スペース作成時、または変更時に、DROPPED TABLE RECOVERY属性を指定する(REGULAR表<br />

スペースにのみ指定可能)<br />

� V8以降のデフォルトはON<br />

� DROP TABLE ステートメント実行時<br />

� DROPされた表を識別するための項目がログ・ファイルとリカバリー履歴ファイルに書き込まれる<br />

� 表のDROP時に書き込まれる内容<br />

� ログ・ファイルに書き込まれる情報<br />

– 表の名前<br />

– タイム・スタンプ<br />

– トランザクションID<br />

– 表ID<br />

� 回復履歴ファイルに書き込まれる情報<br />

– 表の名前<br />

– タイム・スタンプ<br />

– トランザクションID<br />

– 表ID<br />

– DDL<br />

� 必要がなければOFFにする<br />

� 影響範囲<br />

� 誤ってDROPした表の回復を行うしくみを利用できなくなる<br />

� 定期的に大量に表を作成/削除を繰り返すような業務がない場合には、デフォルトのままでも<br />

業務パフォーマンスへの支障はない


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

134<br />

データベース物理設計<br />

� 表スペースのDROPPED TABLE RECOVERY属性<br />

� 表スペース作成時、または変更時に、DROPPED TABLE RECOVERY属性を指定することで、<br />

ドロップされた表がリカバリー可能になります(REGULAR表スペースにのみ指定可能)。<br />

� DROPPED TABLE RECOVERY属性を持つ表スペースに対してDROP TABLE ステートメント<br />

が実行されると、DROPされた表を識別するための項目がログ・ファイル内に作成されます。ま<br />

た、この項目はリカバリー履歴ファイルにも追加され、表を再作成する際に使用されます。<br />

� 必要がなければOFFにする<br />

� V8以降では、CREATE TABLESPACE時のDROPPED TABLE RECOVERY属性はデフォルトで<br />

ONになっています。これにより、表のDROPに関する情報の記録が行われることになるため、<br />

大量に表をDROPした際に、DROP処理のパフォーマンスが劣化する可能性があります。これ<br />

を回避するため、必要がなければOFFにするようにしてください。<br />

� OFFにする方法<br />

� 1. CREATE TABLESPACE文によって表スペースを作成する際、DROPPED TABLE RECOVERYオプ<br />

ションを明示的にOFFにします。<br />

� 2. 既に作成されている表スペースについては、ALTER TABLESPACE文により、DROPPED TABLE<br />

RECOVERYオプションをOFFにします。<br />

� ONのままにする場合は、PRUNE HISTORYコマンドによって回復履歴ファイルを定期的に削<br />

除するようにしてください(容量が増大し続けるため)。


DB2デザイン・ガイド<br />

OVERHEAD/TRANSFERRATE<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

135<br />

データベース物理設計<br />

�OVERHEAD/TRANSFERRATEのデフォルトは、バージョンによ<br />

り異なる<br />

�OVERHEADの省略時値<br />

� V8.1 : 24.10ms<br />

� V8.2 : 12.67ms<br />

� V9以降 : 7.50ms<br />

�TRANSFERRATEの省略時値<br />

� V8.1 : 0.90ms<br />

� V8.2 : 0.18ms<br />

� V9以降 : 0.06ms


DB2デザイン・ガイド<br />

参考:OVERHEADとTRANSFERRATEの意味<br />

�OVERHEAD<br />

�データをメモリーに読み込む前に、コンテナーに関して必要な<br />

時間(ミリ秒)<br />

�ディスク待ち時間、コンテナーの入出力コントローラーのオー<br />

バーヘッド (ディスクのシーク時間を含む)が含まれる<br />

�TRANSFERRATE<br />

�1ページのデータをメモリーに読み込むために要する時間(ミ<br />

リ秒)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

136<br />

データベース物理設計


DB2デザイン・ガイド<br />

⑤表スペースの配置<br />

�ユーザー表スペースの配置<br />

� 索引/長形式データの配置<br />

�その他の表スペースの配置<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

137<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

138<br />

データベース物理設計


DB2デザイン・ガイド<br />

ユーザー表スペースの配置<br />

� 複数の物理ディスクに表スペースを配置し、DISK I/Oを分散させる<br />

� 1つの表スペースを複数ディスクに配置 理想は同じサイズのコンテナー<br />

� 索引は別の表スペースに配置<br />

� 長形式は別の表スペースに配置<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

139<br />

データベース物理設計<br />

� 基本:Prefetch Size = Extent Size×コンテナー数<br />

� RAID5などアレイの場合は以下の構成を行う<br />

� DB2_PARALLEL_IO<br />

� このレジストリー変数を設定することで、PrefetchSize と ExtentSizeの違いを見て、I/Oを並列<br />

に行うかを決定する<br />

表スペース1<br />

(Prefetch Size = Extent Size ×<br />

4)<br />

表スペース2<br />

(Prefetch Size =<br />

Extent Size × 3)


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

140<br />

データベース物理設計<br />

� パフォーマンスのためには、各表スペースに対して、6個~10個以上の物理ディスク上に別々<br />

のコンテナーを作成し、I/Oを分散することが理想的である(と言われています)<br />

� 複数のコンテナーに配置する場合には、表スペースに対して以下の設定を行い、プリフェッ<br />

チャーによる並列I/Oを使用可能にする必要があります。<br />

� Prefetch Size = Extent Size×コンテナー数<br />

� この設定によって、複数のプリフェッチャー・プロセスを使い、データをバッファプールに読み出<br />

すことができるようになります。<br />

� データはラウンドロビンで書き込まれている為、各コンテナーのサイズは同じであることが理想<br />

的です。それによって、データの分散度合いのばらつきを無くし、ディスクI/Oが特定のコンテ<br />

ナーにできるだけ集中しないようにします。<br />

� DB2_PARALLEL_IOを指定した場合は、特にPrefetch Sizeは重要になります。パラレルI/Oを指<br />

定するような場合は、通常ESSなどのRAIDディスクが使われており、コンテナーが1つでも実際<br />

は内部では複数のディスクが使われています。このような状態では、コンテナー数は先読みに<br />

対しては意味を持たず、DB2はPrefetch SizeがExtent Sizeの何倍になっているかによって、プ<br />

リフェッチャーを起動し先読みを行います。


DB2デザイン・ガイド<br />

参考:プリフェッチ・サイズの自動調整機能(V8.2以降)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

141<br />

データベース物理設計<br />

�エクステント・サイズ、コンテナ数、およびコンテナあたりの物理ディスク<br />

数に基づいて、表スペースに適したプリフェッチ・サイズをDB2が自動計<br />

算する<br />

� 利点: コンテナの追加・削除に応じ、プリフェッチ・サイズを変更する必要がない<br />

� 考慮点: コンテナ数、物理スピンドル数が多いほど、多く設定される<br />

�設定方法<br />

� データベース構成パラメーターDFT_PREFETCH_SZの値をAUTOMATICに設定する<br />

� CREATE TABLESPACEステートメントで、 PREFETCHサイズを指定しない<br />

�算出式<br />

� プリフェッチ・サイズ=<br />

(コンテナ数)*(コンテナあたりの物理ディスク数)*エクステント・サイズ


DB2デザイン・ガイド<br />

参考:プリフェッチ・サイズの自動調整機能(V8.2以降)<br />

�DB2_PARALLEL_IOの値との関連<br />

� DB2_PARALLEL_IOの値は、コンテナあたりの物理ディスク数として使用される<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

142<br />

データベース物理設計<br />

�例 � (例1)DB2_PARALLEL_IO=*<br />

� 全ての表スペースは、デフォルトで、各コンテナあたり6個の物理ディスクをもつと仮定して計算され<br />

る<br />

� 全ての表スペースに対して、パラレルI/Oが有効となる。プリフェッチ要求は、プリフェッチサイズをエ<br />

クステント・サイズで割った数に分割されて、パラレルに実行される<br />

� (例2) DB2_PARALLEL_IO=*:3<br />

� 全ての表スペースは、コンテナあたり3個の物理ディスクを持つと仮定して計算される<br />

� 全ての表スペースに対して、パラレルI/Oが有効となる。<br />

� (例3) DB2_PARALLEL_IO=*:3,1:1<br />

� 全ての表スペースは、コンテナあたり3個の物理ディスクを持つと仮定して計算される。<br />

ただし、表スペース 1 だけは、物理ディスク数は1となる。<br />

� 全ての表スペースに対して、パラレルI/Oが有効となる。<br />

�DB2_PARALLEL_IOが設定されていない場合には、物理ディスク数は1


DB2デザイン・ガイド<br />

索引/長形式データの配置<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

143<br />

データベース物理設計<br />

�索引の配置<br />

� DMS表スペースに表を作成する場合、索引を別の表スペースに格納することが可能。<br />

� ディスクI/Oの競合を避けたい、または、表と索引のバッファープールを分け、特定の表や索引<br />

のヒット率を確保したい場合には、表と索引を別の表スペースに格納することを検討する<br />

表スペース for TABLE<br />

(Prefetch Size = Extent Size × 4)<br />

表スペース for INDEX<br />

(Prefetch Size = Extent Size × 3)<br />

�長形式データの配置<br />

� DMS表スペースに表を作成する場合、長形式のデータを別の表スペースに格納することが可<br />

能。<br />

� 長形式のデータにはバッファプールは有効ではない<br />

� ファイルDMSに配置することによって、ファイルキャッシュを有効にすることができる<br />

� LOBとして格納するデータは、通常それほど頻繁に読み書きが発生しないので、キャッシュが<br />

効かなくても影響が少ないケースも多い


DB2デザイン・ガイド<br />

その他の表スペースの配置<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

144<br />

データベース物理設計<br />

� 一時表スペース<br />

� ソート、結合、再編成、索引作成時(LOADを含む)等に使用<br />

� 一時表のI/Oが多く、データ/索引用の表スペースのI/Oと衝突する場合は、別ディスクに配<br />

置する<br />

� コンテナーに複数のディレクトリーを指定することが推奨。(SMSの場合)<br />

� カタログ表スペース<br />

� 通常、カタログ表のデータは殆どキャッシュ上に読み込まれているため、特にI/O効率を考慮<br />

したディスク上への配置は不要。(データベース作成時のデフォルトのままでも良い。)<br />

� SYSTOOLSPACE<br />

� V8.2以降でデータベースの自動保守(自動統計収集および再編成)を使用する場合に自動作<br />

成され、自動保守が実行される際に使用される。デフォルトの配置のままでも特に問題はない。<br />

自動保守機能を使用しない場合は、削除しても良い。


DB2デザイン・ガイド<br />

⑥表スペース以外のオブジェクトの配置<br />

�ログの配置<br />

� アクティブ・ログとアーカイブ・ログ<br />

�ワーク/バックアップ領域の配置<br />

�その他の領域<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

145<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

146<br />

データベース物理設計


DB2デザイン・ガイド<br />

ログの配置<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

147<br />

データベース物理設計<br />

� アクティブログに対する書き込み速度はアプリケーションのレスポンスに直接<br />

影響する<br />

� アクティブログは安全性を考えると、二重化した方がよい<br />

� (アクティブログの障害=データベースの障害) である。<br />

� DB2の二重ログは両方に書き出して終了なので、どちらか1つのディスクが遅い場合、ログへ<br />

の書き込みは遅くなる。<br />

� ディスク容量が許すのであれば<br />

� アクティブログ専用のディスク上に配置する<br />

� ESSの場合ランクも別の方が理想的<br />

� SCSI / Fibreなどのチャネルもできれば別<br />

� RAID5ではなく、ミラーリングを使用する<br />

� ストライピングによって書き込みを速くする<br />

非同期<br />

書き出し<br />

変更された<br />

データ<br />

データの<br />

更新処理<br />

データ<br />

バッファプール<br />

コミットしたら更<br />

新内容を<br />

必ず書き出す<br />

ログ


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

148<br />

データベース物理設計<br />

� ログはDB2にとって重要なオブジェクトです。特にアクティブログは非常に重要で、アクティブログが損傷したことは<br />

データベース自身が損傷したことを意味します。<br />

� つまり、アクティブログが壊れたら、データベースが壊れたのと同じです。<br />

� 何故、アクティブログがそれほど重要なのでしょうか。更新処理を行う時のDB2の動作を考えてみます。<br />

� データベースが更新された場合、バッファプールと呼ばれるキャッシュのデータが更新されますが、ディスクにはすぐ<br />

には書き出されません(このようなデータが含まれるページをダーティーページと呼びます)。その更新処理がコミッ<br />

トされると、必ずログに書き出されます。<br />

� この状態でもしDBサーバーがクラッシュした場合、次にデータベースが使われる前に、クラッシュリカバリーという処<br />

理を行う必要があります。クラッシュリカバリーによって、更新されたはずなのにディスクに反映されていない更新を、<br />

ログを読みながらディスクへ反映します。<br />

� ここで、重要な点はログがなければクラッシュ前にどのような更新処理が行われていたのかを知ることができないと<br />

いうことです。DB2はこのクラッシュリカバリーによって、突然のDB2の異常停止などの時でもデータベースに格納さ<br />

れているデータの論理的な整合性を保証しています。つまり、ログが壊れるということはDB2がデータの整合性を保<br />

証できないということを意味しています。<br />

� ログの重要性を理解したところで、そのI/Oパフォーマンスが非常に重要であることも気が付かれたと思います。更<br />

新処理がコミットされたら必ずログに書き出される訳ですから、ログへの書き出しが終わらないと次の処理へ進むこ<br />

とができません。<br />

� 更新処理のボトルネックがログのI/Oにならないようにする為には、他のI/Oとの衝突をできる限り避ける必要があり<br />

ます。他のI/Oとは表や索引のデータが含まれるディスクへのI/Oが含まれます。つまり、ログは表や索引などとは<br />

全く別のディスクに配置することが推奨されます。ESSのような1つのアレイが大きな場合でも、できる限り全く別の<br />

ディスク上に配置し、SCSIやファイバーチャネルなどのインターフェースも別にすることが推奨されます。<br />

� また、書き込みに対して多少不利なRAID5よりもできればミラーリング(RAID1)などを選択するようにしてください。<br />

� さらにディスクに余裕がある場合には、ストライピングなどによって高速化できれば更新処理にとって良い結果が期<br />

待できます。


DB2デザイン・ガイド<br />

ログの配置(続き)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

149<br />

データベース物理設計<br />

�アーカイブログとアクティブログは別のディスクに配置する<br />

� アーカイブログ・ディレクトリ(コピー先)とアクティブログ・ディレクトリ(コピー元)は別にした方<br />

がパフォーマンス的に有利<br />

� 障害時の危険分散を考えても別の方がよい<br />

� アクティブログとアーカイブログが壊れた場合、バックアップからのリストアーはできても、最新<br />

状態へのロールフォワードができなくなる。<br />

�大量更新を行うバッチ系処理の場合(Importなど)<br />

� ログに対するキャッシュに相当するログバッファー(LOGBUFSZ)を大きくする<br />

�ローデバイスロギングは、V9では推奨されない<br />

� ローデバイスロギングを使用すると、二重ログが使えない<br />

� USEREXITに何らかの問題があって、ログのコピーに失敗した場合、手動によるコピーが不可<br />

�ログ・アーカイブ機能(V8.2以降)を使用する場合は、アーカイブ先ディレ<br />

クトリとして容量と配置に注意する<br />

� 二つのアーカイブ先ディレクトリ(LOGARCHMETH1, LOGARCHMETH2)を使用する場合<br />

� 領域は2倍必要<br />

– 代替ディレクトリ(FAILARCHPATH)を使用する場合は、更に領域が必要<br />

� それぞれ別のディスクに配置する


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

150<br />

データベース物理設計<br />

� アクティブログの重要性を説明してきましたが、DB2にはもう一つアーカイブログというログがあります。通常、ログ・<br />

アーカイブ機能によって、アクティブログがアーカイブされた時に、そのアーカイブ・ログをアクティブログとは別のディ<br />

レクトリ(またはテープのような別のメディア)にコピーして保存します。このログファイルをコピーする処理も重要です。<br />

� コピー先のログファイルは、コピー元やデータベース自身の障害発生時に復元の為に必要になるので、コピー元と<br />

は全く別のディスクやメディアに保存する必要があります。また、ログ・アーカイブ機能はデータベースが使われてい<br />

る時に動作しますので、もし同じディスクにコピー先を配置してしまうと、コピー先の書き込みI/Oの為にアクティブロ<br />

グ自身のI/Oへ影響を与える可能性があります。データベースのパフォーマンスを維持するためには、できる限りこ<br />

のような影響は排除する必要があります。<br />

� 1つの作業単位(UOW)によって大量のデータを更新するような場合、コミットとコミットの間隔が非常に長くなります。<br />

このような場合、データベース構成パラメータのログバッファー(LOGBUFSZ)を大きくするとパフォーマンスに好影響<br />

を与えます。このような更新処理の場合、ログバッファが小さいと(デフォルトでは32KB)、更新処理がコミットされて<br />

いなくても、ログを頻繁にディスクに書き出さなければならなくなる為に、パフォーマンスに悪影響があります。<br />

� ログをローデバイスに配置する機能をDB2はサポートしていますが、V9では推奨されません。ローデバイスロギング<br />

を使用する場合、何らかの問題があってログ・アーカイブ機能によるログファイルのコピーに失敗し、アクティブログ<br />

のデバイス中に特定のログファイルが残ってしまったようなケースでは、手動でコピーすることができません。障害時<br />

の復旧作業は、通常時とは異なり、多種の問題が発生している可能性があり、手動で復旧できないということは、安<br />

全性が低いとも言えます。<br />

� また、DB2の二重ログの機能はローデバイスで使用することはできません。


DB2デザイン・ガイド<br />

ワーク/バックアップ領域の配置<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

151<br />

データベース物理設計<br />

� バックアップ時間の短縮が必要な場合、バックアップ領域のパフォーマンスを<br />

考慮する<br />

� ディスクへのバックアップの場合、バックアップ元のあるディスクとは別にする<br />

� 1つのディスクでは要求が満たせない場合、複数のディスクへのバックアップを検討<br />

� テープへのバックアップは、TSMがサポートしていれば、複数テープへの同時書き込みによっ<br />

て高速化が可能<br />

� ロードの処理時間短縮が必要な場合<br />

� ロード元のデータを格納するファイルシステムのパフォーマンスを考慮する<br />

� AIXでは、以下のパラメータがパフォーマンスに影響する場合がある<br />

� vmtuneのminpgahead, maxpgahead(ファイルシステムの先読み)<br />

� 一時表スペースと同居できるか<br />

� ロード時の入力ファイルと、ソート用の一時表スペースのI/Oが競合するとロードのパフォーマ<br />

ンスに悪影響が考えられる<br />

� 通常は、再編成時にはロードやバックアップなどの処理は行わない。


DB2デザイン・ガイド<br />

その他の領域<br />

� DB2診断情報格納ディレクトリー<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

152<br />

データベース物理設計<br />

� インスタンス・ホーム・ディレクトリー(デフォルト)、または、データベース・マネージャ構成パラ<br />

メーターDIAGPATHにて指定した場所に格納される<br />

� 管理通知ログ、db2diag.log、ダンプ・ファイル、トラップ・ファイル、コア・ファイル (UNIX のみ)を<br />

格納する<br />

� V8.2以降は、db2diag.logへ書かれる内容が増えているため、V8.1以前より容量が増<br />

える可能性がある。<br />

� データベース・ディレクトリー<br />

� バッファープール情報、表スペース情報、データベース構成情報、リカバリ履歴ファイル、ログ<br />

制御ファイル


DB2デザイン・ガイド<br />

⑦構成パラメーターの設定<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

153<br />

データベース物理設計<br />

�スレッドモデルへの変更<br />

�メモリーモデルの変更<br />

�バッファープール関連のパラメーター<br />

� プリフェッチャー<br />

� ページクリーナー<br />

�その他最低限構成すべきパラメーター<br />

�自己チューニングメモリー(Self Tuning Memory Manager)


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

154<br />

データベース物理設計


DB2デザイン・ガイド<br />

V9.5<br />

スレッドモデルへの変更<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

155<br />

データベース物理設計<br />

�V9.5からは、 UNIX、Linux プラットフォームにおいて、従来のようなプロセス・<br />

モデルではなく、db2syscプロセスが 1つ存在し、残りのEDUは db2syscプロセ<br />

ス配下にスレッドとして存在するアーキテクチャーに変わった。<br />

Idle Agent Pool<br />

Instance Level<br />

db2agent (idle)<br />

Database Level<br />

Logging<br />

db2loggr<br />

db2loggw<br />

db2agntp<br />

Subsystem Log Buffer<br />

Log<br />

Disks<br />

Write Log Requests<br />

Victim Notifications<br />

Shared Mem & Semaphores, TCPIP, Named Pipes,…<br />

db2agntp<br />

Active<br />

UDB Client Library<br />

db2tcpcm db2agent<br />

db2ipccm<br />

Deadlock<br />

Detector<br />

db2dlock<br />

Buffer Pool(s)<br />

Async IO Prefetch Requests<br />

Idle<br />

Parallel, Big-block,<br />

Read Requests<br />

Parallel, Page<br />

Write Requests<br />

db2pfchr<br />

db2pclnr<br />

Common<br />

Client<br />

UDB Server<br />

Listeners<br />

Coordinator<br />

Agents<br />

Subagents<br />

Prefet<br />

chers<br />

Page<br />

Cleaners<br />

Data Disks<br />

Process/Thread Organization<br />

Per-instance<br />

Per-application<br />

Per-database<br />

Idle, pooled agent or<br />

subagent<br />

V9.5からは、点線<br />

枠で囲まれた部分<br />

は、1つのプロセス<br />

となる。各EDUは、<br />

スレッドとして存在<br />

して、 db2syscプロ<br />

セスに紐づく。<br />

Health Monitor<br />

FMP<br />

db2acd<br />

db2fmp<br />

db2wdog


DB2デザイン・ガイド<br />

V9.5<br />

スレッドエンジンのメリット<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

156<br />

データベース物理設計<br />

�リソースの節約<br />

� EDUがプロセスだった際には、個別のプロセスで保持していたファイル・ハンドル情報を、<br />

db2syscプロセスが持つメモリー空間で共有するので、情報の二重持ちがなくなる。<br />

� システムスレッドのオペレーションはプロセスほどコンテキストを要求しない<br />

� アドレススペースとコンテキスト情報を共有する<br />

�パフォーマンスの向上<br />

� スレッド間でのコンテキストスイッチは、プロセス間でのやり取りに比べれば、一般的に<br />

速い。<br />

�使いやすさの向上<br />

� インスタンス全体で消費されるメモリー量の把握が、従来より容易になる。<br />

� AUTOMATICに設定、動的に変更可能な構成パラメーターが増える。<br />

� エージェント間で情報が共有されるため、アプリケーション・グループ共用メモリーが不<br />

要になる。<br />

� 上記に伴い、以下の構成パラメータは廃止される。<br />

– APP_GROUP_MEM_SZ<br />

– GROUPHEAP_RATIO<br />

– APP_CTL_HEAP_SZ


DB2デザイン・ガイド<br />

V9.5<br />

メモリー・モデルの変更(DB2 V9.5)<br />

APPL_MEMORY<br />

データベースエージェントが割り振るアプ<br />

リケーションメモリーの最大量を制御<br />

DATABASE_MEMORY<br />

データベース共用メモリー領域に<br />

予約されるメモリー量を指定する<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

157<br />

INSTANCE_MEMORY<br />

データベース物理設計<br />

1つのデータベースパーティションに<br />

割り振ることができるメモリー最大量


DB2デザイン・ガイド<br />

V9.5<br />

Automatic管理となったヒープ(メモリー関連)<br />

�V9.1でautonomic管理となっているヒープ(=STMMが管理)<br />

� buffer pools<br />

� lock list<br />

� max locks<br />

� package cache<br />

� sort heap<br />

�V9.5でautonomic管理となるヒープ<br />

� application heap<br />

� dbheap<br />

� monitor heap<br />

� statement heap<br />

� statistics heap<br />

Information Center「いくつかの構成パラメーターは単純化されたメモリー構成によって影響を受ける」より抜粋<br />

データベース物理設計<br />

https://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.wn.doc/doc/i0052504.html?resultof=%22%64%62%68%65%61%70%22%20<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

158


DB2デザイン・ガイド<br />

V9.5<br />

メモリー構成単純化のメリット<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

159<br />

データベース物理設計<br />

�構成の簡素化<br />

� V9.1において、パフォーマンスに影響を与える一部のヒープが自動管理(=STMM)となり、<br />

V9.5では、その他のヒープも自動管理となりDBAによる手動構成が不要となる<br />

� V9.1でSTMM機能によりautonomic管理となったヒープ<br />

– buffer pools, lock list, max locks, package cache, sort heap<br />

� V9.5でautonomic管理となるヒープ<br />

– application heap, dbheap, monitor heap, statement heap, statistics heap<br />

� 各データベースパーティションで使用可能な合計メモリーサイズの上限を<br />

INSTANCE_MEMORYに設定可能<br />

� 消費される合計メモリーサイズがINSTANCE_MEMORYのサイズ内であれば、各ヒープはメ<br />

モリーサイズを増加させることが可能となる<br />

� 新しく作成されるDBでは、メモリー関連(一部例外あり)のパラメーターはデフォルトで<br />

AUTOMATICと設定され必要に応じてDB2が自動調整する<br />

– 例外)utility heap, catalog cache, audit buffer, java heap, etc<br />

�メモリー不足によるエラーの削減<br />

� 各構成パラメーターをAUTOMATICと設定することで、必要に応じてメモリーサイズを調<br />

整する


DB2デザイン・ガイド<br />

V9.5<br />

INSTANCE_MEMORY1/2<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

160<br />

データベース物理設計<br />

�1つのデータベースパーティションに割り当てることが可能な最<br />

大メモリーサイズを指定する<br />

� デフォルト値(=AUTOMATIC)<br />

� 実際の設定値は、db2start時にサーバーの実メモリーの75% - 95%の間で割り当てられる<br />

� 実メモリーが割り当てられるわけではなく構成パラメーター値に上限値がセットされる<br />

�V9.1までとは意味が異なる<br />

� インスタンス管理用として予約する必要のあるメモリーサイズを指定(V9.1)<br />

�INSTANCE_MEMORYの更新<br />

� INSTANCE_MEMORYの動的増加は成功し、動的減少の場合は、現在使用されているメ<br />

モリー量よりも大きい場合に成功する<br />

� サーバーの実メモリーより大きい値がINSTANCE_MEMORYに設定された場合、db2start<br />

はSQL1220Nで失敗する<br />

� インスタンス稼動中に、実メモリーよりも大きい値にINSTANCE_MEMORYが更新された<br />

場合、更新要求は据え置かれ、次回のdb2startがSQL1220Nで失敗する


DB2デザイン・ガイド<br />

V9.5<br />

INSTANCE_MEMORY2/2<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

161<br />

データベース物理設計<br />

�INSTANCE_MEMORYサイズに達した状態で、特定ヒープに対してメモリー拡<br />

張要求が来た場合<br />

1.DB2は全ての共有メモリー、プライベートメモリーから要求されたメモリー量を削減しようと試みる<br />

2.上記対応後も十分な空きINSTANCE_MEMORY領域を確保できなかった場合、拡張要求は失敗す<br />

る<br />

�(例外)DB2の稼動に致命的な影響を与えるメモリーに対して拡張要求が来た<br />

場合<br />

� 致命的な影響<br />

� メモリー拡張要求が失敗することで、DBが無効とみなされる<br />

� インスタンスがシャットダウンしてしまう<br />

1.データベースパーティションで使用している現在の使用メモリーサイズの削減を試みる<br />

2.上記対応後も十分な空きINSTANCE_MEMORY領域を確保できなかった場合、DB2はOSにメモリー<br />

要求を出し、OSからメモリーを確保する<br />

� OSからメモリーを確保できた場合、INSTANCE_MEMORYのサイズが構成値を上回ることがある<br />

�考慮点<br />

� 同一サーバー上で、別ミドルウェアも並行稼動する場合、もしくは複数のインスタンスが並行稼動す<br />

る場合には、INSTANCE_MEMORYに適切な値を設定することで効率良いメモリー配分が可能とな<br />


DB2デザイン・ガイド<br />

V9.5<br />

APPL_MEMORY<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

162<br />

データベース物理設計<br />

�アプリケーションを実行するために割り当てることが可能な最大<br />

メモリーサイズを指定する<br />

� DBで消費されるアプリケーションメモリーの合計量をこのパラメーターで制限することが<br />

できる<br />

�デフォルト値(=AUTOMATIC)<br />

� DB活動化の時点で、最少のメモリーが割り当てられる<br />

�APPL_MEMORYに数値が設定された場合<br />

� DB活動化の時点で、設定されたメモリーサイズが割り当てられ、APPL_MEMORYサイズ<br />

の増減は発生しない<br />

� 初期設定値のメモリーをサーバーから取得できなかった場合、もしくは、<br />

INSTANCE_MEMORYの値を超えた場合、DBの活動化はSQL1084Cで失敗する<br />

�考慮点<br />

� DATABASE_MEMORYに一定量のメモリーサイズを確保しておきたい場合には、<br />

APPL_MEMORYで使用可能なメモリーサイズを制限する


DB2デザイン・ガイド<br />

バッファープール関連のパラメーター<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

163<br />

データベース物理設計<br />

� バッファプールの構成<br />

�表スペースのディスクに対する入出力のキャッシュ<br />

�LOBに対してバッファプールは効果が無い<br />

� プリフェッチャー(NUM_IOSERVERS)を十分に構成する<br />

�このパラメータは必要より大きく構成しても、ほんの少しメモリを消費するだけで他の悪影<br />

響は考えられない<br />

�物理ディスクの数+2 程度が推奨<br />

� ページクリーナー(NUM_IOCLEANERS)も十分に構成する<br />

�このパラメータは大きく構成し過ぎると、CPUの負荷を必要以上に大きくする可能性があ<br />

る �CPUの数を初期値に、最大で物理ディスク数迄


DB2デザイン・ガイド<br />

解説<br />

� パフォーマンスに最も影響を与えるパラメータがバッファプールと言われています。DB2が使<br />

用するメモリー領域の中で通常、最も大量にメモリーを使用します。<br />

� バッファプールは表及び索引・データのキャッシュに相当します。<br />

� バッファプールはデータベースが活動化時(通常最初の接続が行われた時)にアロケーショ<br />

ンされ、非活動化時(最後の接続が切断された時)に解放されます。<br />

� バッファプールのみを大きくしても、物理ディスクのIOを行うプリフェッチャーとページクリー<br />

ナーが少なければ、効果が上がらない可能性があります。<br />

� プリフェッチャーの初期値は、表及び索引を配置している物理ディスクの数+2(物理ディスク<br />

数はRAID5ディスクの場合、パリティ・スペアを除く)と一般的に言われています。<br />

� ページクリーナーはCPUの数から物理ディスクの数の間で調整します。初期値はCPUの数<br />

(物理ディスク数はRAID5ディスクの場合、パリティ・スペアを除く)。<br />

� RAID5等ストライピングされたディスクを表スペースに使用する場合、プリフェッチャー及び<br />

ページクリーナーは通常ディスクと同様に調整する必要がありますが、さらにdb2setコマンド<br />

で設定する環境変数:db2_parallel_ioに*(全ての表スペース)また特定の表スペースIDを指<br />

定する必要があります。<br />

� バッファプールのサイズは、スナップショットによってバッファープールヒット率((論理読出数<br />

-物理読出数)/論理読出数×100)を計算して通常評価します。通常80%から90%以上が<br />

目安ですが、システムの性格によってはそれ以下でも問題がない場合もあります。<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

164<br />

データベース物理設計


DB2デザイン・ガイド<br />

プリフェッチャー(NUM_IOSERVERS)<br />

� プリフェッチャーは先読みを行う時に使用される。<br />

� データベース構成パラメーター「NUM_IOSERVERS」にて数を指定。<br />

�V9以降、デフォルト値はAUTOMATIC(V8以前のデフォルト値は「3」)<br />

�AUTOMATICの場合、データベース活動化時点で、適正値を計算<br />

page page page page page page page page<br />

cont<br />

Bufferpool<br />

page page<br />

page page<br />

Prefetcher Prefetcher Prefetcher<br />

Prefetcher<br />

Prefetcher<br />

Prefetcher<br />

Extent Extent Extent<br />

cont<br />

表スペース<br />

cont<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

165<br />

必要のないプリフェッチャ<br />

ーは使用されない<br />

Prefetch単位<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

166<br />

データベース物理設計<br />

� バッファプールに表スペースからデータを読み込む時に、小さなデータを読み込むのであれば、通常はエージェント<br />

が直接読み出して、バッファプールに格納します。しかし、連続したデータを読み込むような場合は、DB2が判断し、<br />

プリフェッチ(Pre-Fetch:先読み)を行います。このプリフェッチは、プリフェッチャーと呼ばれるプロセスによって行わ<br />

れます。プリフェッチャーの数はデータベース毎に指定できます。データベース構成パラメータ:NUM_IOSERVERSで<br />

す。<br />

� プリフェッチャーが効率よく動作するためにはもう一つ構成が必要です。それは表スペースの属性である、<br />

PrefetchSizeです。各プリフェッチャーはそれぞれ1回の読み込みで、ExtentSize分のページを読み込みます。<br />

PrefetchSizeはExtentSizeの何倍になっているかによって、幾つのプリフェッチャーが必要なのかが決まります。ここ<br />

で重要なのは、PrefetchSizeはExtentSizeの倍数である必要があるという点です。何倍かは、コンテナー数倍を基本<br />

とします。<br />

� 上記の図の例で考えてみましょう。表スペースは、物理ディスク3つから構成されています。表スペースのExtentSize<br />

はデフォルトの32ページとします。この場合、この表スペースの最適なPrefetchSizeは、ExtentSize×表スペースを<br />

構成する物理ディスク数となり、96ページということになります。<br />

� この構成によって、プリフェッチャーはこの表スペースを先読みする際には、3つ使用され、それぞれのディスクを<br />

別々のプリフェッチャー・プロセスがIOし、ディスクIOの効率化を図ります。<br />

� この際、表スペースは、各ディスクに1つずつ合計3つのコンテナーから構成する必要があります。OSのストライピン<br />

グによって複数のディスクから単一のコンテナーを構成することも可能ですが、DB2に複数ディスクから構成されて<br />

いることを明確にし、ディスクの入出力をDB2によって効率化する為にも、OSのストライピングよりDB2のストライピン<br />

グの方が推奨されます。<br />

� 最近の物理ディスクは、飛躍的に速度が速くなっているので、PrefetchSizeは必ずしもExtentSize×物理ディスク数<br />

でなくても、その倍程度でも効果があることが確認されています。物理ディスク装置へのSCSI またはファイバーチャ<br />

ネルの速度などにもよるので、一概には言えませんが、倍、3倍、4倍程度を試してみて効果があればその<br />

PrefetchSizeが、最もパフォーマンス的に優れているということになります。<br />

� プリフェッチャーの構成(NUM_IOSERVERS)は、大きすぎても使われないプロセスが起動されているだけなので、多<br />

少のメモリを余分に消費するのみのため、多少多めに構成しても、ほとんど問題がありません。


DB2デザイン・ガイド<br />

ページ・クリーナー(NUM_IOCLEANERS)<br />

� ページクリーナーは以下の時に呼び出される<br />

�ソフトチェックポイント<br />

�ページ変更しきい値(chngpgs_thresh)に達したとき<br />

� データベース構成パラメーター「NUM_IOCLEANERS」にて数を指定。<br />

�V9以降、デフォルト値はAUTOMATIC(V8以前のデフォルト値は「1」)<br />

�AUTOMATICの場合、データベース活動化時点で、適正値を計算<br />

①<br />

LOGFILSZ<br />

(A)が(B)と比較してログ<br />

ファイルのSOFTMAX(%)<br />

よりも古い場合<br />

(A)バッファー・プール<br />

内の最も古いページに<br />

含まれている更新内容<br />

のログ・レコード<br />

(B)最新の更新内容<br />

ログファイル<br />

db2agent<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

データ更新<br />

167<br />

②<br />

db2pclnr<br />

更新済みページが<br />

CHNGPGS_THRESの値(%)を超えた場合<br />

更新済みページ<br />

バッファープール<br />

db2pclnr<br />

cont1 cont2 cont3<br />

表スペース<br />

db2pclnr<br />

NUM_IOCLEANERSデータベース<br />

構成パラメータの値<br />

データベース物理設計


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

168<br />

データベース物理設計<br />

� これに対して、バッファプールから表スペースに対してデータを書き出すプロセスを、ページ・クリーナーと呼びます。<br />

プリフェッチャーと同様に、データベース構成パラメータ:NUM_IOCLEANERSによって構成します。<br />

� ページ・クリーナーがプリフェッチャーと異なる点は、多く構成しすぎると、CPUへのオーバーヘッドになる可能性があ<br />

るという点です。ページ・クリーナーは幾つかの事象によって起動されますが、ページ・クリーナーが起動される時は、<br />

構成されているクリーナーが全て起動されます。必要な数よりも多く構成されていた場合、多くのクリーナーが起動<br />

されることになり、それがCPUの負荷を必要以上に高める可能性があります。<br />

� ページ・クリーナーの初期値がCPUの数と言われているのはこのためです。プリフェッチャーの数は物理ディスクの<br />

数+2程度と言われています。<br />

� このように、バッファプールはそれだけを大きくしても、バッファプール-ディスク間のデータのやりとりを行うプリ<br />

フェッチャーおよびページ・クリーナーを表スペースのPrefetchSizeおよびExtentSizeと共に正しく構成しないと、ディ<br />

スクへの入出力を効率化し、パフォーマンス向上を図ることは難しくなります。<br />

� ページ・クリーナーが呼び出されるタイミング<br />

� ページ・クリーナーが呼び出されるタイミングに影響を与えるパラメータが以下の構成パラメータです。<br />

� ページ変更しきい値(chngpgs_thresh)<br />

� softmaxおよびlogfilsiz<br />

� ページ変更しきい値は、バッファプール中のこのパラメータで指定した比率がダーティページ(データが更新され、<br />

バッファプール上では更新されているが、ディスクには反映されていないページのこと)になったら、ディスクにダー<br />

ティページを書き出そうとします。<br />

� また、logfilsizとsoftmaxによって、ソフト・チェックポイントを発生させ、ダーティページをディスクに書き出すことも可能<br />

です。ソフト・チェックポイントの正確な意味を考えると多少混乱するかもしれませんが、大体、ログが切り替わるタイ<br />

ミングでソフト・チェックポイントによって、ダーティページをディスクに書き出すと考えてよいでしょう。Softmaxはデ<br />

フォルトでは100%で、logfilsizと同じですが、softmaxを小さくするかlogfilsiz自身を小さくすることによって、頻繁に発生<br />

させることができます。<br />

� このダーティページの量は、クラッシュ・リカバリーと呼ばれるDB2によるリカバリー処理に大きな影響を与えます。


DB2デザイン・ガイド<br />

AUTOMATIC値の算出<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

169<br />

データベース物理設計<br />

�算出方法<br />

� 以下の3つの値の中で、最も大きな値を設定値とする<br />

� 1.V8でのデフォルト値(3)<br />

� 2.SMS表スペースで、(「 コンテナ数」*「DB2_PARALLEL_IOで設定された並行処<br />

理物理ディスク数」) の、全SMS表スペースでの最大値<br />

� 3.DMS表スペースで、(「表スペースのストライプセットにあるコンテナの最大数」 *<br />

「DB2_PARALLEL_IOで設定された並行処理物理ディスク数」)の、全DMS表スペー<br />

スでの最大値<br />

�最低でも、3つのプリフェッチャーが起動<br />

�算出値に影響する項目<br />

� 表スペースのコンテナ数<br />

� DB2_PARALLEL_IOレジストリー変数で指定された、<br />

並行処理物理ディスク数


DB2デザイン・ガイド<br />

AUTOMATIC値の算出<br />

�算出方法<br />

� 以下の値のうち、大きな方の値を設定値とする<br />

� 1.V8でのデフォルト値(1)<br />

– 最低でも1つのページクリーナーが起動<br />

� 2.CPU数 -1<br />

– DPFの場合<br />

CEIL(CPU数÷同一サーバー上のDBパーティション数)-1<br />

*CEIL=少数部分を切り上げ<br />

� 各DBパーティションに配布されるページクリーナー数がほぼ均等、<br />

かつCPU数を超えないように算出<br />

�算出値に影響する項目<br />

� CPU数<br />

� DPFの場合、DBパーティション数<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

170<br />

データベース物理設計


DB2デザイン・ガイド<br />

その他最低限構成すべきパラメーター<br />

� ログ関連<br />

� logfilsiz, logprimary, logsecond<br />

� ロック関連<br />

� locklst, maxlocks<br />

� ソート関連<br />

� sortheap, sheapthres<br />

� エージェント関連<br />

� maxappls, maxagents, num_poolagents, num_init_agents<br />

� num_poolagentsはV7とV8で仕様が異なる。<br />

ソフトウェア製品のサポート技術情報「NUM_POOLAGENTS DBM構成パラメーターの変更について(DM-05-021)」<br />

http://www.ibm.com/jp/domino01/mkt/cnpages1.nsf/page/default-000A5CD1<br />

� その他<br />

� applheapsz, dbheap, intra_parallel, maxfilop<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

171<br />

データベース物理設計<br />

� よくわからない場合は、構成アドバイザーで初期値を設定<br />

� V9では、データベース作成時に、システムリソース(メモリー、CPU、等)を考慮し、構成パラメーターをデフォルト<br />

で自動設定する<br />

� 構成アドバイザーの機能によってパラメーターが決定される。<br />

� V8.2までは、構成パラメーター(DBM, DB)のデフォルト値は固定<br />

� V9では、自己チューニング・メモリー(STMM)機能がデフォルトで稼動<br />

� STMMでのチューニング対象になっているメモリー領域は、デフォルト値がAUTOMATICになっている


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

172<br />

データベース物理設計<br />

� ログ関連<br />

� logfilsiz,logprimary,logsecond<br />

� ログは、最大のトランザクション(通常大量更新を行うバッチジョブなど)で使用されるログ容量をスナップ<br />

ショットより測定し、その数値を元に(データ件数などの増加率などを含めて)見積もり、<br />

LOGFILSIZ,LOGPRIMARY,LOGSECONDパラメータを調整します。<br />

� ログ容量=LOGFILSIZ×(LOGPRIMARY+LOGSECOND)×4096(バイト)<br />

� ファイルサイズ(LOGFILSIZ)をあまり大きくすると、ログ・ファイルの切り替えの際にディスクIOの負荷が大きく<br />

なり、あまり小さくすると頻繁にログ・ファイルが切り替えられるために(ログ・ファイル切り替え時には、バッ<br />

ファプール中の更新されてディスクに書かれていないダーティ・ページが、ディスクに書き出される)、バッファ<br />

プールが有効に利用されない場合があります。<br />

� 活動ログに使用するファイルシステムは、ログ容量の約2倍用意する必要があります。これは、1時点で大量<br />

のログが使用された場合にアロケーションされる、次のログファイルの為の領域です。ディスクに余裕がある<br />

場合は、64GB(V.7の最大ログ32GBの倍)用意しておくと活動ログのファイルシステムが不足することが無くな<br />

ります。ローデバイスのログは、管理が難しいので使用しないことを推奨します。<br />

� ロック関連<br />

� locklst,maxlocks<br />

� ロックの為のメモリー領域(locklist)は、クライアント数や1つの更新単位(1つのCOMMITまでに<br />

INSERT,UPDATE,DELETEによって更新される行の数)にあわせて調整する必要があります。<br />

� Locklistが不足していると、ロックエスカレーション(通常ロックは行単位ですが、ロック用メモリーが不足した<br />

場合、表単位のロックに自動的に変わること)が発生し、長時間のロック待ちやデッドロックなどが発生する可<br />

能性があります。<br />

� 但し、通常夜間などに実行される大量更新の為のバッチジョブ等に関しては、ロックエスカレーションが問題<br />

にならない場合もあります。<br />

� スナップショットの、locklist使用量およびLock Escalationの頻度などによって調整します。通常Lock<br />

Escalationは、オンライン系トランザクションではできるだけ発生させないように、メモリーサイズを大きくします。


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

173<br />

データベース物理設計<br />

� ソート関連<br />

� sortheap,sheapthres<br />

� ORDER BYを使用したSQLなどで使用するソート(分類)用のメモリー領域(SORTHEAP)<br />

� ここで定義したメモリー領域では容量不足の場合、一時表スペースがソートのために使用されます。この場合、ディス<br />

ク上でソートを行うので、メモリー上の場合よりパフォーマンスが悪化する可能性があります。<br />

� 各接続に対してアロケーションされるSORTHEAPを大きくした場合、インスタンス全体で使用できるソートヒープを制限<br />

するDBM構成パラメータSHEAPTHRESも調整する必要があります。SHEAPTHRESの理想的なサイズは、インスタンス<br />

配下の(SORTHEAP×同時接続数)です。<br />

� エージェント関連<br />

� maxappls,maxagents,num_poolagents,num_init_agents<br />

� クライアントからDBサーバーに接続すると、サーバープロセスのバックエンドでエージェントが起動されます。<br />

� エージェントの起動はサーバーへの負荷が非常に高い為、あらかじめサーバー上にエージェントを起動しておく<br />

num_initagentsパラメータ(db2start時に起動)、または1回使用されたエージェントを解放せずに次回の接続時に再利<br />

用するnum_poolagentsパラメータによって調整することができます。<br />

� エージェントはデータベースの非活動化によっては解放されません。num_initagentsおよびnum_poolagentsによって保<br />

持されているエージェントはdb2stopによって解放されます。<br />

� WAS等のアプリケーションサーバーを使用し、接続プールなどの機能によって接続数が固定されている場合、パフォー<br />

マンスにあまり影響を与えませんが、接続・切断を繰り返すようなアプリケーションが存在する場合は、応答時間およ<br />

V9.5<br />

V9.5<br />

びサーバー負荷に大きな影響を与えるため、調整する必要があります。<br />

� V9.5では、NUM_POOLAGENTSの意味合いが変更されました。<br />

– V8,V9.1:アクティブなエージェントとプールされるエージェントの合計数をNUM_POOLAGENTSとして設定<br />

– V9.5:プールされるエージェントの最大数を設定<br />

� MAXAGENTSパラメーターはV9.5で廃止されました。クライアントアプリケーションの最大数を制限したい場合は、<br />

MAX_CONNECTIONSで制限をかけます。<br />

� DB2ではSMPサーバーのCPUを効果的に利用する為、intra_parallelの機能がありますが、これをONにした場合、エー<br />

ジェントの数は接続数×並列度まで増加することになります。Intra_parallelはクライアント数が多いオンライントランザク<br />

ション系のサーバーでは使用しないことが推奨されています。<br />

� エージェントによって使用されるメモリー容量を見積もる場合、最低限1.5MB/接続、大きい場合(複雑なSQL等を実行<br />

する場合)では32MB/接続まで実メモリーの空き容量を見積もる必要があります。


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

174<br />

データベース物理設計<br />

� その他<br />

� applheapsz<br />

� 複雑なSQL文の実行<br />

より複雑なSQL文を処理する場合、アプリケーション・ヒープ(applheapsz)およびステートメント・ヒープ(stmtheap)が不<br />

足する可能性があります。<br />

特に、アプリケーション・ヒープは、Websphere Application ServerのPrepared Statement Cacheのように1つの接続上<br />

でステートメントを複数同時に実行するような場合に、大きくする必要があります。ただし、applheapszはデフォルトの<br />

128ページでは不足するケースがよくありますが、512または1024ページを指定すれば、かなり複雑なSQL文を処理で<br />

き、ほとんどのケースでは十分なはずです。<br />

V9.5 V9.5では、このパラメーターの意味合いが変更されています。以前の1つの接続のために設定されるパラメーターでは<br />

なく、アプリケーション全体で消費されるアプリケーションメモリーの総量に変更になりました。<br />

V9.5<br />

� アプリケーション・ヒープ不足<br />

もし、あなたが担当しているシステムで、applheapszに10MBを超えるような値(2500ページ以上)にしないと、「アプリ<br />

ケーション・ヒープ不足です」というエラーが発生する場合、そこで動作しているアプリケーション・プログラムが宣言し<br />

て使った資源(ステートメント・ハンドルなど)を確実にクローズしているかを確認してください。<br />

そのような接続上にゴミを残すようなアプリケーションを動かしている場合、applheapszを極端に大きな値にしなければ、<br />

動かしている途中でエラーが発生します。<br />

� applheapszを大きくするということは、その接続数分だけメモリ上にゴミが残るということになります。そのようなシステ<br />

ムでは、長時間の連続稼働によって、メモリの使用量が増加し、システムが不安定になる場合があります。<br />

そのようなケースでは、アプリケーション・ヒープを増やして対応せずに、アプリケーション・プログラムを直して、接続上<br />

にゴミを残さないようにしてください。<br />

� dbheap<br />

� バッファプールを大きくするとデータベースヒープが不足する場合があります。この場合、データベースヒープも大きく<br />

する必要があります。<br />

� データベース・ヒープにはログ・バッファー、カタログ・キャッシュ(V8では別)が含まれます。これらを大きくする場合も<br />

データベース・ヒープを大きくする必要があります。<br />

� intra_parallel<br />

� このパラメータは情報系のシステムの為のものなので、OLTP系のシステムではデフォルトのOFFのままにし、YESに<br />

設定しないようにしてください。<br />

� maxfilop<br />

� このパラメーターは、データベースに対して同時に開くことのできるファイル・ハンドルの最大数を表すように<br />

変更されました。<br />

� 以前のリリースでは、各データベース・エージェントに対して、同時に開くことのできるファイル・ハンドルの最<br />

大数を示していました。


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

175<br />

データベース物理設計<br />

自己チューニングメモリー(Self Tuning Memory Manager)<br />

�DB2が自動的にメモリーチューニングを実施<br />

� 管理者がメモリーチューニングを実施する必要なし<br />

� 予期しないワークロードを検知し、必要に応じてチューニング<br />

� メモリーの再分配を必要とするワークロードの変化に対応<br />

� メモリーチューニングに労する時間を節約可能<br />

� 情報収集→分析→設定→テスト→情報収集・・・・<br />

�対象 � データベース構成パラメーター<br />

� SORTHEAP<br />

� SHEAPTHRES_SHR<br />

� LOCKLIST(MAXLOCKS)<br />

� PCKCACHESZ<br />

� DATABASE_MEMORY<br />

� バッファープール<br />

�データベース構成パラメーターSELF_TUNING_MEMにて設定<br />

� デフォルト値はON(=STMM稼動)<br />

� この値をOFFに設定することで、下位パラメーターがAUTOMATICに設定されてい<br />

てもSTMMは停止<br />

�検証段階でSTMMを稼動させ、最適な設定値になった時点で、STMM<br />

を停止する、という使い方も可能


DB2デザイン・ガイド<br />

解説:<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

176<br />

データベース物理設計<br />

� V9の新機能であるメモリーの自己チューニング機能(STMM)を使用すると、DB2によって自動的にメ<br />

モリー・チューニングが行われます。<br />

� STMMは、ワークロードの大きな変化に対応し、構成パラメーターの値およびバッファー・プールのサ<br />

イズを調整してパフォーマンスを最適化します。<br />

� 対象となるメモリー領域は以下の通りです。<br />

� SORTHEAP<br />

� SHEAPTHRES_SHR<br />

� LOCKLIST(MAXLOCKS)<br />

� PCKCACHESZ<br />

� DATABASE_MEMORY<br />

� バッファープール


DB2デザイン・ガイド<br />

STMM使用時のDATABASE_MEMORY設定方法<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

177<br />

データベース物理設計<br />

�DATABASE_MEMORY=AUTOMATIC(デフォルト)<br />

� 必要に応じてOSよりメモリー取得、解放を行いチューニングを行う<br />

� STMMが増加すべきと判断した場合、メモリーを無制限に割り当てる<br />

� DB2_MEM_TUNING_RANGEで設定したminfreeの値を残す<br />

� DB2_PINNED_BP=YES, DB2_LARGE_PAGE_MEM=DB設定時は、<br />

AUTOMATIC指定不可<br />

� AIX(64bit), Windows(32bit & 64bit)のみで設定可能<br />

�DATABASE_MEMORY=数値<br />

� 指定した数値の範囲内で、メモリーチューニングを行う<br />

�DATABASE_MEMORY=COMPUTED<br />

� STMMは稼動しない<br />

� V8のAUTOMATICの動作<br />

� DB起動時の各パラメーターの初期値に基づき総容量を算出<br />

� V8からの移行時は、設定値AUTOMATICは、COMPUTEDに変更され<br />

る<br />

� AIX, Windows以外のOSのデフォルト値


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

178<br />

データベース物理設計<br />

STMM使用時のDATABASE_MEMORY設定方法(続き)<br />

�DB2_MEM_TUNING_RANGEレジストリー変数<br />

�AUTOMATIC設定時、フリーメモリーを一定量確保し、それ以外のメモリー<br />

を使用<br />

�確保するメモリー量の設定方法<br />

�db2set DB2_MEM_TUNING_RANGE =minfree, maxfree<br />

�minfree、maxfreeを定義<br />

�AIX, Windows環境のみ適用可能<br />

�設定値と意味<br />

�minfree<br />

�インスタンスが追加メモリーを必要としたときに、”minfree”で指定された%に達<br />

するまでシステムの空き物理メモリーを割り振る<br />

�maxfree<br />

�インスタンスはフリーにしておく物理メモリー量を”maxfree”で指定された%で<br />

維持する<br />

�未設定(デフォルト)<br />

�DB2が物理メモリー量より算出<br />

�注意 �STMM = ON & DATABASE_MEMORY = AUTOMATICの環境で、空き物理メモ<br />

リー量不足の問題が起きていなければ、特にチューニングに必要なし


DB2デザイン・ガイド<br />

解説:<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

179<br />

データベース物理設計<br />

� チューナーは、database_memory 構成パラメーターによって定義されたメモリー制限内で作動します。<br />

Windows® および AIX® 上では、database_memory の値自体を自動的に調整することができます。<br />

database_memory のセルフチューニングが使用可能である (AUTOMATIC に設定されている) 場合、<br />

チューナーはデータベースの全体的なメモリー要件を判別し、現在のデータベース要求量に従って<br />

データベース共用メモリーに割り振られるメモリーの量を増減します。たとえば、現行データベース要<br />

求量が高く、システムに十分の空きメモリーがある場合、さらに多くのメモリーがデータベース共用メ<br />

モリーによって消費されます。データベース・メモリー要求量が下げられるか、またはシステムの空き<br />

メモリー量が過度に減ると、データベース共用メモリーの一部が解放されます。<br />

� database_memory パラメーターが自己チューニングで使用できない (AUTOMATIC に設定されていな<br />

い) 場合、データベース全体は指定されたメモリー量を使用し、必要に応じてデータベースのメモリー・<br />

コンシューマー間でそれを分配します。 database_memory が自己チューニングで使用できない場合、<br />

データベースによって使用されるメモリーの量は 2 つの方法 (database_memory を数値に設定するか、<br />

COMPUTED に設定する) で指定できます。 COMPUTEDは、V8以前のAUTOMATICに相当し、メモ<br />

リーの合計量は、データベース起動時のデータベース・メモリー・ヒープの初期値の合計に基づいて<br />

計算されます。


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

180<br />

データベース物理設計


DB2デザイン・ガイド<br />

STMM使用時のその他のパラメーター設定方法<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

181<br />

データベース物理設計<br />

�LOCKLIST, PCKCACHESZ, SORTHEAP,<br />

xxxは各パラメーター名<br />

SHEAPTHRES_SHR<br />

yyは設定値<br />

� 現在の設定値からチューニングを開始<br />

� db2 update db cfg for DB using xxx automatic<br />

� 設定値をyyに変更し、その値からチューニングを開始<br />

� db2 update db cfg for DB using xxx yy automatic<br />

� 現在の設定値でチューニングを停止<br />

� db2 update db cfg for DB using xxx manual<br />

� 設定値をyyに変更し、その値でチューニングを停止<br />

� db2 update db cfg for DB using xxx yy


DB2デザイン・ガイド<br />

バージョンによるソートの違い<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

182<br />

データベース物理設計<br />

�V8.2までのソート<br />

� プライベートソートの場合(エージェントプライベートメモリーを使用)<br />

� SORTHEAP(DB CFG) & SHEAPTHRES(DBM CFG)で設定<br />

� 専用ソートによって使用されるメモリーの合計量におけるソフトリミット<br />

� 共有ソートの場合(データベース共有メモリーを使用)<br />

� SORTHEAP(DB CFG) & SHEAPTHRES_SHR(DB CFG)で設定<br />

– SHEAPTHRES_SHR=0の場合、SHEAPTHRESの値が使用される<br />

� SHEAPTHRES_SHRは1時点にソート用として使用できるデータベース共有メモ<br />

リーの合計量に対するハードリミット<br />

� 条件<br />

– intra_parallel=yes<br />

– max_connections > max_cordagents<br />

�V9.1からのソート<br />

� すべてのソートはデータベース共有メモリーを使用<br />

� SORTHEAP(DB CFG) & SHEAPTHRES_SHR(DB CFG)で設定<br />

– デフォルトでSHEAPTHRES(DBM CFG)=0<br />

– SORTHEAP, SHEAPTHRES_SHRの自動チューニングはSHEAPTHRES=0<br />

の場合のみ可能<br />

� データベース共有メモリーの合計量に対するソフトリミット<br />

� SHEAPTHRES > 0と設定することで、V8.2のメモリーモデルを使用可能


DB2デザイン・ガイド<br />

STMM使用時のバッファープールサイズ設定方法<br />

�作成<br />

� バッファープールサイズを指定し作成、その値からSTMMによる<br />

チューニング開始<br />

� db2 create bufferpool BPNAME (immediate/deferred) size yy automatic<br />

– yyは初期サイズ<br />

� バッファープールを作成し、STMMによるチューニング開始<br />

サイズ未指定でバッファープールを作成すると、1000ページで作成<br />

� db2 create bufferpool BPNAME (immediate/deferred)<br />

� db2 create bufferpool BPNAME (immediate/deferred) size automatic<br />

�変更<br />

� 設定値をyyに変更し、その値からチューニングを開始<br />

� db2 alter bufferpool BPNAME (immediate/deferred) size yy automatic<br />

� 現在の設定値からチューニングを開始<br />

� db2 alter bufferpool BPNAME (immediate/deferred) size automatic<br />

� 設定値をyyに変更し、その値でチューニングを停止<br />

� db2 alter bufferpool BPNAME size yy<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

183<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

184<br />

データベース物理設計


DB2デザイン・ガイド<br />

⑧シェル/コマンドの作成<br />

�データベース構築に必要なシェル/コマンド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

185<br />

データベース物理設計


DB2デザイン・ガイド<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

ブランク・ページです<br />

186<br />

データベース物理設計


DB2デザイン・ガイド<br />

データベース構築に必要なシェル/コマンド<br />

�以下のような操作を行うシェルやコマンドを用意する<br />

� 論理ボリューム,ファイルシステムの作成、権限の変更<br />

� OS上の操作でDB2が使用する資源を準備する<br />

AIX Volume Group(VG) Physical Volume(PV) Logical Volume(LV)<br />

Veritas Disk Group(DG) subdisk volume<br />

plex(ストライプ時など)<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

187<br />

データベース物理設計<br />

� WindowsではファイルDMSが一般的


DB2デザイン・ガイド<br />

解説<br />

� 論理ボリューム・ファイルシステム作成、権限の変更<br />

� AIXの例<br />

論理ボリューム作成 mklv -y lv_name vg_name pp数 hdiskxx<br />

ローデバイス用論理ボリュームの権限変更 chown user:group /dev/rlv_name<br />

ファイルシステム作成 crfs -v jfs -m /mount_point -l lv_name -A yes<br />

� データベース作成例(/databaseをDBのホーム・ディレクトリとして作成)<br />

� db2 create database DB_NAME on /database<br />

� バッファプール作成例(100MB)<br />

� db2 create BP01 size 25000 pagesize 4K not extended storage<br />

� 表スペース作成例(DMS Raw Device)<br />

� db2 "create tablespace TBS_NAME managed by database using (device '/dev/rlv_name1'<br />

1G,device '/dev/rlv_name2' 1G) extentsize 32 prefetchsize 64 bufferpool bp01"<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

188<br />

データベース物理設計


DB2デザイン・ガイド<br />

OS特有の設定<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

189<br />

データベース物理設計<br />

�AIX<br />

� AIO(非同期I/O)<br />

� V8以降、設定は必須(ページクリーナーが使用)<br />

– db2_installを使用してDB2を導入する場合は、手動で設定する必要があ<br />

る。(db2setupを使用すると、導入時に自動設定される。)<br />

� 最大サーバー数の目安 = 物理ディスクの数 × 10<br />

� vmtune(AIX5.1以前), vmo(AIX5.2以降)<br />

� JFSのファイルキャッシュを抑えるために使用(minperm,maxperm)<br />

� JFS2の場合、maxclient(ハードリミット)によって制限<br />

�Linux<br />

� AIO(非同期I/O)<br />

� V8.2.2では、レジストリー変数DB2LINUXAIOにて設定。<br />

– db2set DB2LINUXAIO=true<br />

� V9では、デフォルトで使用可能。(明示的な設定は不要。)<br />

– レジストリー変数DB2LINUXAIOは、V9では推奨されない。(将来削除<br />

される予定。)


DB2デザイン・ガイド<br />

解説<br />

©日本IBMシステムズ・エンジニアリング(株) Information Management部<br />

190<br />

データベース物理設計<br />

� AIX � AIO(非同期I/O)<br />

� DB2 V8以降では、非同期I/Oを使用します。その為、OS上では非同期I/Oが使用可能になっている<br />

必要があります。<br />

� 非同期I/Oの最大サーバー数は、デフォルトでは10となっていますが、ディスク数の10倍を目安にしま<br />

す。<br />

� 最小サーバー数はデフォルトの1のままで問題ありません。<br />

� vmtune,vmo(AIX5.2)<br />

� maxperm,minpermによってJFSキャッシュのサイズを調整することができます。デフォルトの設定は<br />

80%,20%ですが、データベース専用サーバーでは通常20%,20%の様な設定が多く使われています。<br />

� また、LOADなどに対する入力ファイルのI/Oのために、minpgahead,maxpgaheadの数を増やすと、パ<br />

フォーマンスに対する効果が期待できます。<br />

� Linux<br />

� AIO(非同期I/O)<br />

� V8.2.2では、Linuxで非同期I/Oを使用可能にするために、DB2LINUXAIOレジストリー変数を使用していました<br />

が、V9.1ではデフォルトで使用可能になりました。V9ではこの変数は必要ではなくなったため、将来のリリー<br />

スで廃止される可能性があります。

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!