PostgreSQLの監視は、雷雨の中で牛を苦しめようとするようなものです。アプリケーションは非常に迅速に接続してクエリを発行するため、何が起こっているのかを確認したり、システムのパフォーマンスの概要を把握したりすることは困難です。
以前の記事では、PostgreSQLの動作が遅い場合にソースにアクセスする方法について説明しましたが、ソースが具体的にクエリである場合、アクティブなライブ環境で何が起こっているかを評価するには、基本的なレベルの監視では不十分な場合があります。
PostgreSQL固有のプログラムであるpg_topを入力して、データベース内のリアルタイムアクティビティを監視し、データベースホスト自体の基本情報を表示します。 Linuxコマンド「top」と同様に、このコマンドを実行すると、ユーザーはホスト上のデータベースアクティビティのライブインタラクティブ表示になり、定期的に自動的に更新されます。
インストール
pg_topのインストールは、パッケージマネージャーとソースインストールという一般的に予想される方法で実行できます。この記事の時点での最新バージョンは3.7.0です。
パッケージマネージャー
問題のLinuxのディストリビューションに基づいて、パッケージマネージャーでpgtopまたはpg_topを検索すると、システムにインストールされているPostgreSQLのバージョンで何らかの面で利用できる可能性があります。
Red Hatベースのディストリビューション:
# sudo yum install pg_top
Gentooベースのディストリビューション:
# sudo apt-get install pgtop
ソース
必要に応じて、pg_topはPostgreSQLgitリポジトリからソースを介してインストールできます。これにより、公式リリースにまだ含まれていない新しいビルドを含め、必要なバージョンが提供されます。
機能
インストールすると、pg_topは監視しているデータベースへの非常に正確なリアルタイムビューとして機能し、コマンドラインを使用して「pg_top」を実行すると、インタラクティブなPostgreSQL監視ツールが起動します。
ツール自体は、現在データベースに接続されているすべてのプロセスに光を当てるのに役立ちます。
pg_topの実行
pg_topの起動は、データベースへの接続情報とともに、unix/linuxスタイルの「top」コマンド自体と同じです。
ローカルデータベースホストでpg_topを実行するには:
pg_top -h localhost -p 5432 -d severalnines -U postgres
リモートホストでpg_topを実行するには、フラグ-rまたは--remote-modeが必要であり、pg_proctab拡張機能がホスト自体にインストールされています。
pg_top -r -h 192.168.1.20 -p 5432 -d severalnines -U postgres
画面の内容
pg_topを起動すると、かなりの情報が表示されます。
Linux上のpg_topからの標準出力
負荷平均:
標準のtopコマンドと同様に、この負荷平均は1、5、および15分間隔です。
稼働時間:
最後に再起動してからシステムがオンラインになっている合計時間。
プロセス:
接続されているデータベースプロセスの総数と、実行中の数とスリープ中の数。
CPU統計:
CPUの統計。ユーザー、システム、アイドル状態の負荷率、優れた情報、およびiowaitの割合を示します。
メモリ:
バッファ内で使用され、解放され、キャッシュされたメモリの合計量。
DBアクティビティ:
1秒あたりのトランザクション数、1秒あたりのロールバック数、1秒あたりの読み取りバッファ数、1秒あたりのバッファヒット数、1秒あたりの読み取り行数、1秒あたりの書き込み行数などのデータベースアクティビティの統計。
DB I / Oアクティビティ:
システムでの入出力のアクティビティ。1秒あたりの読み取りと書き込みの数、および1秒あたりの読み取りと書き込みの量を示します。
DBディスク統計:
データベースディスクの合計サイズと空き容量。
スワップ:
使用されているスワップスペースに関する情報(ある場合)。
プロセス:
データベースに接続されているプロセスのリスト。自動真空タイプの内部プロセスも含まれます。このリストには、pid、priority、nice amount、使用されている常駐メモリ、接続の状態、使用されているcpu秒数、cpuパーセンテージ、およびプロセスが実行している現在のコマンドが含まれています。
便利なインタラクティブ機能
pg_topには、実行中にアクセスできるインタラクティブな機能がいくつかあります。 ?を入力すると、完全なリストが表示されます。これにより、使用可能なさまざまなオプションがすべて表示されたヘルプ画面が表示されます。
プランナー情報
E-実行プラン
Eを入力すると、説明プランを表示するプロセスIDのプロンプトが表示されます。これは、「EXPLAIN
A-EXPLAIN ANALYZE(UPDATE / DELETE safe)
Aと入力すると、EXPLAINANALYZEプランを表示するプロセスIDのプロンプトが表示されます。これは、「EXPLAINANALYZE
プロセス情報
Q-プロセスの現在のクエリを表示します
Qを入力すると、完全なクエリを表示するプロセスIDのプロンプトが表示されます。
I-プロセスごとのI/O統計を表示します(Linuxのみ)
Iと入力すると、プロセスリストがI / O表示に切り替わり、各プロセスの読み取り、書き込みなどがディスクに表示されます。
L-プロセスによって保持されているロックを表示します
Lと入力すると、保持されているロックを表示するプロセスIDのプロンプトが表示されます。これには、データベース、テーブル、ロックのタイプ、およびロックが付与されているかどうかが含まれます。長時間実行中または待機中のプロセスを探索する場合に便利です。
関係情報
R-ユーザーテーブルの統計を表示します。
Rと入力すると、シーケンシャルスキャン、インデックススキャン、INSERT、UPDATE、DELETEなどのテーブル統計が表示されます。これらはすべて最近のアクティビティに関連しています。
X-ユーザーのインデックス統計を表示
Xを入力すると、インデックススキャン、インデックス読み取り、インデックスフェッチなど、最近のアクティビティに関連するインデックス統計が表示されます。
並べ替え
表示の並べ替えは、次の文字のいずれかを使用して実行できます。
M-メモリ使用量で並べ替え
N-pidで並べ替え
P-CPU使用率で並べ替え
T-並べ替え時間
以下は、oを押した後に指定されたエントリであり、インデックス、テーブル、およびi /o統計ページも並べ替えることができます。
o-並べ替え順序(CPU、サイズ、解像度、時間、コマンド)を指定します
インデックス統計(idx_scan、idx_tup_fetch、idx_tup_read)
テーブル統計(seq_scan、seq_tup_read、idx_scan、idx_tup_fetch、n_tup_ins、n_tup_upd、n_tup_del、n_tup_upd、n_tup_del)
、書き込み、cwrites、コマンド)
接続/クエリ操作
k-指定されたプロセスの強制終了
kと入力すると、プロセスのプロンプト、または強制終了するデータベースプロセスのリストが表示されます。
r-プロセスを再実行します(ローカルデータベースのみ、ルートのみ)
rと入力すると、適切な値の入力を求めるプロンプトが表示され、その後にその新しい適切な値に設定するプロセスのリストが表示されます。これにより、システム内の重要なプロセスの優先順位が変更されます。
例:「renice17004」
pg_topのさまざまな使用法
pg_topのリアクティブな使用法
pg_topの一般的な使用法はインタラクティブモードであり、速度低下の問題が発生しているシステムで実行されているクエリを確認したり、それらのクエリでExplain Planを実行したり、重要なクエリを削除してより速く完了させたり、大幅な速度低下を引き起こしたクエリを強制終了したりできます。 。一般に、データベース管理者は、システムで手動で実行できるのと同じことの多くを実行できますが、より迅速ですべてを1つのオプションで実行できます。
pg_topの積極的な使用
あまり一般的ではありませんが、pg_topは「バッチモード」で実行できます。これにより、標準化するために議論された主な情報が表示され、終了します。これは、特定の間隔で実行するようにスクリプト化してから、必要なカスタムプロセスに送信し、解析し、管理者がアラートを受け取る可能性のあるものに基づいてアラートを生成できます。たとえば、システムの負荷が高くなりすぎた場合、1秒あたりのトランザクション数が予想よりも多い場合、クリエイティブプログラムは何でも理解できます。
一般に、この情報を収集して報告するためのツールは他にもありますが、オプションを増やすことは常に良いことであり、利用できるツールを増やすことで、最適なオプションを見つけることができます。
pg_topの歴史的な使用法
以前の使用法であるプロアクティブな使用法と同様に、バッチモードでpg_topをスクリプト化して、データベースが時間の経過とともにどのように見えるかのスナップショットをログに記録できます。これは、タイムスタンプ付きのテキストファイルに書き込むか、解析して日付をリレーショナルデータベースに保存してレポートを生成するのと同じくらい簡単です。これにより、午前4時のデータベースのクラッシュなど、重大なインシデントの後に、より多くの情報を見つけることができます。利用可能なデータが多いほど、問題が見つかる可能性が高くなります。
詳細情報
プロジェクトのドキュメントはかなり限られており、ほとんどの情報は「manpg_top」を実行して見つけたlinuxのmanページにあります。 PostgreSQLコミュニティは、PostgreSQLメーリングリスト、またはfreenodeにある公式のIRCチャットルーム(チャネル名#postgresql)を通じて質問や問題を解決することができます。