Performance Analysis Tools/ja
原文最終更新日:22 May 2015
性能解析ツール
このページはシステム全体、システムリソースのPostgreSQLにおける使い方、PostgreSQLの性能に対するボトルネックの可能性に関する事柄などについてより学ぶための、PostgreSQLの外側のデータ収集ツールに焦点をあてています。
多くの場合、PostgreSQL内製ツールはあなたの要求に対して十分以上の情報を提供します。ツールボックス内の最も重要なツールは、SQLのEXPLAIN
コマンドと、その代わりとなるEXPLAIN ANALYZE
です。pg_catalog.pg_stat_activity
とpg_catalog.pg_locks
ビューもまた重要なものです。
wikiのPerformanceカテゴリ、カテゴリとPostgreSQL文書にPostgreSQLとシステムのチューニングについてたくさんの参考文書が見つけられます。行き詰った場合は、SlowQueryQuestionsを参照してください。
I/O、CPU、メモリ使用量調査のためのシステムレベルのツール
`wchan'フォーマット識別子を伴う`ps'、`vmstat'、`top'、`iotop'、`blktrace' + `blkparse'、`btrace'、`sar'、alt-sysrq-t等のようなツールはシステムにて何が動作しているかと、どこで物事の遅延が発生しているかをよりよく学ぶ手助けとなります。
サポートされたシステム(現在はSolarisとFreeBSD)上では、`dtrace'もまた強力なツールです。PostgreSQLは内部動作の調査と、動作しているオペレーティングシステムのものと同様に性能の調査を行うことを許可するためのDTraceフックを備えています。
Windowsユーザは、SysInternalsツールの Process Monitor、Process ExplorerそしてFileMonが役に立ちます。
Unix/Linuxツール
ps
"wchan"オプションはどのプロセスが'D'状態(カーネルシステムコール内で割り込み不可能なスリープ状態)で動作しているかを確認するのに本当に有用です。例えば以下となります:
ps -e -o pid,ppid,wchan:60,cmd | grep post
カーネルソースを調査するか、Googleを利用するか、wchan
フィールドの値が何を意味するかを考察する必要があるでしょう。
vmstat
vmstat
はシステム全体のレベルでのCPU、ディスクそしてメモリの使用状況の概略を知る利便性を提供します。継続的に更新する時に最も有用で、例えば以下となります:
vmstat 1
もしくは
vmstat 60
(数字は更新される秒数)
出力は以下のようにされます:
$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 4144 242088 707752 2307192 0 0 0 26 71 73 2 1 97 1 0 0 4144 242080 707752 2307220 0 0 0 0 944 1917 2 1 97 0 0 0 4144 241956 707752 2307220 0 0 0 64 772 1579 1 1 98 0
top
vmstatのように、ディスク情報は使い物にならないもののいくつかのシステムの概略情報を提供します。非常に設定豊富です。
"used"と"free"のメモリの値に惑わされないでください。使用中の本当のメモリは、"buffers"にカーネルディスクキャッシュが含まれることから(おおよそ)"used"の値から"buffers"を引いた値となります。カーネルはほとんどの空きメモリをディスクキャッシュのために使用しますが、メモリが他の用途への適合に要求されるとキャッシュは縮小します。結局、真の空きメモリはあなたの役に立たない無駄な値を示します。
free
freeはシステム全体のフリーメモリと使用済みメモリを表示します。
$ free -m total used free shared buffers cached Mem: 3960 3726 234 0 721 2252 -/+ buffers/cache: 752 3208 Swap: 2070 4 2066
"-/+ buffers/cache"の横にある"free"の値はシステムで一般的に"本当の"空きメモリの容量と考えられるものの一つです。"-m"オプションはメガバイト単位の表示を依頼します。
sar
プロセスの統計管理を行います。manページを参照してください。
gdb
なぜデバッガが性能分析ツールに挙げられているのでしょうか。
何故なら時々、バックエンドにデバッガをアタッチし、バックトレースを取得するためにバックエンドに定期的に割り込むことで何が起きているか見つけ出そうとすることが、問題を追跡するための方法の助けとなるからです。
Generating a stack trace of a PostgreSQL_backendを参照してください。
Wireshark、tsharkとtcpdump
これらのツールはネットワークインタフェースのトラフィックの監視と分析のためのものです。もしネットワークインタフェースを(訳注:peggedを「端子を挟み込んで計測する」意としています)計測しつづけけることで問題発見を行えない場合、これらのツールはデータの転送/受信のふるまいを可視化する手助けとなります。
pktstat
ネットワークインタフェース用のtopのようなユーティリティです。でも悲しいことにプロセスIDまたは名称を表示しませんが、送信元と送信先ポート情報からこれらを確認できます。通信状況を使ってバックエンドがインタフェースを飽和させているかを手軽に追跡できます。
Linuxのみ利用可能なツール
iostat
システムのI/O動作状況とブロックデバイス上の読み込みについての集計情報を提供します。どのプロセスが読み込みを行っているかの情報は提供されませんが、リアルタイムに短く簡単に確認するための出力内容を提供します。vmstatのように、例えば"iostat 1"のように継続的な使いやすい方式で最も使用されます。
詳細はmanページを参照してください。
blktrace, blkparse and btrace
これらは与えられたブロックデバイス上の動作状況、どのプロセスが動作を生じているか、そしてそれらが動作しているかについて非常に下層の情報を得るためのツールです。非常に多くの情報を提供しますが、多少フィルタすることができます。多少の割り込み負荷を生じますが、"何がディスクをひっかきまわしているか"状態を知ることができます。
bgwriterとwal writerのために、PostgreSQLバックエンドが何でディスクに忙しく書き込みをしているかを理解することは簡単ではありません。それでも、重い読み込みのロードを追跡しバックエンドが(例えばpg_catalog.pg_stat_activity
を使って)何をしているかを見いだすために使用します。
出力は以下のようになります:
9,1 0 246 11.339004193 1383 U N [postgres] 0 9,1 0 247 11.340029833 1383 A R 118356256 + 96 <- (252,3) 34469792 9,1 0 248 11.340030339 1383 Q R 118356256 + 96 [postgres] 9,1 0 249 11.340054022 1383 A R 118356352 + 128 <- (252,3) 34469888 9,1 0 250 11.340054341 1383 Q R 118356352 + 128 [postgres] 9,1 0 251 11.340062014 1383 A R 118356480 + 32 <- (252,3) 34470016 9,1 0 252 11.340062367 1383 Q R 118356480 + 32 [postgres]
... 加えて最終行に簡単な集計値が表示されます。
strace
strace
はプロセスにアタッチし、プロセスが作成するすべてのシステムコールを引数を含めて報告可能な有用なツールです。プロセスが何のファイルを開いたか、もしくは何かを待っているかなどを見いだすために非常に有効です。
有用な解釈には、いくつかのCプログラミングの知識とPOSIX APIについてのアイディアを必要とします。
(他のシステムでは別名で似たようなツールが存在することに注意してください。例えばいくつかのBSDではtruss
があります。)
oprofile
一般的なユーザは有用ではないでしょうが、Pgなんちゃらを持っているもしくはPgなんちゃらを利用したライブラリをもっており、変に動作が遅く、理由も分からないときに手軽なツールです。
alt-sysrq-t
"マジックSysRqキー"です。例えばシステムのすべてのプロセスのカーネルスタックのスタックトレースを出力してからシステムコールがハングアップした時のように、カーネル内にて'D'状態でスタックされた謎なプロセスを追跡するために主に有用なものです。ほぼ、Pgがカーネルバグ、ハードウェアの問題、ファイルシステムのバグなどによって問題を抱えているかどうかを見いだすために使用されます。
使用する前に'sysctl -w kernel.sysrq=1'にて有効にすることが必要です。
DTrace
DTraceページを参照してください。
Windows tools
Process Monitor
Process Explorer
FileMon
PostgreSQL中心の性能ツール
pgBadger
pgBadgerはPostgreSQLのログファイルから速度改善のためのすべての詳細な報告書を作成するログ解析ツールです
Page originally by --Ringerc 07:26, 26 November 2009 (UTC)