メモリ領域の設計とは
メモリ領域(OracleではSGA:System Grobal Areaといいます)の設計は、一般的に物理設計の段階になって検討します。メモリ領域の設計要素としては、テーブル数、データ量(データの長さ×データ数)、インデックス数、最大利用ユーザー数等です。物理設計では、論理設計において正規化したテーブルの定義を崩したり、インデックスを定義して性能が向上するようにモデルを修正します。正規化でも触れましたが、正規化ではパフォーマンス(性能)が確保できない場合は、正規化崩しをします。また、アプリケーション特性により、効果的と判断される場合はインデックスを追加します。また、物理設計では使用するデータベースに依存する機能を使用することもあります。物理設計によって修正されたモデルを物理モデルと呼び、このモデルをもって実際にデータベースによって管理することができる形式となります。これらの情報を整理し、メモリ領域を見積もります。
DB_BLOCK_SIZEとは
まず第一に考えなければならないのが、DB_BLOCK_SIZEです。
DB_BLOCK_SIZEとは、OracleDBMSがディスクとメモリ間をやり取りするデータブロックのサイズのことです。
これは、一旦決定されると変更は効きませんし、そのサイズですべて管理されるということです。
SGAとは
Oracleのメモリには大きくSGA(System Grobal Area)とPGA(Program Grobal Area)があります。
SGAの最大の領域はデータベースバッファキャッシュです。(内部動作を参照)
データベースバッファキャッシュはデータ(実際に格納されている物理ファイル)と利用者の間に立ち、データのやり取りはすべてこの領域で行われます。そのやり取りの単位がDB_BLOCK_SIZEです。つまり、このデータベースバッファキャッシュにデータが存在している状態が理想的です。これをバッファキャッシュヒット率といいます。逆に言えば、データベースバッファキャッシュに存在していない場合はディスクからの読み込みとなり、パフォーマンス(品質)に大きな影響を及ぼします。このSGAを見積もるのは大変難しいです。
PGAとは
利用者単位に確保されるメモリ領域です。主な内容はセッションの情報とソート領域です。利用者が増えると比例してPGAが増えることは容易に理解できると思います。
メモリ設計は難しい
前述しましたが、メモリ設計に影響する要素は、以下のようなものが考えられます。
テーブル数
インデックス数
テーブル単位のデータ長
データ数
利用者数
アプリケーションの利用頻度
実際にはこれらを正確に見積もることは不可能に近いでしょう。
また、正確に見積もる費用と、メモリ費用のトレードオフの関係にあるとするならば、ある程度の概算見積もりでメモリを多めに確保し、運用で調整するというのが現実的だと思います。
運用で調整する場合、SGA_TARGET_ADVICEという機能を使うと便利です。
2 thoughts on “メモリ領域の設計”
Comments are closed.