SHMAX

SHMAX

私はオペレーティングシステムとしてRed Hat Enterprise Linux Serverバージョン5.11(Tikanga)を使用していますが、rdbmsは11gR2ソフトウェアです。メモリターゲット= 3GB、物理RAM = 7GBのデータベースを作成しました。多くのタスクを実行すると、データベースサービスが非常に遅くなります。パフォーマンスを向上させるには、SHMALLおよびSHMAXパラメーターを変更する必要があります。どのような価値を与えるべきかを提案してもらえますか?

答え1

SHMAX

64ビットサーバーの場合、利用可能な最良の値はRAMの半分です。

32ビットサーバーの場合は3GB

上海モール

ページングを防ぐには、SHMALLを使用可能な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バイト)に設定しても、共有メモリセグメントの最大サイズは4GB -1に増えません。 Hugememカーネルを使用する32ビットアーキテクチャでSHMMAXを4GB - 1バイトに設定しても、プロセスはこのような大きな共有メモリセグメントを取得できません。実際、Hugememカーネルを使用するOracle 10g R1 SGAの共有メモリセグメントは、共有ライブラリなどの他のものにも仮想アドレス空間が必要なため、約3.42GB(約36億7千万バイト)に制限されます。これは、32ビットシステムに3つの2 GB共有メモリセグメントがある場合、どのプロセスも同時に2つ以上の共有メモリセグメントに接続できないことを意味します。また、32ビットシステムでSHMMAXを4294967296バイト(4 * 1024 * 1024 * 1024 = 4 GB)に設定すると、SHMMAXは4 GBの値を囲むため、デフォルトで0バイトに設定されます。これは、SHMMAXが32ビットシステムで4294967295を超えてはならないことを意味します。 x86-64プラットフォームでは、仮想アドレス空間は32ビットに制限されていないため、SHMMAXは4GBよりはるかに大きくなります。 SGAは共有メモリで構成されているため、SHMMAXはSGAのサイズを制限できます。 SHMMAXはSGAサイズよりわずかに大きくなければなりません。 SHMMAXが小さすぎると、次のようなエラーメッセージが表示されることがあります。

ORA-27123: 共有メモリー・セグメントに接続できません

上海モール

私たちの現状で見ると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

関連情報