前回の「続・HugePages_1」に書ききれなかった、
Hugepagesネタに関する雑多な内容を書こうと思います。
Oracle® Database管理者リファレンス11.2では、
以下の様な設定手順が書かれていますが、
実際にはそんなに思い通りにはいかないこともあります。
1)memlockの設定変更
2)hugepagesのページ数検討&設定
3)DB再起動により獲得
しかしながら、自動メモリ管理(AMM)を使用している環境を考えた場合、
現実的には2)の部分をもう少し考える必要があります。
共有メモリー・セグメントのhugepages構成の推奨値を計算するスクリプトですが、
自動メモリ管理(AMM)環境では以下の様な出力になります。
[oracle@s112040 ~]$ ./hugepages_settings.sh
Recommended setting: vm.nr_hugepages = 1
ん?1ページなの?となります。
hugepages_settings.shスクリプトの内容を確認すれば分かりますが、
ipcs -mの結果を元にvm.nr_hugepagesを算出しています。
[oracle@s112040 ~]$ ipcs -m
------ 共有メモリセグメント --------
キー shmid 所有者 権限 バイト nattch 状態
0x00000000 1114117 oracle 640 4096 0
0x00000000 1146886 oracle 640 4096 0
0x5bb52b60 1179655 oracle 640 4096 0
※SEG_BYTESは4096となる。
この結果から、SEG_BYTESは4096となり、HPG_SZは2048のため、
echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -qの結果は0となり、
if文を抜けて、初期値の1が出力されたことが分かります。
SEG_BYTESが4096となっているのは、自動メモリ管理(AMM)環境では、
/dev/shmにマウントされた共有メモリー・ファイルシステム(ramfs/tmpfs/shmfs)に
グラニュルサイズでファイルを作成して使用しているため、
共有メモリセグメントを使用していないことに起因しています。
このことから、自動メモリ管理(AMM)環境からHugepagesを使用した環境に変更するには、
現時的には以下の手順の実施を検討する必要があります。
2)hugepagesのページ数検討&設定
2-1)sga_targetやpga_aggregate_targetの検討
2-2)hugepagesのページ数検討
2-1)についてですが、まずは現状の確認が必要ですね。
Hugepasesに関係する初期化パラメータを確認します。
memory_targetのみが設定されている場合には、
以下の様な状態になっているかもしれません。
SQL> col name_col_plus_show_param for a20
SQL> col value_col_plus_show_param for a10
SQL> col type for a15
SQL> show parameter memory_max_target memory_target
NAME TYPE VALUE
-------------------- --------------- ----------
memory_max_target big integer 6G
SQL> show parameter memory_target
NAME TYPE VALUE
-------------------- --------------- ----------
memory_target big integer 6G
SQL> show parameter sga_max
NAME TYPE VALUE
--------------- --------------- ----------
sga_max_size big integer 6G
※設定されていない場合には、memory_targetの値になります。
SQL> show parameter sga_target
NAME TYPE VALUE
-------------------- --------------- ----------
sga_target big integer 0
SQL> show parameter pga_aggregate_target
NAME TYPE VALUE
-------------------- --------------- ----------
pga_aggregate_target big integer 0G
SQL> show parameter use_large_pages
NAME TYPE VALUE
-------------------- --------------- ----------
use_large_pages string TRUE
sga_targetやpga_aggregate_targetを決定するには、
以下のSQLで現状や変動を確認し、設定値を検討します。
SQL>select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE
from V$MEMORY_DYNAMIC_COMPONENTS
where COMPONENT IN ('SGA Target','PGA Target');
SQL> select COMPONENT,PARAMETER,INITIAL_SIZE,TARGET_SIZE,
FINAL_SIZE,START_TIME from V$MEMORY_RESIZE_OPS
where COMPONENT IN ('SGA Target','PGA Target')
以下のアドバイスを参考にするのもありですね。
V$SGA_TARGET_ADVICE
V$PGA_TARGET_ADVICE
hugepagesを使用できるのはSGAだけなので、
vm.nr_hugepagesはsga_targetの値をHPG_SZである2048で
割った値となります。
長くなってきたので、一旦切ります。
実際の設定作業については次のエントリに記載します。
0 件のコメント:
コメントを投稿