Home » database » メモリ領域の設計

メモリ領域の設計

メモリ領域(OracleではSystem Grobal Areaといいます)の設計は、一般的に物理設計の段階になって検討します。

 

物理設計では、

 

論理設計において正規化したテーブルの定義を崩したり、

 

インデックスを定義して性能が向上するようにモデルを修正します。

 

正規化でも触れましたが、

 

正規化ではパフォーマンス(性能)が確保できない場合は、正規化崩しをします。

 

また、アプリケーション特性により、効果的と判断される場合はインデックスを追加します。

 

また、物理設計では使用するデータベースに依存する機能を使用することもあります。

 

物理設計によって修正されたモデルを物理モデルと呼び、このモデルをもって実際にデータベースによって管理することができる形式となります。

 

これらの情報を整理し、メモリ領域を見積もります。

 

まず第一に考えなければならないのが、DB_BLOCK_SIZEです。

 

DB_BLOCK_SIZEとは、OracleDBMSがディスクとメモリ間をやり取りするデータブロックのサイズのことです。

 

db_block_size

 

これは、一旦決定されると変更は効きませんし、そのサイズですべて管理されるということです。

 

Oracleのメモリには大きくSGA(System Grobal Area)とPGA(Program Grobal Area)があります。

 

sga_pga

 

SGAの最大の領域はデータベースバッファキャッシュです。(内部動作を参照)

 

データベースバッファキャッシュはデータ(実際に格納されている物理ファイル)と利用者の間に立ち、

 

データのやり取りはすべてこの領域で行われます。

 

そのやり取りの単位がDB_BLOCK_SIZEです。

 

つまり、このデータベースバッファキャッシュにデータが存在している状態が理想的です。

 

これをバッファキャッシュヒット率といいます。

 

逆に言えば、データベースバッファキャッシュに存在していない場合はディスクからの読み込みとなり、

 

パフォーマンス(品質)に大きな影響を及ぼします。

 

このSGAを見積もるのは大変難しいです。

 

影響する要素は、以下のようなものが考えられます。

 

テーブル数
インデックス数
テーブル単位のデータ長
データ数
利用者数
アプリケーションの利用頻度

 

実際にはこれらを正確に見積もることは不可能に近いでしょう。

 

また、正確に見積もる費用と、メモリ費用のトレードオフの関係にあるとするならば、

 

ある程度の概算見積もりでメモリを多めに確保し、運用で調整するというのが現実的だと思います。

 

運用で調整する場合、SGA_TARGET_ADVICEという機能を使うと便利です。