web-dev-qa-db-ja.com

Oracleサーバーでスワップ使用率が高い

Oracle 11gR2サーバーとして実行されているLinuxサーバーでスワップ使用率を削減するにはどうすればよいですか?

現在、Enterprise Managerでは80%を超えています。

Oracleでスワップメモリ​​を使用しているプロセスを特定するにはどうすればよいですか?

1
vvs

Oracleデータベースはデータベースサーバーであり、オペレーティングシステムではありません。仮想メモリ管理とスワップの使用については認識していません。最初にswapを使用してプロセスを特定し、データベースに関連していることを確認します。

https://stackoverflow.com/questions/479953/how-to-find-out-which-processes-are-using-swap-space-in-linux

LinuxでOracleデータベースを使用する場合のメモリ管理とスワッピングに関連するいくつかの一般的な落とし穴:

  • 上級DBAでもpga_aggregate_targetを制限として扱うことがよくありますが、これは制限ではなく、目標値です。 PGAはその値よりかなり大きくなる可能性があり、このパラメーターの値は、メモリ要件を計算するときに使用すべきではありません。メモリ量が過小になる可能性があるためです。 V$PGASTATからインスタンスを起動してからの最大PGAサイズを確認できます。 maximum PGA allocatedpga_aggregate_targetの複数回である場合があります。これには、データベースをさらに調査する必要があります。

  • filesystemio_optionsパラメータの値は、デフォルトではnoneです。つまり、データベースは直接I/Oを使用せず、そのため、I/O操作はファイルシステムキャッシュにキャッシュされます(ASMではなく通常のファイルシステムを使用する場合)。これとvm.swappinessのデフォルトの高い値を組み合わせると、多くの場合、メモリ使用量とスワッピングが不必要に高くなります。 filesystemio_optionssetallに設定する必要があり、vm.swappinnessをデフォルトの60/30値(RHEL6/RHEL7)から減らすことをお勧めします。

  • OracleデータベースがPGAおよびSGAにメモリを割り当てることは一般的な知識です。それでも、ほとんどの人は、データベースサーバープロセスがSGA(明らかに共有メモリではない)の一部ではなく、PGA(オンラインパッチなどに必要)の一部でもない一部のメモリも割り当てるという事実を見落とします。数百または数千のデータベースプロセスがある場合、これらのプロセスごとの小さなメモリ割り当ては、かなりの量のメモリになる可能性があります。キューイング要求と接続プールは、データベース層ではなく、アプリケーションサーバー層に実装する必要があります。データベースプロセスの数は、比較的少なく保つ必要があります。

  • Linuxは、各データベースプロセスの共有メモリ使用量を個別に追跡します。プロセス数が多く、SGAが大きい場合、このアカウンティング情報は、PGA + SGAを組み合わせた場合よりもさらに多くのメモリを必要とする場合があります。このために使用されているメモリの量はgrep PageTables /proc/meminfoで確認できます。ここに大量のメモリ(数GBなど)が表示される場合、そのメモリは無駄なメモリの一種であり、オペレーティングシステムとデータベースで HugePages を使用するように構成する必要があります。 HugePagesを構成すると、通常、データベースは4 KBのページではなく2 MBのメモリページを使用します。この500倍のページサイズの増加により、共有メモリの計算に必要なメモリが500分の1になります。

2
Balazs Papp

Balazsが言ったことに加えて、おそらく/ proc/meminfoファイルのPageTablesを見るべきです。 PageTablesが本当に高い場合は、Huge Pagesを使用してメモリを節約します。 100 GBを超えるSGA/PGAを使用する1つのサーバーで2つの本番データベースを実行しています。 HugePagesを使用すると、メモリ管理のオーバーヘッドが大幅に削減されました。 HugePagesを使用している場合は、AMMを使用できません。ただし、メモリはスワップされず、予約されます。それを試したら、スワッピングが少ないかどうかを確認してください。そうでない場合は、SGA/PGAのターゲットと制限を縮小する必要があります。 12cでは、PGAの最大値を設定できます。

$ grep Page /proc/meminfo
AnonPages:       7785364 kB
PageTables:       329344 kB
AnonHugePages:         0 kB
HugePages_Total:   60000
HugePages_Free:    10864
HugePages_Rsvd:     4626
HugePages_Surp:        0
0
Gandolf989