Oracle奥深くて面白いなぁ~。
という事で現場で色々チューニングしてます。
アクセス数がありえないくらい凄いので
どうしようか未だ検討中ですがね。
■Oracle調査 (同時接続コネクション増加方法)
・前提
OS:redhatlinuxEnterpriseES4
Ver:Oracle9.2i
メモリ:8GB。すご・・
フロントWeb/APサーバ:20台
適切なメモリ割り当てについては
日々の運用から検討していく必要あり。
バッファサイズを小さくする事により、
OSのスワップ、ページングの頻度が減少する為。
1セッションで数ギガByteのデータを検索するシステムと、
10セッションで数メガByteを参照するシステムでは、
どちらがメモリを必要とするか
セッション数では判断つかない。
①PGA:プログラムグローバルエリアは,
SQLなどの作業領域として使われるメモリ領域。
1.PGA_AGGREGATE_TARGET
PGA自体の上限値。
※OLTP(On-Line Transaction Processing)頻繁に
発生する場合はOracleで利用する場合は
メモリの20%程度割り当てるのが妥当。
2.WORKAREA_SIZE_POLICY
パラメータPGA_AGGREGATE_TARGETの有効/無効を決める
②SGA:システムグローバルエリアはOracleインスタンスそのもの。
Oracleを起動した際に割り当てられるメモリのサイズ。
1.SHARED_POOL_SIZE(共有プール領域)
・ライブラリ、ディクショナリキャッシュを指す。
ライブラリキャッシュ:SQL解析、ストアド、PL/SQL
ディクショナリキャッシュ:テーブルの列、属性等
以下の2つのクエリでキャッシュヒット率を調査し、
アサインするメモリのサイズを増やす必要がある。
[本番サーバで確認するクエリ]
SELECT A.RATIO "LIBRARY CACHE HIT RATIO",
DECODE(SIGN(A.RATIO - 0.99),1,
'ライブラリキャッシュのヒット率は十分です',
'SHARED_POOL_SIZEを増やしましょう') "notes"
FROM (SELECT SUM(PINS - RELOADS) /SUM(PINS) RATIO
FROM V$LIBRARYCACHE) A;
SELECT A.RATIO "ROW CACHE HIT RATIO",
DECODE(SIGN(A.RATIO - 0.95),1,
'ディクショナリキャッシュは十分です',
'SHARED_POOL_SIZEを増やしましょう') "notes"
FROM (SELECT SUM(GETS - GETMISSES) /SUM(GETS) RATIO
FROM V$ROWCACHE) A;
※ライブラリキャッシュヒット率99%以上で計算
ディクショナリキャッシュヒット率95以上で計算
2.DB_CACHE_SIZE(DBバッファ)
V$DB_CACHE_ADVICE ← の内容から設定内容を調整
※DB_CACHE_ADVICEパラメタをONにする必要あり
3.LOG_BUFFER(REDOログバッファ)
REDOログ:データに対して行われたすべての変更履歴を記録するファイル。
[本番サーバで確認するクエリ]
SELECT A.RATIO "REDO SPACE WAIT RATIO",
DECODE(SIGN(A.RATIO - 0.01),1,
'LOG_BUFFERを増やしましょう',
'LOG_BUFFERは十分です') "notes"
FROM (SELECT R.VALUE / W.VALUE RATIO
FROM V$SYSSTAT R, V$SYSSTAT W
WHERE R.NAME = 'redo log space requests'
※REDOログバッファの待機割合は1%以下で計算
つづく