Statspackとは
Statspack設定
statspackでの情報収集
statspackレポートの出力
便利スクリプト
Oracleチューニング講座
第22章 データ・ブロックのサイズによるパフォーマンスへの影響を知る
21章までは主にメモリー関連のチューニングについて説明してきました。次に必要なチューニングはデータ・ブロックのサイズです。
ブロックのサイズが大きい程、1つのブロックを読み込こむことでより多くのデータが読込まれます。そのためデータ・ブロックを適切なサイズに設定しておかなければ、様々な点でパフォーマンスに影響を及ぼします。
本章ではアクセスするブロック数を最小限にするための、適切なデータ・ブロック・サイズを決定するためのポイントを整理してみましょう。
データ・ブロック・サイズの考慮事項
まず、データ・ブロック・サイズ設定において特に検討すべき事項を以下に挙げます。
■アクセス方法
索引スキャンと全表スキャンではアクセス方法が異なります。それぞれのデータ・ブロックへのアクセスが効率的になるように、適切なデータ・ブロック・サイズを決定する必要があります。
索引スキャンの場合は必要なデータに対してROWIDでアクセスするので、大きなブロックに含まれる大量のデータをメモリー上に読込む必要はないため、
小さなブロックが効率的
です。
全表スキャンの場合は、大量データをメモリー上に読込むので1つのブロックにより多くのデータが含まれているほうがI/O要求が減るので、
大きなブロックが効率的
です。
■行サイズ
1行のサイズが大きい場合、小さなブロックには1行を格納できないので行連鎖が発生してしまします。行連鎖が発生すると1行を複数の行に分割、つまり行断片が起こり複数のブロックにまたがって格納されます。また、ブロック・サイズと行のサイズの関係によっては、何ブロックにもまたがってチェーンする場合もあり、読込むブロック数が非常に多くなるためパフォーマンスに影響が出る可能性が高くなります。このような場合はブロックのサイズを大きくし、1行が同じブロック内に格納できるようにすることで、ブロックへのアクセス数を減らします。
特にINSERTや行のサイズが拡大するUPDATE処理などで行連鎖が発生する可能性が高いので、更新系の処理が多いシステムでは注意が必要です。
■ブロックの競合
1ブロックに含まれる行数が多いほど、同じブロックに含まれるデータにアクセスする可能性が高くなり、ブロック競合が発生しやすくなります。アクセス方法と行のサイズを考慮してデータ・ブロックのサイズを決定した結果、ブロック競合が発生した場合はそれを解消する必要があります。
その方法については、次章の
「第23章 ブロック競合の調査方法を学び解消しよう」
にて説明します。
以下の図1はデータベース・バッファ・キャッシュの消費量に対してブロック・サイズを決定している図です。
図1:ブロック・サイズの決定方法
<<データ・ブロック・サイズ設定のガイドライン>>
以下の表1にデータ・ブロック・サイズによる利点・欠点を記します。
表1
ブロック・サイズ
利点
欠点
小(2~4KB)
ブロックの競合やバッファの消費量を削減できます。小さな行の格納、または索引スキャンに向いています。
ブロック内に格納できる行数が減少し、大量のブロックをスキャンする必要があります。また、行連鎖が発生しやすくなります。
中(8KB)
2KB、4KBでは1ブロックに格納できない行を格納でき、行連鎖の発生を抑えることができます。
小さな行に対して索引スキャンを行っている場合、バッファの領域が消費されます。
大(16~32KB)
1ブロックに大量の行を格納できます。大規模表に対する全表スキャンに適しています。
ブロックの競合が発生しやすくなります。また、索引スキャンには適していません。
OSレベルで余分な読込みが行われてしまいますので、データ・ブロック・サイズはOSのブロック・サイズより小さなサイズにしないでください。
OLTP環境は索引を使用したランダム・アクセスが中心のため、データ・ブロック・サイズは小さめに設定します。一般的には4KB、8KBが使用されます。
DSS環境は全表走査によるアクセスが中心のため、データ・ブロック・サイズは大きくします。一般的には、8KB以上に設定します。
ブロック・サイズの設定
データ・ブロックのサイズは、DB_BLOCK_SIZEパラメータで設定します。
DB_BLOCK_SIZEパラメータ
概要
データ・ブロックのサイズを指定
構文
DB_BLOCK_SIZE = バイト指定(2K~32Kまで)
デフォルト
8192
変更の可/不可
データベース作成後、変更不可(9iからは表領域レベルで変更可能)
このパラメータは、データベース作成時にのみ影響を与えるので、データベース作成後にはブロック・サイズを変更することはできません。
そのためデータ・ブロック・サイズはデータベースを作成する前に決定し、データベース作成時に設定します。
しかし、Oracle R9.0.1からは表領域レベルでデータ・ブロック・サイズを設定できるようになりました。
NOTE
:
選択すべきデータ・ブロック・サイズが不明な場合は、妥協案として8KBを考慮します。
以上でデータ・ブロック・サイズの決定及び設定についての説明は終了です。
適切なサイズを決定する際などに参考にしていただければと思います。
第23章では、ブロック競合の調査方法を学び解消方法について説明します。
第23章 ブロック競合の調査方法を学び解消しよう