postgresおよびpostmasterサービスからの高いCPU使用率のトラブルシューティング?


28

SIEMソフトウェアを実行しているオープンソース(RHEL 6.2)ベースのマシンを使用しています。topコマンドを実行するpostgrespostmaster、CPU使用率が96%の両方が表示されます。これらのサービスが積み重なる原因を特定または確認する方法はありますか?


2
「RHCE 6.2」?「RHEL 6.2」という意味ですか?私はそうでpostgressありpostgres、あなたはそれを手でコピーしたと思います。
クレイグリンガー

回答:


30

pg_stat_activityシステムテーブルを使用して、特定のPostgresバックエンドIDをシステムプロセスIDに一致させることができます。

SELECT pid, datname, usename, query FROM pg_stat_activity;良い出発点になります。
実行されているクエリがわかったら、さらに調査できます(EXPLAIN/ EXPLAIN ANALYZE;ロックのチェックなど)


これは正確なクエリですか?私はdbにあまり精通していません。なぜなら、シェムに取り組んでいるsecガイ、あなたのselectステートメント、私はtopコマンドからpidをフィードする必要がありますか?
asadz

1
@asadzいいえ、切り捨てられました(現在修正済み)-特定のPIDがあり、それらが実行しているものを確認したい場合は、WHERE句でそれらを分離できますが、PIDの数が多くない場合は、全出力を簡単に検索できます。Postgresマニュアルにはpg_stat_activity、他の統計情報収集テーブル(問題ユーザークエリでない場合に役立つ)と同様に、他の統計コレクターテーブルから得られるものに関する追加の詳細があります。
voretaq7

このクエリを実行すると、疑わしいPIDはありません
Fendi Tri Cahyono

手がかりのおかげで、最近私は同様の問題に出会い、SELECT * FROM pg_stat_activity
八尾

14

私は同じ問題を抱えていました。postgresqlはAWS RDSでセットアップされ、インスタンスを増やした後でもCPU使用率が100%でした。ここに示す方法でデバッグしましたが、その方法の1つが機能しました。

クエリが最も長く実行されていることを確認すると、特定のクエリがスタックしており、3〜4時間以上実行されていることがわかりました。クエリが実行されている時間を確認するには、次のコマンドを実行します。

SELECT max(now() - xact_start) FROM pg_stat_activity
                               WHERE state IN ('idle in transaction', 'active');

これが1時間を超える場合は、これが問題です。長時間実行されている接続を強制終了し、アプリケーション側からの接続の最大経過時間を制限します。


8

これが実際にすべてのCPUを使用するポストマスターである場合、おそらく非常に高いためにロック競合の問題が発生している可能性がありますmax_connectionsmax_connectionsこの場合、接続プーラーを下げて使用することを検討してください。

それ以外の場合:詳細をお願いします。top -b -n 1開始のフル出力。


これは理にかなっています。これは、アナリストがこのシェムを使用して、多くのデータを行き来するためです。ロック状態を確認する方法はありますか?またはそれに起因する条件。?
asadz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.