SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
Copyright © 2012 NTT DATA Corporation 
2013年2月9日(土) 
perfを使ったPostgreSQLの解析 ~後編
2 
Copyright © 2012NTT DATA Corporation 
Agenda 
後編 
1.前編の復習 
2.perfを使ったプロファイリングの流れ 
3.PostgreSQLをプロファイリングしてみよう 
4.perfでハマった点 
5.perfの使いどころ 
6.Perfこうなったらいいな 
7.まとめ
3 
Copyright © 2012NTT DATA Corporation 
Agenda 
前編 
1.はじめに 
2.プロファイリングとは? 
3.perfとは 
4.perfの仕組み 
5.perfと他のパフォーマンス解析ツールとの比較 
6.perfの導入と使い方 
7.perfを使ってみよう 
8.まとめ
Copyright © 2012 NTT DATA Corporation 
4 
0.はじめに
5 
Copyright © 2012 NTT DATA Corporation 
あらためまして自己紹介 
Copyright © 2011 NTT DATA CORPORATION 
NTTデータ 
基盤システム事業本部 
システム方式技術ビジネスユニット 
江川 大地 
所属 
やっていたこと 
氏名 
年代 
やったこと 
-2009 
歴史のお勉強(大学時代) 
2009-2011 
Webシステム開発(Javaなど) 
2011-現在 
PostgreSQL関係 
近況 
1ヶ月くらいインドに行ってました。 
Twitter 
@daiti0804
6 
Copyright © 2012 NTT DATA Corporation 
本日のお題 
お題 
perfを使ったPostgreSQLの解析(後編) 
今日説明 
すること 
perfを使っての解析
7 
Copyright © 2012NTT DATA Corporation 
参考資料 
本日の講演に当たって参考にした資料等 
perf ソースコード 
—[Linuxカーネルソースのルート]/tools/perf配下 
perf ドキュメント 
—[Linuxカーネルソースのルート]/tools/perf/Documentation 
perf wiki 
—https://perf.wiki.kernel.org/index.php/Main_Page 
『Linuxカーネル Hacks 
―パフォーマンス改善、開発効率向上、省電力化のためのテクニック』 
高橋 浩和 (監修), 池田 宗広, 大岩 尚宏, 島本 裕志, 竹部 晶雄, 平松 雅巳(著)
Copyright © 2012 NTT DATA Corporation 
8 
1.前回の復習
9 
Copyright © 2012 NTT DATA Corporation 
perfとは 
 perf(Performance Counters for Linux)とは? 
-Linuxカーネル上の統合パフォーマンスツール 
-イベント数計測にCPUに内蔵されているレジスタを使用 
-perf tools (ツールの集合体、サブコマンド群) 
Performance Countersとは?? 
-ハードウェアのイベントの回数を計測するCPU内蔵のレジスタ 
 イベントとは?? 
-キャッシュミス、分岐予測ミス(HWイベント) 
-ページフォルト、コンテキストスイッチ(SWイベント)
10 
Copyright © 2012 NTT DATA Corporation 
プロファイラとしてありたい姿 
低いオーバヘッド 
-解析対象のシステムは既に何らかのオーバヘッドが発生している ことが多い。そこにさらに負荷がかかるツールを使おうとしても、 ツールが動かなかったり、システムがダウンする可能性もある。 
多くの情報 
-トラブルの原因はいっぱい考えられるから。 
見やすい表示(多くの情報の中から取捨選択が可能) 
-なにがどう書いてあるのか分からないと、トラブルの原因が表示 されていても見落とす可能性もある。
Copyright © 2012 NTT DATA Corporation 
11 
2.perfを使ったプロファイリングの流れ
12 
Copyright © 2012 NTT DATA Corporation 
perfを使ったプロファイリングの流れ 
0.ツールの選択 
1.イベントの設定 
2. データの取得 
3.取得したデータからの解析
13 
Copyright © 2012 NTT DATA Corporation 
perf の使い方 
perfの使い方 
代表的なコマンド 
# perf <コマンド> [オプション] 
コマンド 
説明 
perf annotate 
perf recordで作成したperfのデータを読み込み、 関数で呼び出した命令レベ ルのトレース結果を表示する。 
perf probe 
新たに動的なトレースポイント(イベント)を定義する。 
perf record 
イベントの記録を行う。 
perf report 
perf recordで記録したイベントをプロンプトに表示する。 
perf script 
perf recordで作成したperfのデータを読み込み、 トレース結果を表示する。 
perf stat 
引数に指定したコマンドのパフォーマンスカウンタの値を表示する。 
perf top 
Linuxコマンドの”top”のように動的にシステム監視を行う。 
前編より
14 
Copyright © 2012 NTT DATA Corporation 
0.ツールの選択 
usage: perf [--version] [--help] COMMAND [ARGS] The most commonly used perf commands are: annotate Read perf.data (created by perf record) and display annotated code archive Create archive with object files with build-ids found in perf.data file bench General framework for benchmark suites buildid-cache Manage build-id cache. buildid-list List the buildids in a perf.data file diff Read two perf.data files and display the differential profile evlist List the event names in a perf.data file inject Filter to augment the events stream with additional information kmem Tool to trace/measure kernel memory(slab) properties kvm Tool to trace/measure kvm guest os list List all symbolic event types lock Analyze lock events probe Define new dynamic tracepoints record Run a command and record its profile into perf.data report Read perf.data (created by perf record) and display the profile sched Tool to trace/measure scheduler properties (latencies) script Read perf.data (created by perf record) and display trace output stat Run a command and gather performance counter statistics test Runs sanity tests. timechart Tool to visualize total system behavior during a workload top System profiling tool.
15 
Copyright © 2012 NTT DATA Corporation 
1.イベントの選択 
分類 
説明 
具体例 
Hardware event 
プロッセサで計測されるイ ベント。 
cpu-cycles, cache-missesなど 
Software event 
カーネルのカウンタで計測 されるイベント。 
cpu-clock, page-faultsなど 
Hardware cache event 
プロッセサで計測されるイ ベント。 
L1-dcache-load-misses, branch-loadsなど 
Tracepoint event 
カーネルの処理を記録する ためにカーネルに埋め込ま れたトレースポイント。 
sched:sched_stat_runtime, syscalls:sys_enter_socket など 
前編より
16 
Copyright © 2012 NTT DATA Corporation 
2. データの取得 
# perf record -e cpu-clock stress -c 4 -i 2 -m 2 --timeout 10s stress: info: [5843] dispatching hogs: 4 cpu, 2 io, 2 vm, 0 hdd stress: info: [5843] successful run completed in 10s [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.247 MB perf.data (~10775 samples) ] # ls perf.data 
perf recordなどで、データを記録する。
17 
Copyright © 2012 NTT DATA Corporation 
3. 取得したデータからの解析 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 
9.82% postgres postgres [.] AllocSetAlloc 
3.51% postgres postgres [.] base_yyparse 
2.97% postgres postgres [.] SearchCatCache 
2.69% postgres postgres [.] MemoryContextAllocZeroAligned 
2.01% postgres postgres [.] expression_tree_walker 
1.92% postgres postgres [.] MemoryContextAlloc 
1.83% postgres libc-2.15.so [.] __strcmp_sse42 
1.77% postgres postgres [.] hash_search_with_hash_value 
1.63% postgres postgres [.] nocachegetattr 
1.33% postgres postgres [.] MemoryContextAllocZero 
1.26% postgres postgres [.] core_yylex 
1.23% postgres libc-2.15.so [.] __memcpy_ssse3 
1.22% postgres postgres [.] hash_any 
1.03% postgres postgres [.] hash_uint32 
1.00% postgres postgres [.] new_list 
0.95% postgres postgres [.] lappend 
: 
perf reportなどで、データを表示、解析する。
Copyright © 2012 NTT DATA Corporation 
18 
3.PostgreSQLをプロファイリングしてみよう
19 
Copyright © 2012 NTT DATA Corporation 
今回の講演に当たって使用した環境 
ソフトウェア名 
バージョン 
備考 
Fedra 
17 
今回は物理マシンにInstall 
Linux kernel 
3.2.2 
PostgreSQL 
9.2.2
20 
Copyright © 2012 NTT DATA Corporation 
auto_explainを使用したときのオーバヘッドを解析 
auto_explainとは… 
–設定した時間よりも遅いクエリの実行計画をログに記録する機能。 
–アプリケーションにおける最適化されていない問い合わせを追跡するのに特に有用。 
(by マニュアル) 
–ONにしておけば、サポートする側が楽になるかも。 
: 
: 
: 
auto_explain.log_min_duration = 10s 
: 
: 
LOG: duration: … 
SQL 
10.1秒
21 
Copyright © 2012 NTT DATA Corporation 
もう少しだけ… 
executor 
es.instrument=on 
es.start_time=now() 
es.total_time > x秒 
auto_explainを使用したときのオーバヘッドを解析
22 
Copyright © 2012 NTT DATA Corporation 
auto_explain…マニュアルの気になる記述 
マニュアルより 
: 
: 
: 
auto_explain.log_analyze (boolean) 
auto_explain.log_analyzeは、実行計画のログが取得されたときに出力されるものとして、単 にEXPLAIN出力ではなく、EXPLAIN ANALYZE出力を行います。このパラメータはデフォルト で無効です。スーパユーザのみ、この設定を変更できます。 
注意: このパラメータが有効の場合、計画ノードごとの時間的調整は事実上ログされるまで如 何に時間が掛かろうと、全ての実行文に対して引き起こります。極端に性能上のマイナスの影 響が起こり得ます。 
: 
: 
: 
(赤字と下線は講演者による)
23 
Copyright © 2012 NTT DATA Corporation 
auto_explainをONにした場合のオーバヘッド 
1.EXPLAIN ANALYZEの情報収集のためのオーバヘッド 
2.サーバログ出力にかかるI/O負荷 
auto_explainを使用したときのオーバヘッド
24 
Copyright © 2012 NTT DATA Corporation 
auto_explainをONにした場合のオーバヘッド 
1.EXPLAIN ANALYZEの情報収集のためのオーバヘッド 
2.サーバログ出力にかかるI/O負荷 
perf は、I/O負荷を測る用途には適していないので、今回は、1のオーバヘッド に特化した解析を行う。 
auto_explainを使用したときのオーバヘッド
25 
Copyright © 2012 NTT DATA Corporation 
ログ出力のオフ(IO負荷の軽減) 
ログ出力にかかる処理が現れないようにするため。 
# 下記の処理を行う。 
事前準備 
$ cat postgresql.conf 
: 
# - Where to Log - 
log_destination = 'stderr' # Valid values are combinations of 
# This is used when logging to stderr: 
logging_collector = on # Enable capturing of stderr and csvlog 
# These are only used if logging_collector is on: 
log_directory = 'pg_log' # directory where log files are written, 
# can be absolute or relative to PGDATA 
log_filename = 'postgresql-tmp.log' # log file name pattern, 
: 
$ ln /dev/null /xxxxx/data/pg_logpostgresql-tmp.log 
※ ただし、この処理を行ってもログを生成する処理は行われる。
26 
Copyright © 2012 NTT DATA Corporation 
どれにしようか… 
List of pre-defined events (to be used in -e): 
cpu-cycles OR cycles [Hardware event] 
instructions [Hardware event] 
cache-references [Hardware event] 
cache-misses [Hardware event] 
branch-instructions OR branches [Hardware event] 
branch-misses [Hardware event] 
bus-cycles [Hardware event] 
stalled-cycles-frontend OR idle-cycles-frontend [Hardware event] 
stalled-cycles-backend OR idle-cycles-backend [Hardware event] 
ref-cycles [Hardware event] 
cpu-clock [Software event] 
task-clock [Software event] 
page-faults OR faults [Software event] 
context-switches OR cs [Software event] 
cpu-migrations OR migrations [Software event] 
minor-faults [Software event] 
major-faults [Software event] 
alignment-faults [Software event] 
emulation-faults [Software event] 
L1-dcache-loads [Hardware cache event] 
L1-dcache-load-misses [Hardware cache event] 
: 
: 
: 
1.イベントの選択
27 
Copyright © 2012 NTT DATA Corporation 
いくつかのイベントの取得結果をまとめてみてみたい 
そんなときには、 
1.イベントの選択
28 
Copyright © 2012 NTT DATA Corporation 
perf stat 
perf statは、指定したコマンドのパフォーマンスカウンタの値を表示できる。 perf record/reportと違い、指定したコマンドの総合的な統計情報を得るこ とが可能である。 
こんな時に便利 
—あるコマンドについて、総合的な(複数のイベントにまたがった)性能測 定情報が知りたい。 
—性能の悪い処理について、何が原因なのか知りたい。 
—性能改善(暫定対処、本格対処)を行うにあたっての数値目標を出したい。 
前編より
29 
Copyright © 2012 NTT DATA Corporation 
perf stat 
perf statは、指定したコマンドのパフォーマンスカウンタの値を表示できる。 perf record/reportと違い、指定したコマンドの総合的な統計情報を得るこ とが可能である。 
こんな時に便利 
—あるコマンドについて、総合的な(複数のイベントにまたがった)性能測 定情報が知りたい。 
—性能の悪い処理について、何が原因なのか知りたい。 
—性能改善(暫定対処、本格対処)を行うにあたっての数値目標を出したい。 
前編より
30 
Copyright © 2012 NTT DATA Corporation 
# 
比較対象 
内容 
意図 
1 
ノーマル 
実行計画を取得しない状態。 
基準値。 
2 
EXPLAINモード 
EXPLAINコマンドを発行し た実行計画を自動的に取得 する。 
実行計画を取得、保持する 処理のオーバヘッドを知り たい。 
3 
EXPLAIN ANALYZEモード 
EXPLAIN ANALYZEコマンド を発行した実行計画を自動 的に取得する。 
実際のコマンド実行時間な どEXPLAIN ANALYZEで取れ る情報を取得、保持する処 理のオーバヘッドが知りた い。 
測定方針~今回の比較対象
31 
Copyright © 2012 NTT DATA Corporation 
測定方針~仮説 
EXPLAIN ANALYZEを考える 
-EXPLAIN ANALYZE による負荷は、実行計画を取得、保持する処理。 
executor 
es.instrument=on es.start_time=now() 
es.total_time > x秒
32 
Copyright © 2012 NTT DATA Corporation 
測定方針~仮説 
EXPLAIN ANALYZEを考える 
-EXPLAIN ANALYZE による負荷は、実行計画を取得、保持する処理。 
executor 
es.instrument=on 
es.start_time=now() 
es.total_time > x秒
33 
Copyright © 2012 NTT DATA Corporation 
測定方針 
SQL, EXPLAIN ANALYZEをどう走らせる? 
-SQLの重さに関わらず、 EXPLAIN ANALYZEが走るように設定する。 
-実行計画取得の閾値を 0秒に設定(postgresql.confのパラメタ)。 
-EXPLAIN ANALYZEの影響を相対的に大きくするため、SQLは負荷が小さいものを選択。 pgbench –S オプション で発行。 
$ cat postgresql.conf : auto_explain.log_min_duration = ‘0’ :
34 
Copyright © 2012 NTT DATA Corporation 
測定の流れ(1/2) 
どう測定する? 
-SQLや実行計画を取得する処理の情報のみを取得したい。 
$ pgbench –i test $ pgbench –S –T 600 test Sarting vacuum... end. 
1.pgbenchでSQLを発行。 
2.psコマンドで、プロセスIDを調べる。 
# ps aux | grep postgres : postgres 6868 0.0 0.0 121832 772 ? Ss Feb07 0:00 postgres: logger process postgres 6870 0.0 0.0 153452 1408 ? Ss Feb07 0:00 postgres: checkpointer process postgres 6871 0.0 0.0 153452 912 ? Ss Feb07 0:00 postgres: writer process postgres 6872 0.0 0.0 153452 908 ? Ss Feb07 0:00 postgres: wal writer process postgres 6873 0.0 0.0 121964 968 ? Ss Feb07 0:00 postgres: stats collector process postgres 7480 15.4 0.0 13796 1052 pts/1 S+ 00:29 1:25 pgbench -S -T 600 test postgres 7482 89.4 0.2 154676 19620 ? Rs 00:29 8:14 postgres: postgres test [local] SELECT daichi 7512 0.0 0.0 109420 880 pts/10 S+ 00:38 0:00 grep --color=auto postgres
35 
Copyright © 2012 NTT DATA Corporation 
測定の流れ(2/2) 
# perf stat -p 7482 sleep 10 Performance counter stats for process id '5641': 8356.290496 task-clock # 0.836 CPUs utilized 82,898 context-switches # 0.010 M/sec 332 CPU-migrations # 0.040 K/sec 0 page-faults # 0.000 K/sec 13,800,470,721 cycles # 1.652 GHz [100.00%] 9,910,834,211 stalled-cycles-frontend # 71.82% frontend cycles idle [100.00%] 8,099,655,897 stalled-cycles-backend # 58.69% backend cycles idle [100.00%] 8,873,259,146 instructions # 0.64 insns per cycle # 1.12 stalled cycles per insn [100.00%] 1,752,642,657 branches # 209.739 M/sec [100.00%] 29,767,895 branch-misses # 1.70% of all branches 10.000876597 seconds time elapsed 
3. 調べたプロセスIDをもとに、perf statを実行
36 
Copyright © 2012 NTT DATA Corporation 
perf stat出力結果(3回の計測の平均値) 
データ取得結果(perf stat) 
比較対象 
ノーマル 
EXPLAINモード 
EXPLAIN 
ANALYZEモード 
task-clock 
8,525 
8,474 
8,530 
context- switches 
85,115 
83,528 
82,456 
CPU-migrations 
283 
419 
898 
page-faults 
0 
0 
0 
cycles 
14,073,651,082 
13,996,156,300 
14,114,324,153 
stalled-cycles- frontend 
10,082,417,996 
10,099,475,984 
10,020,292,828 
stalled-cycles- backend 
8,224,267,261 
8,276,793,827 
8,167,568,987 
instructions 
9,110,231,843 
8,908,543,005 
9,237,358,941 
branches 
1,799,358,657 
1,759,630,145 
1,790,358,429 
branch-misses 
30,480,893 
29,803,620 
33,819,770 
tps(pgbenchの アウトプット) ※ 
7420 
6328 
5553 
※ コネクション確立の時間を含んでいない。小数点以下四捨五入
37 
Copyright © 2012 NTT DATA Corporation 
perf stat出力結果(3回の計測の平均値) 
データ取得結果(perf stat) 
比較対象 
ノーマル 
EXPLAINモード 
EXPLAIN 
ANALYZEモード 
task-clock 
8,525 
8,474 
8,530 
context- switches 
85,115 
83,528 
82,456 
CPU-migrations 
283 
419 
898 
page-faults 
0 
0 
0 
cycles 
14,073,651,082 
13,996,156,300 
14,114,324,153 
stalled-cycles- frontend 
10,082,417,996 
10,099,475,984 
10,020,292,828 
stalled-cycles- backend 
8,224,267,261 
8,276,793,827 
8,167,568,987 
instructions 
9,110,231,843 
8,908,543,005 
9,237,358,941 
branches 
1,799,358,657 
1,759,630,145 
1,790,358,429 
branch-misses 
30,480,893 
29,803,620 
33,819,770 
tps(pgbenchの アウトプット) ※ 
7420 
6328 
5553 
※ コネクション確立の時間を含んでいない。小数点以下四捨五入
38 
Copyright © 2012 NTT DATA Corporation 
perf stat出力結果(3回の計測の平均値) 
データ取得結果(perf stat) 
比較対象 
ノーマル 
EXPLAINモード 
EXPLAIN 
ANALYZEモード 
task-clock 
8,525 
8,474 
8,530 
context- switches 
85,115 
83,528 
82,456 
CPU-migrations 
283 
419 
898 
page-faults 
0 
0 
0 
cycles 
14,073,651,082 
13,996,156,300 
14,114,324,153 
stalled-cycles- frontend 
10,082,417,996 
10,099,475,984 
10,020,292,828 
stalled-cycles- backend 
8,224,267,261 
8,276,793,827 
8,167,568,987 
instructions 
9,110,231,843 
8,908,543,005 
9,237,358,941 
branches 
1,799,358,657 
1,759,630,145 
1,790,358,429 
branch-misses 
30,480,893 
29,803,620 
33,819,770 
tps(pgbenchの アウトプット) ※ 
7420 
6328 
5553 
CPU-migrationに違いが表れている 
※ コネクション確立の時間を含んでいない。小数点以下四捨五入
39 
Copyright © 2012 NTT DATA Corporation 
CPU-migrationとは… 
1 
2 
プロセス A 
メモリ 
メモリ 
プロセスは、OSによってスケジューリングされたCPUで処理を行いたい。 
プロセスAは、 CPU1の近く にいるし、前 回のキャッ シュもあるし、 CPU1で仕事 させよう。 
OS
40 
Copyright © 2012 NTT DATA Corporation 
CPU-migrationとは… 
2 
プロセス A 
メモリ 
メモリ 
CPUが他のプロセスによって、占有されている場合がある。 
ぐぬぬ 
OS 
プロセス Z 
1
41 
Copyright © 2012 NTT DATA Corporation 
CPU-migrationとは… 
2 
プロセス A 
メモリ 
メモリ 
その場合は、他のCPUに移動して処理を行う。 
仕方ない… 
OS 
プロセス Z 
1
42 
Copyright © 2012 NTT DATA Corporation 
perf recordで特定のイベントを起こす処理の動きを追う 
perf recordで動きを追う 
# perf record -e cpu-migrations -o explain_ana_mig.data -p 8968 sleep 10 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.058 MB explain_ana_mig.data (~2553 samples) ] 
$ pgbench –i test 
$ pgbench –S –T 600 test 
Sarting vacuum... end. 
$ ps aux | grep postgres 
: 
postgres 8868 0.0 0.0 121832 772 ? Ss Feb07 0:00 postgres: logger process 
postgres 8870 0.0 0.0 153452 1408 ? Ss Feb07 0:00 postgres: checkpointer process 
postgres 8861 0.0 0.0 153452 912 ? Ss Feb07 0:00 postgres: writer process 
postgres 8862 0.0 0.0 153452 908 ? Ss Feb07 0:00 postgres: wal writer process 
postgres 8963 0.0 0.0 121964 968 ? Ss Feb07 0:00 postgres: stats collector process 
postgres 8960 15.4 0.0 13796 1052 pts/1 S+ 00:29 1:25 pgbench -S -T 600 test 
postgres 8968 89.4 0.2 154676 19620 ? Rs 00:29 8:14 postgres: postgres test [local] SELECT 
daichi 8969 0.0 0.0 109420 880 pts/10 S+ 00:38 0:00 grep --color=auto postgres 
perf recordを実行 
perf実行前の準備
43 
Copyright © 2012 NTT DATA Corporation 
perf reportで記録したデータを出力する 
perf reportで結果出力 
# perf report -i explain_ana_mig.data 
ノーマル 
100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 
100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 
100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 
EXPLAIN 
EXPLAIN ANALYZE
44 
Copyright © 2012 NTT DATA Corporation 
perf reportで記録したデータを出力する 
perf reportで結果出力 
# perf report -i explain_ana_mig.data 
ノーマル 
100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 
100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 
100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 
EXPLAIN 
EXPLAIN ANALYZE 
CPU-migrationを。原因となる命令内容に違いがあるか?
45 
Copyright © 2012 NTT DATA Corporation 
perf recordで特定のイベントを起こす処理の動きを追う 
perf recordで動きを追う 
# perf record -e instructions -o explain_ana_instructions.data -p 8968 sleep 10 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.058 MB explain_ana_mig.data (~2553 samples) ] 
# perf report -i explain_ana_instructions.data 
instructionsをイベント指定して、perf recordを実行 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 8.12% postgres postgres [.] AllocSetAlloc 3.01% postgres postgres [.] append_with_tabs 2.79% postgres libc-2.15.so [.] vfprintf 2.78% postgres libc-2.15.so [.] __printf_fp 2.74% postgres postgres [.] SearchCatCache 2.53% postgres postgres [.] base_yyparse 2.07% postgres libc-2.15.so [.] __strcmp_sse42 1.95% postgres postgres [.] MemoryContextAllocZeroAligned 1.44% postgres postgres [.] expression_tree_walker 1.43% postgres postgres [.] MemoryContextAlloc 1.32% postgres postgres [.] hash_search_with_hash_value 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 1.28% postgres postgres [.] ScanKeywordLookup 1.28% postgres postgres [.] nocachegetattr 1.24% postgres postgres [.] hash_any 1.22% postgres libc-2.15.so [.] _IO_default_xsputn 1.11% postgres postgres [.] core_yylex 1.00% postgres postgres [.] MemoryContextAllocZero : : 
EXPLAIN ANALYZE
46 
Copyright © 2012 NTT DATA Corporation 
出力結果の比較 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 
8.12% postgres postgres [.] AllocSetAlloc 
3.01% postgres postgres [.] append_with_tabs 
2.79% postgres libc-2.15.so [.] vfprintf 
2.78% postgres libc-2.15.so [.] __printf_fp 
2.74% postgres postgres [.] SearchCatCache 
2.53% postgres postgres [.] base_yyparse 
2.07% postgres libc-2.15.so [.] __strcmp_sse42 
1.95% postgres postgres [.] MemoryContextAllocZeroAligned 
1.44% postgres postgres [.] expression_tree_walker 
1.43% postgres postgres [.] MemoryContextAlloc 
1.32% postgres postgres [.] hash_search_with_hash_value 
1.31% postgres libc-2.15.so [.] __memcpy_ssse3 
1.28% postgres postgres [.] ScanKeywordLookup 
1.28% postgres postgres [.] nocachegetattr 
: 
EXPLAIN ANALYZE Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8318102033 
10.11% postgres postgres [.] AllocSetAlloc 
3.27% postgres postgres [.] base_yyparse 
3.09% postgres postgres [.] SearchCatCache 
2.72% postgres postgres [.] MemoryContextAllocZeroAligned 
1.95% postgres libc-2.15.so [.] __strcmp_sse42 
1.91% postgres postgres [.] MemoryContextAlloc 
1.80% postgres postgres [.] expression_tree_walker 
1.68% postgres postgres [.] hash_search_with_hash_value 
1.53% postgres postgres [.] nocachegetattr 
1.40% postgres postgres [.] hash_any 
1.31% postgres postgres [.] core_yylex 
1.31% postgres libc-2.15.so [.] __memcpy_ssse3 
: 
ノーマル Samples:_38K_of_event_'instructions',_Event_count_(approx.):_8745281382 
10.03% postgres postgres [.] AllocSetAlloc 
3.23% postgres postgres [.] SearchCatCache 
3.22% postgres postgres [.] base_yyparse 
2.62% postgres postgres [.] MemoryContextAllocZeroAligned 
1.88% postgres postgres [.] expression_tree_walker 
1.86% postgres postgres [.] MemoryContextAlloc 
1.80% postgres postgres [.] hash_search_with_hash_value 
1.78% postgres libc-2.15.so [.] __strcmp_sse42 
1.44% postgres postgres [.] nocachegetattr 
1.32% postgres postgres [.] hash_any 
1.32% postgres libc-2.15.so [.] __memcpy_ssse3 
1.28% postgres postgres [.] core_yylex 
: 
EXPLAIN
47 
Copyright © 2012 NTT DATA Corporation 
出力結果の比較 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 
8.12% postgres postgres [.] AllocSetAlloc 
3.01% postgres postgres [.] append_with_tabs 
2.79% postgres libc-2.15.so [.] vfprintf 
2.78% postgres libc-2.15.so [.] __printf_fp 
2.74% postgres postgres [.] SearchCatCache 
2.53% postgres postgres [.] base_yyparse 
2.07% postgres libc-2.15.so [.] __strcmp_sse42 
1.95% postgres postgres [.] MemoryContextAllocZeroAligned 
1.44% postgres postgres [.] expression_tree_walker 
1.43% postgres postgres [.] MemoryContextAlloc 
1.32% postgres postgres [.] hash_search_with_hash_value 
1.31% postgres libc-2.15.so [.] __memcpy_ssse3 
1.28% postgres postgres [.] ScanKeywordLookup 
1.28% postgres postgres [.] nocachegetattr 
: 
EXPLAIN ANALYZE Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8318102033 10.11% postgres postgres [.] AllocSetAlloc 3.27% postgres postgres [.] base_yyparse 3.09% postgres postgres [.] SearchCatCache 2.72% postgres postgres [.] MemoryContextAllocZeroAligned 1.95% postgres libc-2.15.so [.] __strcmp_sse42 1.91% postgres postgres [.] MemoryContextAlloc 1.80% postgres postgres [.] expression_tree_walker 1.68% postgres postgres [.] hash_search_with_hash_value 1.53% postgres postgres [.] nocachegetattr 1.40% postgres postgres [.] hash_any 1.31% postgres postgres [.] core_yylex 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 : 
ノーマル
48 
Copyright © 2012 NTT DATA Corporation 
出力結果の比較 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 
8.12% postgres postgres [.] AllocSetAlloc 
3.01% postgres postgres [.] append_with_tabs 
2.79% postgres libc-2.15.so [.] vfprintf 
2.78% postgres libc-2.15.so [.] __printf_fp 
2.74% postgres postgres [.] SearchCatCache 
2.53% postgres postgres [.] base_yyparse 
2.07% postgres libc-2.15.so [.] __strcmp_sse42 
1.95% postgres postgres [.] MemoryContextAllocZeroAligned 
1.44% postgres postgres [.] expression_tree_walker 
1.43% postgres postgres [.] MemoryContextAlloc 
1.32% postgres postgres [.] hash_search_with_hash_value 
1.31% postgres libc-2.15.so [.] __memcpy_ssse3 
1.28% postgres postgres [.] ScanKeywordLookup 
1.28% postgres postgres [.] nocachegetattr 
: 
EXPLAIN ANALYZE Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8318102033 
10.11% postgres postgres [.] AllocSetAlloc 
3.27% postgres postgres [.] base_yyparse 
3.09% postgres postgres [.] SearchCatCache 
2.72% postgres postgres [.] MemoryContextAllocZeroAligned 
1.95% postgres libc-2.15.so [.] __strcmp_sse42 
1.91% postgres postgres [.] MemoryContextAlloc 
1.80% postgres postgres [.] expression_tree_walker 
1.68% postgres postgres [.] hash_search_with_hash_value 
1.53% postgres postgres [.] nocachegetattr 
1.40% postgres postgres [.] hash_any 
1.31% postgres postgres [.] core_yylex 
1.31% postgres libc-2.15.so [.] __memcpy_ssse3 
: 
ノーマル
49 
Copyright © 2012 NTT DATA Corporation 
PATH: src/backend/utils/error/elog.c 
append_with_tabsとは 
3011 /* 
3012 * append_with_tabs 
3013 * 
3014 * Append the string to the StringInfo buffer, inserting a tab after any 
3015 * newline. 
3016 */ 
3017 static void 
3018 append_with_tabs(StringInfo buf, const char *str) 
3019 { 
3020 char ch; 
3021 
3022 while ((ch = *str++) != '¥0') 
3023 { 
3024 appendStringInfoCharMacro(buf, ch); 
3025 if (ch == '¥n') 
3026 appendStringInfoCharMacro(buf, '¥t'); 
3027 } 
3028 } 
ログ生成時、改行が入る際にタブを挿入する関数。ログの整形などに使用される。
50 
Copyright © 2012 NTT DATA Corporation 
append_with_tabsはなぜ呼ばれているか 
EXPLIN ANALYZE発行時、ログ生成で使用されている(※) 
–EXPLAIN発行時は、あまり呼ばれていない 
–EXPLAINよりEXPLAIN ANALYZEの方が、改行の量が多いので、 
負荷が多くかかったのではないかと推測できる。 
(※)本解析の事前準備でログ出力をオフにしているが、ログの生成処理は行われている。
51 
Copyright © 2012 NTT DATA Corporation 
append_with_tabsはなぜ呼ばれているか 
EXPLIN ANALYZE発行時、ログ生成で使用されている(※) 
–EXPLAIN発行時は、あまり呼ばれていない 
–EXPLAINよりEXPLAIN ANALYZEの方が、改行の量が多いので、 
負荷が多くかかったのではないかと推測できる。 
(※)本解析の事前準備でログ出力をオフにしているが、ログの生成処理は行われている。 
「極端に性能上のマイナス」を与えるのは、ログ生成だけなのか? 
→EXPLAIN ANALYZEが、ログ生成を行わない設定にして再測定。
52 
Copyright © 2012 NTT DATA Corporation 
再調査 
実行計画取得閾値を上げる。 
-実行計画取得の閾値を 10分に設定(postgresql.confのパラメタ)。 
$ cat postgresql.conf : auto_explain.log_min_duration = ’10min’ :
53 
Copyright © 2012 NTT DATA Corporation 
再計測結果~perf record& reportで確認。 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 9.82% postgres postgres [.] AllocSetAlloc 3.51% postgres postgres [.] base_yyparse 2.97% postgres postgres [.] SearchCatCache 2.69% postgres postgres [.] MemoryContextAllocZeroAligned 2.01% postgres postgres [.] expression_tree_walker 1.92% postgres postgres [.] MemoryContextAlloc 1.83% postgres libc-2.15.so [.] __strcmp_sse42 1.77% postgres postgres [.] hash_search_with_hash_value 1.63% postgres postgres [.] nocachegetattr 1.33% postgres postgres [.] MemoryContextAllocZero 1.26% postgres postgres [.] core_yylex 1.23% postgres libc-2.15.so [.] __memcpy_ssse3 1.22% postgres postgres [.] hash_any 1.03% postgres postgres [.] hash_uint32 1.00% postgres postgres [.] new_list 0.95% postgres postgres [.] lappend EXPLAIN ANALYZE 
perf recordで再計測したところ、append_with_tabsは呼ばれなくなった。
54 
Copyright © 2012 NTT DATA Corporation 
perf statでも確認 
# perf stat -p 10974 sleep 10 Performance counter stats for process id '1974': 7944.809348 task-clock # 0.794 CPUs utilized [100.00%] 84,368 context-switches # 0.016 M/sec [100.00%] 546 CPU-migrations # 0.247 K/sec [100.00%] 0 page-faults # 0.000 K/sec 12,954,262,298 cycles # 1.631 GHz [100.00%] 9,415,587,714 stalled-cycles-frontend # 72.68% frontend cycles idle [100.00%] 7,719,126,537 stalled-cycles-backend # 59.59% backend cycles idle [100.00%] 7,955,133,955 instructions # 0.61 insns per cycle # 1.18 stalled cycles per insn [100.00%] 1,560,120,420 branches # 196.370 M/sec [100.00%] 29,504,875 branch-misses # 1.89% of all branches 10.000889779 seconds time elapsed 
←CPU-migrationの数が、EXPLAINモードと同程度の水準に。
55 
Copyright © 2012 NTT DATA Corporation 
考察 
auto_explain 
-軽いSQLが大量にはかれる場合 
-EXPLAIN ANALYZEが性能上影響を与えるのはログ生成 
-ログ出力の閾値を適切に設定すれば、スロークエリによる 
ログ生成が頻発することはまれである。 
EXPLAIN ANALYZEによる性能への影響は軽微
56 
Copyright © 2012 NTT DATA Corporation 
考察 
auto_explain 
-軽いSQLが大量にはかれる場合 
-EXPLAIN ANALYZEが性能上影響を与えるのはログ生成 
-ログ出力の閾値を適切に設定すれば、スロークエリによる 
ログ生成が頻発することはまれである。 
EXPLAIN ANALYZEによる性能への影響は軽微 
では、重いSQLの場合は?
57 
Copyright © 2012 NTT DATA Corporation 
重いSQLで測定すると 
重いSQL 
—多くのJOINを行うSELECTコマンドを使用 
<SQLの一例> 
$ pgbench –f test.sql –T 600 test Sarting vacuum... end. 
SELECT n.nspname as "Schema", 
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type", 
pg_catalog.pg_get_userbyid(c.relowner) as "Owner", 
c2.relname as "Table" 
FROM pg_catalog.pg_class c 
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
LEFT JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid 
LEFT JOIN pg_catalog.pg_class c2 ON i.indrelid = c2.oid 
WHERE c.relkind IN ('i','') 
AND n.nspname <> 'pg_catalog' 
AND n.nspname <> 'information_schema' 
AND n.nspname !~ '^pg_toast' 
AND pg_catalog.pg_table_is_visible(c.oid) 
ORDER BY 1,2; 
END;
58 
Copyright © 2012 NTT DATA Corporation 
重いSQLで測定すると 
実行方法 
—pgbenchにカスタムスクリプトとして使用 
$ pgbench –f test.sql –T 600 test Sarting vacuum... end.
59 
Copyright © 2012 NTT DATA Corporation 
再計測結果~perf record& reportで確認。 
Samples: 36K of event 'instructions', Event count (approx.): 18184791491 12.37% postgres postgres [.] slot_deform_tuple 8.08% postgres postgres [.] AllocSetAlloc 4.96% postgres postgres [.] SearchCatCache 2.83% postgres postgres [.] ExecEvalScalarArrayOp 1.88% postgres postgres [.] MemoryContextAllocZeroAligned 1.86% postgres libc-2.15.so [.] __strcmp_sse42 1.86% postgres postgres [.] slot_getattr 1.82% postgres postgres [.] base_yyparse 1.72% postgres postgres [.] hash_uint32 1.63% postgres postgres [.] expression_tree_walker 1.45% postgres postgres [.] MemoryContextAlloc 1.29% postgres postgres [.] lappend 1.14% postgres postgres [.] heapgettup_pagemode 1.12% postgres postgres [.] nocachegetattr 1.02% postgres postgres [.] ExecScan 0.96% postgres postgres [.] FunctionCall2Coll 0.94% postgres postgres [.] core_yylex 0.92% postgres postgres [.] expression_tree_mutator 0.90% postgres postgres [.] heapgetpage 0.85% postgres postgres [.] miss 0.84% postgres libc-2.15.so [.] __memcpy_ssse3 0.81% postgres postgres [.] check_stack_depth : 
ノーマル 
tps:505
60 
Copyright © 2012 NTT DATA Corporation 
再計測結果~perf record& reportで確認。 
Samples: 36K of event 'instructions', Event count (approx.):17644280750 
10.11%postgres postgres [.] slot_deform_tuple 
7.80% postgres postgres [.] AllocSetAlloc 
4.28% postgres postgres [.] SearchCatCache 
2.36% postgres postgres [.] ExecEvalScalarArrayOp 
2.18% postgres postgres [.] MemoryContextAllocZeroAligned 
1.97% postgres postgres [.] append_with_tabs 
1.96% postgres libc-2.15.so [.] __strcmp_sse42 
1.59% postgres libc-2.15.so [.] _IO_default_xsputn 
1.59% postgres postgres [.] expression_tree_walker 
1.56% postgres postgres [.] base_yyparse 
1.51% postgres libc-2.15.so [.] __printf_fp 
1.48% postgres postgres [.] hash_uint32 
1.47% postgres libc-2.15.so [.] _IO_strn_overflow 
1.46% postgres postgres [.] slot_getattr 
1.28% postgres postgres [.] MemoryContextAlloc 
1.21% postgres postgres [.] heapgettup_pagemode 
1.13% postgres [vdso] [.] 0x00007fffec3bd60c 
1.11% postgres postgres [.] lappend 
1.09% postgres libc-2.15.so [.] vfprintf 
1.06% postgres postgres [.] nocachegetattr 
0.93% postgres postgres [.] heapgetpage 
0.93% postgres libc-2.15.so [.] __memcpy_ssse3 
: 
EXPLAIN ANALYZE 
閾値‘0’ 
tps:444
61 
Copyright © 2012 NTT DATA Corporation 
再計測結果~perf record& reportで確認。 
Samples: 36K of event 'instructions', Event count (approx.): 18100297843 
11.89%postgres postgres [.] slot_deform_tuple 
9.37% postgres postgres [.] AllocSetAlloc 
4.28% postgres postgres [.] SearchCatCache 
2.36% postgres postgres [.] ExecEvalScalarArrayOp 
2.18% postgres postgres [.] MemoryContextAllocZeroAligned 
1.96% postgres postgres [.] base_yyparse 
1.83% postgres libc-2.15.so [.] __strcmp_sse42 
1.75% postgres postgres [.] MemoryContextAlloc 
1.65% postgres postgres [.] hash_uint32 
1.64% postgres postgres [.] slot_getattr 
1.63% postgres postgres [.] expression_tree_walker 
1.47% postgres postgres [.] heapgettup_pagemode 
1.44% postgres postgres [.] lappend 
1.13% postgres postgres [.] core_yylex 
1.12% postgres [vdso] [.] 0x00007fffe45ff8eb 
1.01% postgres postgres [.] nocachegetattr 
0.99% postgres postgres [.] new_tail_cell.isra.2 
0.91% postgres postgres [.] heapgetpage 
0.87% postgres postgres [.] ExecScan 
0.86% postgres postgres [.] ExecInitExpr 
0.83% postgres postgres [.] check_stack_depth 
0.83% postgres postgres [.] FunctionCall2Coll 
: 
EXPLAIN ANALYZE 
閾値’10min’ 
tps:467
62 
Copyright © 2012 NTT DATA Corporation 
考察 
auto_explain 
-重いSQLが大量にはかれる場合 
-EXPLAIN ANALYZEが性能上影響を与えるのはログ生成 
-ログ出力の閾値を適切に設定すれば、スロークエリによる 
ログ生成が頻発することはまれである。 
auto_explainをonにするのは、アリ。
63 
Copyright © 2012 NTT DATA Corporation 
perfのオーバヘッドってなかったの? 
pgbenchとperfで試す。 
-測定条件:pgbench -S –T 10でトライ。 
比較対象 
ノーマル 
EXPLAIN 
ANALYZEモード 
pgbench 
7047.1 
4987.66 
pgbench + perf 
7021.12 
4883.11
64 
Copyright © 2012 NTT DATA Corporation 
(余談)9.2におけるpostgresql.confの変化 
silent_modeがない 
-”silent_mode = on” と同じことをやりたい場合は、 
ログの出力先ファイルに/dev/nullへのシンボリックリンクを張る。 
custom_variable_classesがない 
-shared_preload_libraries と auto_explain.log_min_duration さえ設定すれば、auto_explainが使用できる。
Copyright © 2012 NTT DATA Corporation 
65 
4.perfでハマった点
66 
Copyright © 2012 NTT DATA Corporation 
debuginfo 
PostgreSQLのオブジェクトのシンボル名を表示させたい場合 
-ソースコードからPostgreSQLをインストール ./configure時にデバッグを有効に。 
-rpmからだと、間違ったシンボルが表示される…
Copyright © 2012 NTT DATA Corporation 
67 
5.perfの使いどころ
68 
Copyright © 2012 NTT DATA Corporation 
perfの使いどころ 
システム運用中、開発中を問わない。 -オーバヘッドが低いので、運用の裏で解析をすることが可能かも 
トラブルを起こしていることや、そのプロセスは分かっているが、 犯人までは分かっていない場合。 -犯人が分かっていて、動きをおいたい場合は他のツールで可能
Copyright © 2012 NTT DATA Corporation 
69 
6.perfこうなってほしいな
70 
Copyright © 2012 NTT DATA Corporation 
今後の期待 
ドキュメント 
perf diff
Copyright © 2012 NTT DATA Corporation 
71 
7.まとめ
72 
Copyright © 2012 NTT DATA Corporation 
まとめ 
perfのいいとこ 
システムで行われている処理を俯瞰できる。 
プロセスごとの処理を俯瞰できる。 
客観的な情報から、絞り込みがはかれる。 →解析ビギナーでも容疑者を特定しやすい 
オーバヘッドが低い →システム運用中でも使用しやすい 
ツールの種類が豊富 
perfのもうちょっと頑張ってほしいとこ、注意点 
ドキュメント 
debuginfo
Copyright © 2011 NTT DATA Corporation 
Copyright © 2012 NTT DATA Corporation

Contenu connexe

Tendances

PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...NTT DATA Technology & Innovation
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報Masahiko Sawada
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)NTT DATA Technology & Innovation
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングTomoya Hibi
 
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)NTT DATA Technology & Innovation
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...NTT DATA Technology & Innovation
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

Tendances (20)

PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
PostgreSQLコミュニティに飛び込もう
PostgreSQLコミュニティに飛び込もうPostgreSQLコミュニティに飛び込もう
PostgreSQLコミュニティに飛び込もう
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
 

En vedette

PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介Masao Fujii
 
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)Kohei KaiGai
 
perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)Daichi Egawa
 
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...Insight Technology, Inc.
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 

En vedette (18)

PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)
 
10大ニュースで振り返るpg con2013
10大ニュースで振り返るpg con201310大ニュースで振り返るpg con2013
10大ニュースで振り返るpg con2013
 
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon201510大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
PostreSQL監査
PostreSQL監査PostreSQL監査
PostreSQL監査
 
GresCubeで快適PostgreSQLライフ
GresCubeで快適PostgreSQLライフGresCubeで快適PostgreSQLライフ
GresCubeで快適PostgreSQLライフ
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
 
PostgreSQL replication
PostgreSQL replicationPostgreSQL replication
PostgreSQL replication
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
 
PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介
 
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
 
perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)
 
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...
[db tech showcase Tokyo 2015] B15:最新PostgreSQLはパフォーマンスが飛躍的に向上する!? - PostgreSQ...
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 

Similaire à perfを使ったPostgreSQLの解析(後編)

perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)Daichi Egawa
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf勇 黒沢
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイントMasayuki Ozawa
 
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2Computational Materials Science Initiative
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~日本マイクロソフト株式会社
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!ksk_ha
 
実践で学んだLog Analytics
実践で学んだLog Analytics実践で学んだLog Analytics
実践で学んだLog AnalyticsTetsuya Odashima
 
Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Tomohiro Ichimura
 
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回Shigeharu Yamaoka
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
 
Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )ロフト くん
 

Similaire à perfを使ったPostgreSQLの解析(後編) (20)

perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
 
Reconf 201901
Reconf 201901Reconf 201901
Reconf 201901
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
CMSI計算科学技術特論B(15) インテル Xeon Phi コプロセッサー向け最適化、並列化概要 2
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
実践で学んだLog Analytics
実践で学んだLog Analytics実践で学んだLog Analytics
実践で学んだLog Analytics
 
Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201
 
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )
 

Plus de NTT DATA OSS Professional Services

Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力NTT DATA OSS Professional Services
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントNTT DATA OSS Professional Services
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~NTT DATA OSS Professional Services
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~NTT DATA OSS Professional Services
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのことNTT DATA OSS Professional Services
 

Plus de NTT DATA OSS Professional Services (20)

Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力
 
Spark SQL - The internal -
Spark SQL - The internal -Spark SQL - The internal -
Spark SQL - The internal -
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
Hadoopエコシステムのデータストア振り返り
Hadoopエコシステムのデータストア振り返りHadoopエコシステムのデータストア振り返り
Hadoopエコシステムのデータストア振り返り
 
HDFS Router-based federation
HDFS Router-based federationHDFS Router-based federation
HDFS Router-based federation
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
 
Distributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystemDistributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystem
 
Structured Streaming - The Internal -
Structured Streaming - The Internal -Structured Streaming - The Internal -
Structured Streaming - The Internal -
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
Apache Hadoop and YARN, current development status
Apache Hadoop and YARN, current development statusApache Hadoop and YARN, current development status
Apache Hadoop and YARN, current development status
 
HDFS basics from API perspective
HDFS basics from API perspectiveHDFS basics from API perspective
HDFS basics from API perspective
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
 
20170303 java9 hadoop
20170303 java9 hadoop20170303 java9 hadoop
20170303 java9 hadoop
 
ブロックチェーンの仕組みと動向(入門編)
ブロックチェーンの仕組みと動向(入門編)ブロックチェーンの仕組みと動向(入門編)
ブロックチェーンの仕組みと動向(入門編)
 
Application of postgre sql to large social infrastructure jp
Application of postgre sql to large social infrastructure jpApplication of postgre sql to large social infrastructure jp
Application of postgre sql to large social infrastructure jp
 
Application of postgre sql to large social infrastructure
Application of postgre sql to large social infrastructureApplication of postgre sql to large social infrastructure
Application of postgre sql to large social infrastructure
 
Apache Hadoop 2.8.0 の新機能 (抜粋)
Apache Hadoop 2.8.0 の新機能 (抜粋)Apache Hadoop 2.8.0 の新機能 (抜粋)
Apache Hadoop 2.8.0 の新機能 (抜粋)
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 

perfを使ったPostgreSQLの解析(後編)

  • 1. Copyright © 2012 NTT DATA Corporation 2013年2月9日(土) perfを使ったPostgreSQLの解析 ~後編
  • 2. 2 Copyright © 2012NTT DATA Corporation Agenda 後編 1.前編の復習 2.perfを使ったプロファイリングの流れ 3.PostgreSQLをプロファイリングしてみよう 4.perfでハマった点 5.perfの使いどころ 6.Perfこうなったらいいな 7.まとめ
  • 3. 3 Copyright © 2012NTT DATA Corporation Agenda 前編 1.はじめに 2.プロファイリングとは? 3.perfとは 4.perfの仕組み 5.perfと他のパフォーマンス解析ツールとの比較 6.perfの導入と使い方 7.perfを使ってみよう 8.まとめ
  • 4. Copyright © 2012 NTT DATA Corporation 4 0.はじめに
  • 5. 5 Copyright © 2012 NTT DATA Corporation あらためまして自己紹介 Copyright © 2011 NTT DATA CORPORATION NTTデータ 基盤システム事業本部 システム方式技術ビジネスユニット 江川 大地 所属 やっていたこと 氏名 年代 やったこと -2009 歴史のお勉強(大学時代) 2009-2011 Webシステム開発(Javaなど) 2011-現在 PostgreSQL関係 近況 1ヶ月くらいインドに行ってました。 Twitter @daiti0804
  • 6. 6 Copyright © 2012 NTT DATA Corporation 本日のお題 お題 perfを使ったPostgreSQLの解析(後編) 今日説明 すること perfを使っての解析
  • 7. 7 Copyright © 2012NTT DATA Corporation 参考資料 本日の講演に当たって参考にした資料等 perf ソースコード —[Linuxカーネルソースのルート]/tools/perf配下 perf ドキュメント —[Linuxカーネルソースのルート]/tools/perf/Documentation perf wiki —https://perf.wiki.kernel.org/index.php/Main_Page 『Linuxカーネル Hacks ―パフォーマンス改善、開発効率向上、省電力化のためのテクニック』 高橋 浩和 (監修), 池田 宗広, 大岩 尚宏, 島本 裕志, 竹部 晶雄, 平松 雅巳(著)
  • 8. Copyright © 2012 NTT DATA Corporation 8 1.前回の復習
  • 9. 9 Copyright © 2012 NTT DATA Corporation perfとは  perf(Performance Counters for Linux)とは? -Linuxカーネル上の統合パフォーマンスツール -イベント数計測にCPUに内蔵されているレジスタを使用 -perf tools (ツールの集合体、サブコマンド群) Performance Countersとは?? -ハードウェアのイベントの回数を計測するCPU内蔵のレジスタ  イベントとは?? -キャッシュミス、分岐予測ミス(HWイベント) -ページフォルト、コンテキストスイッチ(SWイベント)
  • 10. 10 Copyright © 2012 NTT DATA Corporation プロファイラとしてありたい姿 低いオーバヘッド -解析対象のシステムは既に何らかのオーバヘッドが発生している ことが多い。そこにさらに負荷がかかるツールを使おうとしても、 ツールが動かなかったり、システムがダウンする可能性もある。 多くの情報 -トラブルの原因はいっぱい考えられるから。 見やすい表示(多くの情報の中から取捨選択が可能) -なにがどう書いてあるのか分からないと、トラブルの原因が表示 されていても見落とす可能性もある。
  • 11. Copyright © 2012 NTT DATA Corporation 11 2.perfを使ったプロファイリングの流れ
  • 12. 12 Copyright © 2012 NTT DATA Corporation perfを使ったプロファイリングの流れ 0.ツールの選択 1.イベントの設定 2. データの取得 3.取得したデータからの解析
  • 13. 13 Copyright © 2012 NTT DATA Corporation perf の使い方 perfの使い方 代表的なコマンド # perf <コマンド> [オプション] コマンド 説明 perf annotate perf recordで作成したperfのデータを読み込み、 関数で呼び出した命令レベ ルのトレース結果を表示する。 perf probe 新たに動的なトレースポイント(イベント)を定義する。 perf record イベントの記録を行う。 perf report perf recordで記録したイベントをプロンプトに表示する。 perf script perf recordで作成したperfのデータを読み込み、 トレース結果を表示する。 perf stat 引数に指定したコマンドのパフォーマンスカウンタの値を表示する。 perf top Linuxコマンドの”top”のように動的にシステム監視を行う。 前編より
  • 14. 14 Copyright © 2012 NTT DATA Corporation 0.ツールの選択 usage: perf [--version] [--help] COMMAND [ARGS] The most commonly used perf commands are: annotate Read perf.data (created by perf record) and display annotated code archive Create archive with object files with build-ids found in perf.data file bench General framework for benchmark suites buildid-cache Manage build-id cache. buildid-list List the buildids in a perf.data file diff Read two perf.data files and display the differential profile evlist List the event names in a perf.data file inject Filter to augment the events stream with additional information kmem Tool to trace/measure kernel memory(slab) properties kvm Tool to trace/measure kvm guest os list List all symbolic event types lock Analyze lock events probe Define new dynamic tracepoints record Run a command and record its profile into perf.data report Read perf.data (created by perf record) and display the profile sched Tool to trace/measure scheduler properties (latencies) script Read perf.data (created by perf record) and display trace output stat Run a command and gather performance counter statistics test Runs sanity tests. timechart Tool to visualize total system behavior during a workload top System profiling tool.
  • 15. 15 Copyright © 2012 NTT DATA Corporation 1.イベントの選択 分類 説明 具体例 Hardware event プロッセサで計測されるイ ベント。 cpu-cycles, cache-missesなど Software event カーネルのカウンタで計測 されるイベント。 cpu-clock, page-faultsなど Hardware cache event プロッセサで計測されるイ ベント。 L1-dcache-load-misses, branch-loadsなど Tracepoint event カーネルの処理を記録する ためにカーネルに埋め込ま れたトレースポイント。 sched:sched_stat_runtime, syscalls:sys_enter_socket など 前編より
  • 16. 16 Copyright © 2012 NTT DATA Corporation 2. データの取得 # perf record -e cpu-clock stress -c 4 -i 2 -m 2 --timeout 10s stress: info: [5843] dispatching hogs: 4 cpu, 2 io, 2 vm, 0 hdd stress: info: [5843] successful run completed in 10s [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.247 MB perf.data (~10775 samples) ] # ls perf.data perf recordなどで、データを記録する。
  • 17. 17 Copyright © 2012 NTT DATA Corporation 3. 取得したデータからの解析 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 9.82% postgres postgres [.] AllocSetAlloc 3.51% postgres postgres [.] base_yyparse 2.97% postgres postgres [.] SearchCatCache 2.69% postgres postgres [.] MemoryContextAllocZeroAligned 2.01% postgres postgres [.] expression_tree_walker 1.92% postgres postgres [.] MemoryContextAlloc 1.83% postgres libc-2.15.so [.] __strcmp_sse42 1.77% postgres postgres [.] hash_search_with_hash_value 1.63% postgres postgres [.] nocachegetattr 1.33% postgres postgres [.] MemoryContextAllocZero 1.26% postgres postgres [.] core_yylex 1.23% postgres libc-2.15.so [.] __memcpy_ssse3 1.22% postgres postgres [.] hash_any 1.03% postgres postgres [.] hash_uint32 1.00% postgres postgres [.] new_list 0.95% postgres postgres [.] lappend : perf reportなどで、データを表示、解析する。
  • 18. Copyright © 2012 NTT DATA Corporation 18 3.PostgreSQLをプロファイリングしてみよう
  • 19. 19 Copyright © 2012 NTT DATA Corporation 今回の講演に当たって使用した環境 ソフトウェア名 バージョン 備考 Fedra 17 今回は物理マシンにInstall Linux kernel 3.2.2 PostgreSQL 9.2.2
  • 20. 20 Copyright © 2012 NTT DATA Corporation auto_explainを使用したときのオーバヘッドを解析 auto_explainとは… –設定した時間よりも遅いクエリの実行計画をログに記録する機能。 –アプリケーションにおける最適化されていない問い合わせを追跡するのに特に有用。 (by マニュアル) –ONにしておけば、サポートする側が楽になるかも。 : : : auto_explain.log_min_duration = 10s : : LOG: duration: … SQL 10.1秒
  • 21. 21 Copyright © 2012 NTT DATA Corporation もう少しだけ… executor es.instrument=on es.start_time=now() es.total_time > x秒 auto_explainを使用したときのオーバヘッドを解析
  • 22. 22 Copyright © 2012 NTT DATA Corporation auto_explain…マニュアルの気になる記述 マニュアルより : : : auto_explain.log_analyze (boolean) auto_explain.log_analyzeは、実行計画のログが取得されたときに出力されるものとして、単 にEXPLAIN出力ではなく、EXPLAIN ANALYZE出力を行います。このパラメータはデフォルト で無効です。スーパユーザのみ、この設定を変更できます。 注意: このパラメータが有効の場合、計画ノードごとの時間的調整は事実上ログされるまで如 何に時間が掛かろうと、全ての実行文に対して引き起こります。極端に性能上のマイナスの影 響が起こり得ます。 : : : (赤字と下線は講演者による)
  • 23. 23 Copyright © 2012 NTT DATA Corporation auto_explainをONにした場合のオーバヘッド 1.EXPLAIN ANALYZEの情報収集のためのオーバヘッド 2.サーバログ出力にかかるI/O負荷 auto_explainを使用したときのオーバヘッド
  • 24. 24 Copyright © 2012 NTT DATA Corporation auto_explainをONにした場合のオーバヘッド 1.EXPLAIN ANALYZEの情報収集のためのオーバヘッド 2.サーバログ出力にかかるI/O負荷 perf は、I/O負荷を測る用途には適していないので、今回は、1のオーバヘッド に特化した解析を行う。 auto_explainを使用したときのオーバヘッド
  • 25. 25 Copyright © 2012 NTT DATA Corporation ログ出力のオフ(IO負荷の軽減) ログ出力にかかる処理が現れないようにするため。 # 下記の処理を行う。 事前準備 $ cat postgresql.conf : # - Where to Log - log_destination = 'stderr' # Valid values are combinations of # This is used when logging to stderr: logging_collector = on # Enable capturing of stderr and csvlog # These are only used if logging_collector is on: log_directory = 'pg_log' # directory where log files are written, # can be absolute or relative to PGDATA log_filename = 'postgresql-tmp.log' # log file name pattern, : $ ln /dev/null /xxxxx/data/pg_logpostgresql-tmp.log ※ ただし、この処理を行ってもログを生成する処理は行われる。
  • 26. 26 Copyright © 2012 NTT DATA Corporation どれにしようか… List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] stalled-cycles-frontend OR idle-cycles-frontend [Hardware event] stalled-cycles-backend OR idle-cycles-backend [Hardware event] ref-cycles [Hardware event] cpu-clock [Software event] task-clock [Software event] page-faults OR faults [Software event] context-switches OR cs [Software event] cpu-migrations OR migrations [Software event] minor-faults [Software event] major-faults [Software event] alignment-faults [Software event] emulation-faults [Software event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] : : : 1.イベントの選択
  • 27. 27 Copyright © 2012 NTT DATA Corporation いくつかのイベントの取得結果をまとめてみてみたい そんなときには、 1.イベントの選択
  • 28. 28 Copyright © 2012 NTT DATA Corporation perf stat perf statは、指定したコマンドのパフォーマンスカウンタの値を表示できる。 perf record/reportと違い、指定したコマンドの総合的な統計情報を得るこ とが可能である。 こんな時に便利 —あるコマンドについて、総合的な(複数のイベントにまたがった)性能測 定情報が知りたい。 —性能の悪い処理について、何が原因なのか知りたい。 —性能改善(暫定対処、本格対処)を行うにあたっての数値目標を出したい。 前編より
  • 29. 29 Copyright © 2012 NTT DATA Corporation perf stat perf statは、指定したコマンドのパフォーマンスカウンタの値を表示できる。 perf record/reportと違い、指定したコマンドの総合的な統計情報を得るこ とが可能である。 こんな時に便利 —あるコマンドについて、総合的な(複数のイベントにまたがった)性能測 定情報が知りたい。 —性能の悪い処理について、何が原因なのか知りたい。 —性能改善(暫定対処、本格対処)を行うにあたっての数値目標を出したい。 前編より
  • 30. 30 Copyright © 2012 NTT DATA Corporation # 比較対象 内容 意図 1 ノーマル 実行計画を取得しない状態。 基準値。 2 EXPLAINモード EXPLAINコマンドを発行し た実行計画を自動的に取得 する。 実行計画を取得、保持する 処理のオーバヘッドを知り たい。 3 EXPLAIN ANALYZEモード EXPLAIN ANALYZEコマンド を発行した実行計画を自動 的に取得する。 実際のコマンド実行時間な どEXPLAIN ANALYZEで取れ る情報を取得、保持する処 理のオーバヘッドが知りた い。 測定方針~今回の比較対象
  • 31. 31 Copyright © 2012 NTT DATA Corporation 測定方針~仮説 EXPLAIN ANALYZEを考える -EXPLAIN ANALYZE による負荷は、実行計画を取得、保持する処理。 executor es.instrument=on es.start_time=now() es.total_time > x秒
  • 32. 32 Copyright © 2012 NTT DATA Corporation 測定方針~仮説 EXPLAIN ANALYZEを考える -EXPLAIN ANALYZE による負荷は、実行計画を取得、保持する処理。 executor es.instrument=on es.start_time=now() es.total_time > x秒
  • 33. 33 Copyright © 2012 NTT DATA Corporation 測定方針 SQL, EXPLAIN ANALYZEをどう走らせる? -SQLの重さに関わらず、 EXPLAIN ANALYZEが走るように設定する。 -実行計画取得の閾値を 0秒に設定(postgresql.confのパラメタ)。 -EXPLAIN ANALYZEの影響を相対的に大きくするため、SQLは負荷が小さいものを選択。 pgbench –S オプション で発行。 $ cat postgresql.conf : auto_explain.log_min_duration = ‘0’ :
  • 34. 34 Copyright © 2012 NTT DATA Corporation 測定の流れ(1/2) どう測定する? -SQLや実行計画を取得する処理の情報のみを取得したい。 $ pgbench –i test $ pgbench –S –T 600 test Sarting vacuum... end. 1.pgbenchでSQLを発行。 2.psコマンドで、プロセスIDを調べる。 # ps aux | grep postgres : postgres 6868 0.0 0.0 121832 772 ? Ss Feb07 0:00 postgres: logger process postgres 6870 0.0 0.0 153452 1408 ? Ss Feb07 0:00 postgres: checkpointer process postgres 6871 0.0 0.0 153452 912 ? Ss Feb07 0:00 postgres: writer process postgres 6872 0.0 0.0 153452 908 ? Ss Feb07 0:00 postgres: wal writer process postgres 6873 0.0 0.0 121964 968 ? Ss Feb07 0:00 postgres: stats collector process postgres 7480 15.4 0.0 13796 1052 pts/1 S+ 00:29 1:25 pgbench -S -T 600 test postgres 7482 89.4 0.2 154676 19620 ? Rs 00:29 8:14 postgres: postgres test [local] SELECT daichi 7512 0.0 0.0 109420 880 pts/10 S+ 00:38 0:00 grep --color=auto postgres
  • 35. 35 Copyright © 2012 NTT DATA Corporation 測定の流れ(2/2) # perf stat -p 7482 sleep 10 Performance counter stats for process id '5641': 8356.290496 task-clock # 0.836 CPUs utilized 82,898 context-switches # 0.010 M/sec 332 CPU-migrations # 0.040 K/sec 0 page-faults # 0.000 K/sec 13,800,470,721 cycles # 1.652 GHz [100.00%] 9,910,834,211 stalled-cycles-frontend # 71.82% frontend cycles idle [100.00%] 8,099,655,897 stalled-cycles-backend # 58.69% backend cycles idle [100.00%] 8,873,259,146 instructions # 0.64 insns per cycle # 1.12 stalled cycles per insn [100.00%] 1,752,642,657 branches # 209.739 M/sec [100.00%] 29,767,895 branch-misses # 1.70% of all branches 10.000876597 seconds time elapsed 3. 調べたプロセスIDをもとに、perf statを実行
  • 36. 36 Copyright © 2012 NTT DATA Corporation perf stat出力結果(3回の計測の平均値) データ取得結果(perf stat) 比較対象 ノーマル EXPLAINモード EXPLAIN ANALYZEモード task-clock 8,525 8,474 8,530 context- switches 85,115 83,528 82,456 CPU-migrations 283 419 898 page-faults 0 0 0 cycles 14,073,651,082 13,996,156,300 14,114,324,153 stalled-cycles- frontend 10,082,417,996 10,099,475,984 10,020,292,828 stalled-cycles- backend 8,224,267,261 8,276,793,827 8,167,568,987 instructions 9,110,231,843 8,908,543,005 9,237,358,941 branches 1,799,358,657 1,759,630,145 1,790,358,429 branch-misses 30,480,893 29,803,620 33,819,770 tps(pgbenchの アウトプット) ※ 7420 6328 5553 ※ コネクション確立の時間を含んでいない。小数点以下四捨五入
  • 37. 37 Copyright © 2012 NTT DATA Corporation perf stat出力結果(3回の計測の平均値) データ取得結果(perf stat) 比較対象 ノーマル EXPLAINモード EXPLAIN ANALYZEモード task-clock 8,525 8,474 8,530 context- switches 85,115 83,528 82,456 CPU-migrations 283 419 898 page-faults 0 0 0 cycles 14,073,651,082 13,996,156,300 14,114,324,153 stalled-cycles- frontend 10,082,417,996 10,099,475,984 10,020,292,828 stalled-cycles- backend 8,224,267,261 8,276,793,827 8,167,568,987 instructions 9,110,231,843 8,908,543,005 9,237,358,941 branches 1,799,358,657 1,759,630,145 1,790,358,429 branch-misses 30,480,893 29,803,620 33,819,770 tps(pgbenchの アウトプット) ※ 7420 6328 5553 ※ コネクション確立の時間を含んでいない。小数点以下四捨五入
  • 38. 38 Copyright © 2012 NTT DATA Corporation perf stat出力結果(3回の計測の平均値) データ取得結果(perf stat) 比較対象 ノーマル EXPLAINモード EXPLAIN ANALYZEモード task-clock 8,525 8,474 8,530 context- switches 85,115 83,528 82,456 CPU-migrations 283 419 898 page-faults 0 0 0 cycles 14,073,651,082 13,996,156,300 14,114,324,153 stalled-cycles- frontend 10,082,417,996 10,099,475,984 10,020,292,828 stalled-cycles- backend 8,224,267,261 8,276,793,827 8,167,568,987 instructions 9,110,231,843 8,908,543,005 9,237,358,941 branches 1,799,358,657 1,759,630,145 1,790,358,429 branch-misses 30,480,893 29,803,620 33,819,770 tps(pgbenchの アウトプット) ※ 7420 6328 5553 CPU-migrationに違いが表れている ※ コネクション確立の時間を含んでいない。小数点以下四捨五入
  • 39. 39 Copyright © 2012 NTT DATA Corporation CPU-migrationとは… 1 2 プロセス A メモリ メモリ プロセスは、OSによってスケジューリングされたCPUで処理を行いたい。 プロセスAは、 CPU1の近く にいるし、前 回のキャッ シュもあるし、 CPU1で仕事 させよう。 OS
  • 40. 40 Copyright © 2012 NTT DATA Corporation CPU-migrationとは… 2 プロセス A メモリ メモリ CPUが他のプロセスによって、占有されている場合がある。 ぐぬぬ OS プロセス Z 1
  • 41. 41 Copyright © 2012 NTT DATA Corporation CPU-migrationとは… 2 プロセス A メモリ メモリ その場合は、他のCPUに移動して処理を行う。 仕方ない… OS プロセス Z 1
  • 42. 42 Copyright © 2012 NTT DATA Corporation perf recordで特定のイベントを起こす処理の動きを追う perf recordで動きを追う # perf record -e cpu-migrations -o explain_ana_mig.data -p 8968 sleep 10 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.058 MB explain_ana_mig.data (~2553 samples) ] $ pgbench –i test $ pgbench –S –T 600 test Sarting vacuum... end. $ ps aux | grep postgres : postgres 8868 0.0 0.0 121832 772 ? Ss Feb07 0:00 postgres: logger process postgres 8870 0.0 0.0 153452 1408 ? Ss Feb07 0:00 postgres: checkpointer process postgres 8861 0.0 0.0 153452 912 ? Ss Feb07 0:00 postgres: writer process postgres 8862 0.0 0.0 153452 908 ? Ss Feb07 0:00 postgres: wal writer process postgres 8963 0.0 0.0 121964 968 ? Ss Feb07 0:00 postgres: stats collector process postgres 8960 15.4 0.0 13796 1052 pts/1 S+ 00:29 1:25 pgbench -S -T 600 test postgres 8968 89.4 0.2 154676 19620 ? Rs 00:29 8:14 postgres: postgres test [local] SELECT daichi 8969 0.0 0.0 109420 880 pts/10 S+ 00:38 0:00 grep --color=auto postgres perf recordを実行 perf実行前の準備
  • 43. 43 Copyright © 2012 NTT DATA Corporation perf reportで記録したデータを出力する perf reportで結果出力 # perf report -i explain_ana_mig.data ノーマル 100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 100.00% postgres [kernel.kallsyms] [k] try_to_wake_up EXPLAIN EXPLAIN ANALYZE
  • 44. 44 Copyright © 2012 NTT DATA Corporation perf reportで記録したデータを出力する perf reportで結果出力 # perf report -i explain_ana_mig.data ノーマル 100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 100.00% postgres [kernel.kallsyms] [k] try_to_wake_up 100.00% postgres [kernel.kallsyms] [k] try_to_wake_up EXPLAIN EXPLAIN ANALYZE CPU-migrationを。原因となる命令内容に違いがあるか?
  • 45. 45 Copyright © 2012 NTT DATA Corporation perf recordで特定のイベントを起こす処理の動きを追う perf recordで動きを追う # perf record -e instructions -o explain_ana_instructions.data -p 8968 sleep 10 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.058 MB explain_ana_mig.data (~2553 samples) ] # perf report -i explain_ana_instructions.data instructionsをイベント指定して、perf recordを実行 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 8.12% postgres postgres [.] AllocSetAlloc 3.01% postgres postgres [.] append_with_tabs 2.79% postgres libc-2.15.so [.] vfprintf 2.78% postgres libc-2.15.so [.] __printf_fp 2.74% postgres postgres [.] SearchCatCache 2.53% postgres postgres [.] base_yyparse 2.07% postgres libc-2.15.so [.] __strcmp_sse42 1.95% postgres postgres [.] MemoryContextAllocZeroAligned 1.44% postgres postgres [.] expression_tree_walker 1.43% postgres postgres [.] MemoryContextAlloc 1.32% postgres postgres [.] hash_search_with_hash_value 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 1.28% postgres postgres [.] ScanKeywordLookup 1.28% postgres postgres [.] nocachegetattr 1.24% postgres postgres [.] hash_any 1.22% postgres libc-2.15.so [.] _IO_default_xsputn 1.11% postgres postgres [.] core_yylex 1.00% postgres postgres [.] MemoryContextAllocZero : : EXPLAIN ANALYZE
  • 46. 46 Copyright © 2012 NTT DATA Corporation 出力結果の比較 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 8.12% postgres postgres [.] AllocSetAlloc 3.01% postgres postgres [.] append_with_tabs 2.79% postgres libc-2.15.so [.] vfprintf 2.78% postgres libc-2.15.so [.] __printf_fp 2.74% postgres postgres [.] SearchCatCache 2.53% postgres postgres [.] base_yyparse 2.07% postgres libc-2.15.so [.] __strcmp_sse42 1.95% postgres postgres [.] MemoryContextAllocZeroAligned 1.44% postgres postgres [.] expression_tree_walker 1.43% postgres postgres [.] MemoryContextAlloc 1.32% postgres postgres [.] hash_search_with_hash_value 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 1.28% postgres postgres [.] ScanKeywordLookup 1.28% postgres postgres [.] nocachegetattr : EXPLAIN ANALYZE Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8318102033 10.11% postgres postgres [.] AllocSetAlloc 3.27% postgres postgres [.] base_yyparse 3.09% postgres postgres [.] SearchCatCache 2.72% postgres postgres [.] MemoryContextAllocZeroAligned 1.95% postgres libc-2.15.so [.] __strcmp_sse42 1.91% postgres postgres [.] MemoryContextAlloc 1.80% postgres postgres [.] expression_tree_walker 1.68% postgres postgres [.] hash_search_with_hash_value 1.53% postgres postgres [.] nocachegetattr 1.40% postgres postgres [.] hash_any 1.31% postgres postgres [.] core_yylex 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 : ノーマル Samples:_38K_of_event_'instructions',_Event_count_(approx.):_8745281382 10.03% postgres postgres [.] AllocSetAlloc 3.23% postgres postgres [.] SearchCatCache 3.22% postgres postgres [.] base_yyparse 2.62% postgres postgres [.] MemoryContextAllocZeroAligned 1.88% postgres postgres [.] expression_tree_walker 1.86% postgres postgres [.] MemoryContextAlloc 1.80% postgres postgres [.] hash_search_with_hash_value 1.78% postgres libc-2.15.so [.] __strcmp_sse42 1.44% postgres postgres [.] nocachegetattr 1.32% postgres postgres [.] hash_any 1.32% postgres libc-2.15.so [.] __memcpy_ssse3 1.28% postgres postgres [.] core_yylex : EXPLAIN
  • 47. 47 Copyright © 2012 NTT DATA Corporation 出力結果の比較 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 8.12% postgres postgres [.] AllocSetAlloc 3.01% postgres postgres [.] append_with_tabs 2.79% postgres libc-2.15.so [.] vfprintf 2.78% postgres libc-2.15.so [.] __printf_fp 2.74% postgres postgres [.] SearchCatCache 2.53% postgres postgres [.] base_yyparse 2.07% postgres libc-2.15.so [.] __strcmp_sse42 1.95% postgres postgres [.] MemoryContextAllocZeroAligned 1.44% postgres postgres [.] expression_tree_walker 1.43% postgres postgres [.] MemoryContextAlloc 1.32% postgres postgres [.] hash_search_with_hash_value 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 1.28% postgres postgres [.] ScanKeywordLookup 1.28% postgres postgres [.] nocachegetattr : EXPLAIN ANALYZE Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8318102033 10.11% postgres postgres [.] AllocSetAlloc 3.27% postgres postgres [.] base_yyparse 3.09% postgres postgres [.] SearchCatCache 2.72% postgres postgres [.] MemoryContextAllocZeroAligned 1.95% postgres libc-2.15.so [.] __strcmp_sse42 1.91% postgres postgres [.] MemoryContextAlloc 1.80% postgres postgres [.] expression_tree_walker 1.68% postgres postgres [.] hash_search_with_hash_value 1.53% postgres postgres [.] nocachegetattr 1.40% postgres postgres [.] hash_any 1.31% postgres postgres [.] core_yylex 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 : ノーマル
  • 48. 48 Copyright © 2012 NTT DATA Corporation 出力結果の比較 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 8.12% postgres postgres [.] AllocSetAlloc 3.01% postgres postgres [.] append_with_tabs 2.79% postgres libc-2.15.so [.] vfprintf 2.78% postgres libc-2.15.so [.] __printf_fp 2.74% postgres postgres [.] SearchCatCache 2.53% postgres postgres [.] base_yyparse 2.07% postgres libc-2.15.so [.] __strcmp_sse42 1.95% postgres postgres [.] MemoryContextAllocZeroAligned 1.44% postgres postgres [.] expression_tree_walker 1.43% postgres postgres [.] MemoryContextAlloc 1.32% postgres postgres [.] hash_search_with_hash_value 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 1.28% postgres postgres [.] ScanKeywordLookup 1.28% postgres postgres [.] nocachegetattr : EXPLAIN ANALYZE Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8318102033 10.11% postgres postgres [.] AllocSetAlloc 3.27% postgres postgres [.] base_yyparse 3.09% postgres postgres [.] SearchCatCache 2.72% postgres postgres [.] MemoryContextAllocZeroAligned 1.95% postgres libc-2.15.so [.] __strcmp_sse42 1.91% postgres postgres [.] MemoryContextAlloc 1.80% postgres postgres [.] expression_tree_walker 1.68% postgres postgres [.] hash_search_with_hash_value 1.53% postgres postgres [.] nocachegetattr 1.40% postgres postgres [.] hash_any 1.31% postgres postgres [.] core_yylex 1.31% postgres libc-2.15.so [.] __memcpy_ssse3 : ノーマル
  • 49. 49 Copyright © 2012 NTT DATA Corporation PATH: src/backend/utils/error/elog.c append_with_tabsとは 3011 /* 3012 * append_with_tabs 3013 * 3014 * Append the string to the StringInfo buffer, inserting a tab after any 3015 * newline. 3016 */ 3017 static void 3018 append_with_tabs(StringInfo buf, const char *str) 3019 { 3020 char ch; 3021 3022 while ((ch = *str++) != '¥0') 3023 { 3024 appendStringInfoCharMacro(buf, ch); 3025 if (ch == '¥n') 3026 appendStringInfoCharMacro(buf, '¥t'); 3027 } 3028 } ログ生成時、改行が入る際にタブを挿入する関数。ログの整形などに使用される。
  • 50. 50 Copyright © 2012 NTT DATA Corporation append_with_tabsはなぜ呼ばれているか EXPLIN ANALYZE発行時、ログ生成で使用されている(※) –EXPLAIN発行時は、あまり呼ばれていない –EXPLAINよりEXPLAIN ANALYZEの方が、改行の量が多いので、 負荷が多くかかったのではないかと推測できる。 (※)本解析の事前準備でログ出力をオフにしているが、ログの生成処理は行われている。
  • 51. 51 Copyright © 2012 NTT DATA Corporation append_with_tabsはなぜ呼ばれているか EXPLIN ANALYZE発行時、ログ生成で使用されている(※) –EXPLAIN発行時は、あまり呼ばれていない –EXPLAINよりEXPLAIN ANALYZEの方が、改行の量が多いので、 負荷が多くかかったのではないかと推測できる。 (※)本解析の事前準備でログ出力をオフにしているが、ログの生成処理は行われている。 「極端に性能上のマイナス」を与えるのは、ログ生成だけなのか? →EXPLAIN ANALYZEが、ログ生成を行わない設定にして再測定。
  • 52. 52 Copyright © 2012 NTT DATA Corporation 再調査 実行計画取得閾値を上げる。 -実行計画取得の閾値を 10分に設定(postgresql.confのパラメタ)。 $ cat postgresql.conf : auto_explain.log_min_duration = ’10min’ :
  • 53. 53 Copyright © 2012 NTT DATA Corporation 再計測結果~perf record& reportで確認。 Samples:_37K_of_event_'instructions',_Event_count_(approx.):_8662982577 9.82% postgres postgres [.] AllocSetAlloc 3.51% postgres postgres [.] base_yyparse 2.97% postgres postgres [.] SearchCatCache 2.69% postgres postgres [.] MemoryContextAllocZeroAligned 2.01% postgres postgres [.] expression_tree_walker 1.92% postgres postgres [.] MemoryContextAlloc 1.83% postgres libc-2.15.so [.] __strcmp_sse42 1.77% postgres postgres [.] hash_search_with_hash_value 1.63% postgres postgres [.] nocachegetattr 1.33% postgres postgres [.] MemoryContextAllocZero 1.26% postgres postgres [.] core_yylex 1.23% postgres libc-2.15.so [.] __memcpy_ssse3 1.22% postgres postgres [.] hash_any 1.03% postgres postgres [.] hash_uint32 1.00% postgres postgres [.] new_list 0.95% postgres postgres [.] lappend EXPLAIN ANALYZE perf recordで再計測したところ、append_with_tabsは呼ばれなくなった。
  • 54. 54 Copyright © 2012 NTT DATA Corporation perf statでも確認 # perf stat -p 10974 sleep 10 Performance counter stats for process id '1974': 7944.809348 task-clock # 0.794 CPUs utilized [100.00%] 84,368 context-switches # 0.016 M/sec [100.00%] 546 CPU-migrations # 0.247 K/sec [100.00%] 0 page-faults # 0.000 K/sec 12,954,262,298 cycles # 1.631 GHz [100.00%] 9,415,587,714 stalled-cycles-frontend # 72.68% frontend cycles idle [100.00%] 7,719,126,537 stalled-cycles-backend # 59.59% backend cycles idle [100.00%] 7,955,133,955 instructions # 0.61 insns per cycle # 1.18 stalled cycles per insn [100.00%] 1,560,120,420 branches # 196.370 M/sec [100.00%] 29,504,875 branch-misses # 1.89% of all branches 10.000889779 seconds time elapsed ←CPU-migrationの数が、EXPLAINモードと同程度の水準に。
  • 55. 55 Copyright © 2012 NTT DATA Corporation 考察 auto_explain -軽いSQLが大量にはかれる場合 -EXPLAIN ANALYZEが性能上影響を与えるのはログ生成 -ログ出力の閾値を適切に設定すれば、スロークエリによる ログ生成が頻発することはまれである。 EXPLAIN ANALYZEによる性能への影響は軽微
  • 56. 56 Copyright © 2012 NTT DATA Corporation 考察 auto_explain -軽いSQLが大量にはかれる場合 -EXPLAIN ANALYZEが性能上影響を与えるのはログ生成 -ログ出力の閾値を適切に設定すれば、スロークエリによる ログ生成が頻発することはまれである。 EXPLAIN ANALYZEによる性能への影響は軽微 では、重いSQLの場合は?
  • 57. 57 Copyright © 2012 NTT DATA Corporation 重いSQLで測定すると 重いSQL —多くのJOINを行うSELECTコマンドを使用 <SQLの一例> $ pgbench –f test.sql –T 600 test Sarting vacuum... end. SELECT n.nspname as "Schema", c.relname as "Name", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type", pg_catalog.pg_get_userbyid(c.relowner) as "Owner", c2.relname as "Table" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid LEFT JOIN pg_catalog.pg_class c2 ON i.indrelid = c2.oid WHERE c.relkind IN ('i','') AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1,2; END;
  • 58. 58 Copyright © 2012 NTT DATA Corporation 重いSQLで測定すると 実行方法 —pgbenchにカスタムスクリプトとして使用 $ pgbench –f test.sql –T 600 test Sarting vacuum... end.
  • 59. 59 Copyright © 2012 NTT DATA Corporation 再計測結果~perf record& reportで確認。 Samples: 36K of event 'instructions', Event count (approx.): 18184791491 12.37% postgres postgres [.] slot_deform_tuple 8.08% postgres postgres [.] AllocSetAlloc 4.96% postgres postgres [.] SearchCatCache 2.83% postgres postgres [.] ExecEvalScalarArrayOp 1.88% postgres postgres [.] MemoryContextAllocZeroAligned 1.86% postgres libc-2.15.so [.] __strcmp_sse42 1.86% postgres postgres [.] slot_getattr 1.82% postgres postgres [.] base_yyparse 1.72% postgres postgres [.] hash_uint32 1.63% postgres postgres [.] expression_tree_walker 1.45% postgres postgres [.] MemoryContextAlloc 1.29% postgres postgres [.] lappend 1.14% postgres postgres [.] heapgettup_pagemode 1.12% postgres postgres [.] nocachegetattr 1.02% postgres postgres [.] ExecScan 0.96% postgres postgres [.] FunctionCall2Coll 0.94% postgres postgres [.] core_yylex 0.92% postgres postgres [.] expression_tree_mutator 0.90% postgres postgres [.] heapgetpage 0.85% postgres postgres [.] miss 0.84% postgres libc-2.15.so [.] __memcpy_ssse3 0.81% postgres postgres [.] check_stack_depth : ノーマル tps:505
  • 60. 60 Copyright © 2012 NTT DATA Corporation 再計測結果~perf record& reportで確認。 Samples: 36K of event 'instructions', Event count (approx.):17644280750 10.11%postgres postgres [.] slot_deform_tuple 7.80% postgres postgres [.] AllocSetAlloc 4.28% postgres postgres [.] SearchCatCache 2.36% postgres postgres [.] ExecEvalScalarArrayOp 2.18% postgres postgres [.] MemoryContextAllocZeroAligned 1.97% postgres postgres [.] append_with_tabs 1.96% postgres libc-2.15.so [.] __strcmp_sse42 1.59% postgres libc-2.15.so [.] _IO_default_xsputn 1.59% postgres postgres [.] expression_tree_walker 1.56% postgres postgres [.] base_yyparse 1.51% postgres libc-2.15.so [.] __printf_fp 1.48% postgres postgres [.] hash_uint32 1.47% postgres libc-2.15.so [.] _IO_strn_overflow 1.46% postgres postgres [.] slot_getattr 1.28% postgres postgres [.] MemoryContextAlloc 1.21% postgres postgres [.] heapgettup_pagemode 1.13% postgres [vdso] [.] 0x00007fffec3bd60c 1.11% postgres postgres [.] lappend 1.09% postgres libc-2.15.so [.] vfprintf 1.06% postgres postgres [.] nocachegetattr 0.93% postgres postgres [.] heapgetpage 0.93% postgres libc-2.15.so [.] __memcpy_ssse3 : EXPLAIN ANALYZE 閾値‘0’ tps:444
  • 61. 61 Copyright © 2012 NTT DATA Corporation 再計測結果~perf record& reportで確認。 Samples: 36K of event 'instructions', Event count (approx.): 18100297843 11.89%postgres postgres [.] slot_deform_tuple 9.37% postgres postgres [.] AllocSetAlloc 4.28% postgres postgres [.] SearchCatCache 2.36% postgres postgres [.] ExecEvalScalarArrayOp 2.18% postgres postgres [.] MemoryContextAllocZeroAligned 1.96% postgres postgres [.] base_yyparse 1.83% postgres libc-2.15.so [.] __strcmp_sse42 1.75% postgres postgres [.] MemoryContextAlloc 1.65% postgres postgres [.] hash_uint32 1.64% postgres postgres [.] slot_getattr 1.63% postgres postgres [.] expression_tree_walker 1.47% postgres postgres [.] heapgettup_pagemode 1.44% postgres postgres [.] lappend 1.13% postgres postgres [.] core_yylex 1.12% postgres [vdso] [.] 0x00007fffe45ff8eb 1.01% postgres postgres [.] nocachegetattr 0.99% postgres postgres [.] new_tail_cell.isra.2 0.91% postgres postgres [.] heapgetpage 0.87% postgres postgres [.] ExecScan 0.86% postgres postgres [.] ExecInitExpr 0.83% postgres postgres [.] check_stack_depth 0.83% postgres postgres [.] FunctionCall2Coll : EXPLAIN ANALYZE 閾値’10min’ tps:467
  • 62. 62 Copyright © 2012 NTT DATA Corporation 考察 auto_explain -重いSQLが大量にはかれる場合 -EXPLAIN ANALYZEが性能上影響を与えるのはログ生成 -ログ出力の閾値を適切に設定すれば、スロークエリによる ログ生成が頻発することはまれである。 auto_explainをonにするのは、アリ。
  • 63. 63 Copyright © 2012 NTT DATA Corporation perfのオーバヘッドってなかったの? pgbenchとperfで試す。 -測定条件:pgbench -S –T 10でトライ。 比較対象 ノーマル EXPLAIN ANALYZEモード pgbench 7047.1 4987.66 pgbench + perf 7021.12 4883.11
  • 64. 64 Copyright © 2012 NTT DATA Corporation (余談)9.2におけるpostgresql.confの変化 silent_modeがない -”silent_mode = on” と同じことをやりたい場合は、 ログの出力先ファイルに/dev/nullへのシンボリックリンクを張る。 custom_variable_classesがない -shared_preload_libraries と auto_explain.log_min_duration さえ設定すれば、auto_explainが使用できる。
  • 65. Copyright © 2012 NTT DATA Corporation 65 4.perfでハマった点
  • 66. 66 Copyright © 2012 NTT DATA Corporation debuginfo PostgreSQLのオブジェクトのシンボル名を表示させたい場合 -ソースコードからPostgreSQLをインストール ./configure時にデバッグを有効に。 -rpmからだと、間違ったシンボルが表示される…
  • 67. Copyright © 2012 NTT DATA Corporation 67 5.perfの使いどころ
  • 68. 68 Copyright © 2012 NTT DATA Corporation perfの使いどころ システム運用中、開発中を問わない。 -オーバヘッドが低いので、運用の裏で解析をすることが可能かも トラブルを起こしていることや、そのプロセスは分かっているが、 犯人までは分かっていない場合。 -犯人が分かっていて、動きをおいたい場合は他のツールで可能
  • 69. Copyright © 2012 NTT DATA Corporation 69 6.perfこうなってほしいな
  • 70. 70 Copyright © 2012 NTT DATA Corporation 今後の期待 ドキュメント perf diff
  • 71. Copyright © 2012 NTT DATA Corporation 71 7.まとめ
  • 72. 72 Copyright © 2012 NTT DATA Corporation まとめ perfのいいとこ システムで行われている処理を俯瞰できる。 プロセスごとの処理を俯瞰できる。 客観的な情報から、絞り込みがはかれる。 →解析ビギナーでも容疑者を特定しやすい オーバヘッドが低い →システム運用中でも使用しやすい ツールの種類が豊富 perfのもうちょっと頑張ってほしいとこ、注意点 ドキュメント debuginfo
  • 73. Copyright © 2011 NTT DATA Corporation Copyright © 2012 NTT DATA Corporation