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)
------------------------------------------------------------
この設定はあくまで机上での計算になります。
後日、検証環境で負荷測定を行いますが、
パフォーマンスが低下した場合、
アプリケーション側から発行されている
クエリのチューニングに移ります。