Oralceメモリチューニング第2弾です。


SGA + PGA + (同時ユーザアクセス数 × 1.5MB)

の公式で5.6GBの範囲(8GBの70%)においてメモリを調整。

で、前にOracleのメモリチューニングに
お決まりはない、と書いたように日々の運用の中で
最適なメモリ領域の確保を行う必要があります。



現状の設定は以下の通り

------------------------------------------------------
 ・SGA
  sga_max_size → 3.5GB
  db_cashe_size → 3GB
  shared_pool_size → 200MB
  log_buffer → 1.9MB

 ・PGA
  pga_aggregate_target → 2GB

 ・processes(同時アクセス数)
  1,000processes想定
  1processあたり1.5MBのメモリ領域をアサイン
-------------------------------------------------------

 Oracleの統計情報を調査。
 (Oracleインスタンスを起動してから現稼動までの統計。)

 ① V$LICENSEから最大接続数の確認を行う。
   SESSIONS_CURRENT(現在接続中のユーザ) → 579
   SESSIONS_HIGHWATER(同時接続数最大) → 990

   processesが1,000に設定しているので
   現状かなり危ない数値です(※1)。

 そこでprocessesが1,500でも大丈夫なように
 SGA、PGAの利用可能はメモリサイズの調整行う。

 ②V$SYSSTATからデータベース・バッファキャッシュヒット率を
  調べて見ると99.6%。
  充分な数値である事が分かる。

  db_cashe_sizeが3GBとかなり多めに取っているので
  このサイズを減らします。

 ③V$PGASTATからPGAの最大メモリ使用量を見てみると733MB。
  PGAのメモリ使用量は現状2GBなので、
  こちらのサイズも減らします(※2)。

 ※1. 同時接続数が1,000を超えた場合はOracleがエラーを返すので
    アプリ側からは接続できなくなる。これはかなり致命的。

 ※2. アクセス過多でPGAの最大サイズを超えた場合は、
    Oralceインストールディレクトリにディスク空き領域に
    仮想メモリを作成しに行く。
    当然ディスクI/Oが発生するのでパフォーマンスは低下する。
    空きディスクが無くなるとOracleが応答しなくなる。


 以上を踏まえた上でメモリチューニングは・・

------------------------------------------------------------
・SGA
  sga_max_size → 2.5GB
  db_cashe_size → 2.0GB
  shared_pool_size → 200MB
  log_buffer → 1.9MB

 ・PGA
  pga_aggregate_target → 0.9GB

 ・processes(同時アクセス数)
  1,500processes想定
  1processあたり1.5MBのメモリ領域をアサイン(約2.2GB)

------------------------------------------------------------


この設定はあくまで机上での計算になります。


後日、検証環境で負荷測定を行いますが、

パフォーマンスが低下した場合、

アプリケーション側から発行されている

クエリのチューニングに移ります。