web-dev-qa-db-ja.com

カーネルパラメータSHMALLおよびSHMAX

OSとしてRed Hat Enterprise Linux Serverリリース5.11(Tikanga)を使用しており、rdbmsは11gR2ソフトウェアです。 memory_target = 3 GB、物理RAM = 7 GBのデータベースを作成しました。巨大な操作を行うと、DBサービスが遅くなります。パフォーマンスを向上させるために、SHMALLおよびSHMAXパラメーターを変更する必要があります。どれだけの価値を与えるべきか教えていただけませんか?

3
Mannaji

SHMAX

64ビットサーバーの場合、使用できる最適値はRAMの半分です

32ビットサーバーの場合は3ギガバイト

SHMALL

ページングを回避するには、SHMALLをfree RAMよりも小さくする必要があります。

SHMAX

私たちが持っているものから SHMAXの設定に関するRedHatのドキュメント

このパラメーターは、Linuxプロセスが仮想アドレススペースに割り当てることができる単一の共有メモリセグメントの最大サイズをバイト単位で定義します。たとえば、32ビットプラットフォーム(x86)でRed Hat Enterprise Linux 3 smpカーネルを使用する場合、ユーザープロセスの仮想アドレス空間は3 GBです。 32ビットプラットフォーム(x86)でRed Hat Enterprise Linux 3 hugememカーネルを使用する場合、ユーザープロセスの仮想アドレス空間はほぼ4GBです。したがって、32ビットアーキテクチャのsmpカーネルでSHMMAXを4GB-1バイト(4294967295バイト)に設定しても、共有メモリセグメントの最大サイズは4 GB -1に増加しません。 32ビットアーキテクチャでhugememカーネルを使用してSHMMAXを4 GB-1バイトに設定しても、プロセスがそのような大きな共有メモリセグメントを取得することはできません。実際、hugememカーネルを使用するOracle 10g R1 SGAの共有メモリセグメントの上限は、共有ライブラリなどの他のものにも仮想アドレス空間が必要であるため、約3.42 GB(約36億7,000億バイト)です。つまり、32ビットシステムに2 GBの共有メモリセグメントが3つある場合、一度に複数の共有メモリセグメントにプロセスをアタッチすることはできません。また、32ビットシステムでSHMMAXを4294967296バイト(4 * 1024 * 1024 * 1024 = 4GB)に設定すると、SHMMAXは4GB値をラップするため、基本的に0バイトに設定されます。これは、32ビットシステムでSHMMAXが4294967295を超えてはならないことを意味します。 x86-64プラットフォームでは、仮想アドレス空間が32ビットに制限されていないため、SHMMAXは4GBよりはるかに大きくなる可能性があります。 SGAは共有メモリで構成されているため、SHMMAXはSGAのサイズを制限する可能性があります。 SHMMAXはSGAサイズよりわずかに大きくする必要があります。 SHMMAXが小さすぎると、次のようなエラーメッセージが表示されます。

ORA-27123:共有メモリー・セグメントにアタッチできません

SHMALL

私たちが持っているものから SHMALLの設定に関するRedHatのドキュメント

このパラメータは、システム全体で使用できる共有メモリページの総量を設定します。したがって、SHMALLは常に少なくともceil(shmmax/PAGE_SIZE)である必要があります。

Red Hat Enterprise Linux 2.1、3、4、および5のSHMALLのデフォルトサイズは2097152です。これは、x86およびx86-64プラットフォームでの9iおよび10gに対するOracleの推奨最小設定でもあります。ほとんどの場合、システムで使用可能な共有メモリの総量は2097152 * 4096バイト(shmall * PAGE_SIZE)、つまり8 GBであるため、この設定で十分です。より大きなメモリページの構成をサポートする第14章のラージメモリの最適化、ビッグページ、およびヒュージページを使用しない限り、PAGE_SIZEは通常4096バイトです。

LinuxシステムのデフォルトのPAGE_SIZEがわからない場合は、次のコマンドを実行できます。

$ getconf PAGE_SIZE

1
FarazX