お使いの環境で Oracle データベースを実行していて、メモリが原因でパフォーマンスの問題が発生している場合は、システムに構成されているスワップ領域を確認する必要がある場合があります。
Oracle 11g データベースの場合、追加する必要がある容量に関する Oracle の推奨事項は次のとおりです。
- RAM サイズが 2 GB 以下の場合、スワップ サイズは RAM の 1.5 倍にする必要があります。たとえば、RAM サイズが 2 GB の場合、3 GB のスワップ領域を作成する必要があります
- RAM サイズが 2 GB から 16 GB の場合、スワップ サイズは RAM と同じサイズにする必要があります。たとえば、RAM サイズが 4 GB の場合、4 GB のスワップ領域を作成する必要があります
- RAM サイズが 16 GB を超える場合、スワップ サイズは 16 GB にする必要があります。たとえば、RAM サイズが 32 GB の場合、16 GB のスワップ領域を作成すれば十分です
データベースのパフォーマンスを構成する際には、他にも多くのパラメーターが関係します。パフォーマンス上の理由からデータベースに大きな SGA サイズが必要な場合は、HugePages の使用を検討してください。デフォルトでは、SGA ページ サイズは 4k に分割されます。 HugePages を使用すると、SGA ページ サイズが最小 2MB に分割されます。データベースを構成するときは、このことに留意する必要があります。
以下に示すように、現在の HugePagesize を表示できます。
$ grep Huge /proc/meminfo HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 4096 kB
この Oracle の記事では、大量のメモリを使用している場合に考慮する必要のある hugepage について紹介します。
Linux では、free コマンドを実行して、現在の RAM サイズと SWAP サイズを特定します。デフォルトでは、free コマンドは出力を kb で表示します。 -m オプションを指定したため、出力は MB で表示されます。以下に示すように、このシステムには 3 GB の RAM と 2 GB のスワップがあります。
$ free -m total used free shared buffers cached Mem: 3034 2907 126 0 107 1103 -/+ buffers/cache: 1696 1338 Swap: 2047 85 1962
以下に示すように、/proc/meminfo ファイルからシステムの合計 RAM サイズとスワップ サイズを取得することもできます。これにより、出力がキロバイトで表示されます。
$ egrep 'MemTotal|SwapTotal' /proc/meminfo MemTotal: 3107636 kB SwapTotal: 2096472 kB
このスワップ領域の追加方法の記事で説明した 2 つの方法のいずれかを使用して、システムにスワップ領域を追加できます。
次の例では、1 GB のスワップ ファイルを Linux システムに追加します。
dd if=/dev/zero of=/root/myswapfile bs=1M count=1024 chmod 600 /root/myswapfile mkswap /root/myswapfile swapon /root/myswapfile