「今そこにある危機」を捉える ~ pg_stat_statements revisited

15
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 1 「今そこにある危機」を捉える “pg_stat_statements revisited” アップタイム・テクノロジーズ 永安 悟史

description

2013年2月16日に開催された「PostgreSQLアンカンファレンス」でのセッション「“今そこにある危機”を捉える ~ pg_stat_statements revisited」の講演資料です。 PostgreSQLアンカンファレンス@東京(2/16) http://atnd.org/events/35310

Transcript of 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Page 1: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 1

「今そこにある危機」を捉える

“pg_stat_statements revisited”

アップタイム・テクノロジーズ

永安 悟史

Page 2: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 2

アジェンダ

• 「pg_stat_statements」とは

• 機能と仕様(8.4~9.2)

• Normalize(正規化)とは

• どのような時に使えるのか

• どのような時に「使えない」のか

• 「今そこにある危機」を捉える

Page 3: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 3

「pg_stat_statements」とは

• PostgreSQL 8.4で導入されたビュー

– より正確には、ビューを実現する拡張モジュール

– インストール、設定が必要

• ユーザ、データベース、クエリの種類別に集計される– 何回実行されたか

– どれだけ時間がかかったか

– 何レコード取り出したか

– 何ブロック読んだか、書いたか

– 等々・・・

http://www.postgresql.jp/document/9.2/html/pgstatstatements.html

Page 4: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 4

「pg_stat_statements」とは

Page 5: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 5

機能と仕様

• PostgreSQL用の共有ライブラリとして提供– サーバ起動前にpostgresql.confで設定する必要がある

– shared_preload_librariesパラメータ

• クエリ種別、実行回数、総実行時間等を収集– クエリの中の「値」が異なると、異なるクエリとして集計(9.1まで)

– 9.2以降は、Normalize(正規化)により値の異なるクエリも集約

• 集計値を保持するpg_stat_statementsビューを提供– ビューを作成するSQL文を実行する必要がある(スーパーユーザ)

– 9.1以降であれば CREATE EXTENSION … を実行

• 集計値のリセットは専用のSQL関数を使う– SELECT pg_stat_statements_reset()

http://www.postgresql.jp/document/9.2/html/pgstatstatements.html

Page 6: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 6

機能と仕様 cont’d

http://www.postgresql.jp/document/9.2/html/pgstatstatements.html

8.4

9.0

9.2

9.2

9.2

Page 7: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 7

Normalize(正規化)とは

Normalizeあり(9.2)

Normalizeなし(9.1)

Page 8: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 8

どのような時に使えるのか

• どのクエリがたくさん実行されているのかを知りたい

• どのクエリの実行に時間がかかっているのかを知りたい

• どのクエリがリソースを食っているのかを知りたい

• サーバログにSQLを大量に出力されても困る

Page 9: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 9

どのような時に「使えない」のか

• モジュールをロードしていない– shared_preload_librariesの設定をしていない

• バージョンが9.1までで、かつ、プリペアードクエリを使ってい

ない– バインド変数を使っていると、同じクエリとして集計される

Normalizeなし(9.1)、プリペアードクエリ使用

Page 10: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 10

「今そこにある危機」を捉える

• 今現在、目の前のPostgreSQLサーバの負荷が高い、重い。

• 何が問題なのかを知りたい。SQLに問題があるなら、そのSQLを抽出したい。

• サーバに負荷を掛けたくない、設定をいじりたくない。

• 累積値ではなく、今の値が知りたい。統計情報は無闇にリセットしたくない。

• 他にもやらなければならないことはたくさんある。手間をかけたくない。

Page 11: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 11

「今そこにある危機」を捉える cont’d

• 今から10秒間の間に実行されたSQL文を抽出する

• 抽出された各SQL文の実行回数と総実行時間を把握する– 総実行時間 = 平均実行時間 × 実行回数

• 各SQL文ごとのアクセス状況を把握する– block hit(バッファ読み込み)、block read(ブロック読み込み)等

• その後、ヘビーなSQL文をなんとかする– ブロックI/Oが多い? バッファヒットが多くてCPU使ってる?

Page 12: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 12

デモ

• snap_rank_statement_by_totaltime.sql

Page 13: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 13

snap_rank_statement_by_totaltime.sql

• やってくれること– 10秒間に実行されたSQL文を抽出

– 総実行時間でランキングを作成、上位20件を表示

• 内部でやっていること– pg_stat_statementsビューのスナップショットを作成

– 10秒待つ

– 再度、pg_stat_statementsビューのスナップショットを作成

– スナップショット間の差分を計算してランキング

• 入手先– http://www.uptime.jp/go/pgperf

Page 14: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 14

Q&A

Page 15: 「今そこにある危機」を捉える ~ pg_stat_statements revisited

Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 15

【お問い合わせ先】アップタイム・テクノロジーズ合同会社担当:永安E-mail: [email protected]: http://www.uptime.jp/