3

同じマシン上に、data-1 と data-2 という名前の 2 つの PostgreSQL データベースがあります。両方のデータベースは 40 GB のデータを保持し、マシンで使用可能なメモリの合計は 68 GB です。

data-1 と data-2 を開始し、いくつかのクエリを実行してすべてのデータを調べました。次に、data-1 をシャットダウンし、data-2 に対してクエリを発行し続けました。何らかの理由で、OS は依然としてデータ 1 のページの大部分をページ キャッシュに保持し、データ 2 のファイル用に約 35 GB の RAM を予約しています。その結果、data-2 に対するクエリがディスクにヒットし続けます。

fincoreでページキャッシュの使用状況を確認しています。data-2 に対してテーブル スキャン クエリを実行すると、data-2 のページが削除され、ラウンド ロビン方式でキャッシュに戻されることがわかります。data-1 のページは何日も触れられていませんが、何も起こりません。

data-1 のページがページ キャッシュから削除されない理由を知っている人はいますか? 問題に関連していると思われるあらゆる種類の提案を歓迎します。

これは Amazon の EC2 m2.4xlarge インスタンスで、68 GB の RAM とスワップ スペースはありません。カーネルのバージョンは次のとおりです。

$ uname -r
3.2.28-45.62.amzn1.x86_64

編集-1:

NUMA 構成がないようです。

$ dmesg | grep -i numa
[    0.000000] No NUMA configuration found

編集-2:

Linux カーネル ソース ツリーでpage-typesツールを使用して、ページ キャッシュの状態を監視しました。この結果から、次のように結論付けています。

data-1 pages are in state : referenced,uptodate,lru,active,private
data-2 pages are in state : referenced,uptodate,lru,mappedtodisk
4

1 に答える 1

1

で設定した cpusets を見てください/dev/cpusets。ここに複数のディレクトリがある場合は、複数の cpuset があり、場合によっては複数のメモリ ノードがあります。

cpusets メカニズムの詳細は、http ://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html に記載されています。

于 2012-11-20T12:30:12.323 に答える