Performance Analysis Tools/ja

From PostgreSQL wiki
Jump to navigationJump to search


原文最終更新日:22 May 2015

性能解析ツール

このページはシステム全体、システムリソースのPostgreSQLにおける使い方、PostgreSQLの性能に対するボトルネックの可能性に関する事柄などについてより学ぶための、PostgreSQLの外側のデータ収集ツールに焦点をあてています。

多くの場合、PostgreSQL内製ツールはあなたの要求に対して十分以上の情報を提供します。ツールボックス内の最も重要なツールは、SQLのEXPLAINコマンドと、その代わりとなるEXPLAIN ANALYZEです。pg_catalog.pg_stat_activitypg_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 MonitorProcess 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なんちゃらを利用したライブラリをもっており、変に動作が遅く、理由も分からないときに手軽なツールです。

Profiling with OProfile

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)