More Related Content
Similar to OSC沖縄2014_JPUG資料
Similar to OSC沖縄2014_JPUG資料 (20)
OSC沖縄2014_JPUG資料
- 5. 運用管理には何がある?
■ 監視 ・ レポート
死活監視
リソース監視・性能監視
統計情報確認
■ サービス管理
停止 / 再起動
フェイルオーバ
プロモート
■ バックアップ/リストア
バックアップ
PITR
■ 性能維持
メンテナンスコマンド実施
■ 性能分析 / トラブルシュート
クエリキャンセル
ボトルネック調査
実行計画分析
■ アップデート
セキュリティアップデート
アップグレード
■ 監査
ログイン監査
定期メンテ監査
DML/DDL監査
- 11. ログの設定(これだけはやっておく)
パラメータ 説明 おすすめ設定
log_destination ログの出力形態 stderr, (ログ監視ツール有 syslog)
or
csvlog, (ログ監視ツール有 syslog)
logging_collector Stderrやcsvlogログを
ファイルへリダイレク
トするか?
on
log_line_prefix ログメッセージの接頭
情報
(9.0 ~)
[%t][%p][%c-%l][%x][%e]%q(%u, %d, %r, %a)
(~8.4)l
[%t][%p][%c-%l][%x ]%q(%u, %d, %r)
log_line_prefix は時間やログ対象処理のDB、ユーザなどなど、
ログ解析に必要な情報を付与するので絶対指定すること。
デフォルトは何も指定されていません!!
- 13. (参考) sysadm ユーザの処理を記録する
postgres=# ALTER ROLE sysadm SET log_statement TO 'all';
postgres=# SELECT usename, usesuper, useconfig FROM pg_user;
usename | usesuper | useconfig
----------+----------+---------------------
postgres | t |
sysadm | t | {log_statement=all}
(2 rows)
- 15. ログの見方
レベル syslog eventlog 説明
PANIC CRIT ERROR クリティカルなエラーなど、DBインス
タンス全体に影響する問題。
FATAL ERR ERROR 接続エラーや強制切断など、セッショ
ンレベルに影響する問題。
LOG INFO INFORMATION チェックポイントやautovacum実施、
スロークエリ結果など、DBAが把握す
べき処理。
ERROR WARNING ERROR シンタックスエラーなど、SQLレベル
に影響する問題。
WARNING NOTICE WARNING 作法違反の警告。アプリケーションな
どの見直しを推奨。
NOTICE NOTICE INFORMATION ユーザ補助となる情報。
INFO INFO INFORMATION ユーザが明示的に出力する、ユーザ補
助となる情報。
DEBUG DEBUG INFORMATION 開発時向け。量が多いので運用時に出
力しないように!
エラーレベルごとの意味を押さえましょう。
(LOGを除き)ERROR以上は即座の対応が必要です。
- 16. ログの見方
カテゴリ 内容
[エラーレベル] エラー内容
STATEMENT エラー起因となった実際の処理内容
LOCATION エラーが発生したコード上の位置
HINT 発生したエラーの原因や回避策
CONTEXT エラーが発生したコンテキスト(関数など)
PostgreSQLでは、エラーメッセージの他、発生個所や解決
のためのヒントもログに添えてくれます。
落ち着いて読み込み、適切なアクションにつなげましょう。
- 17. (参考) ログメッセージの例
(表示の関係で、prefixを削っています)
LOG: 22023: invalid value for parameter "log_min_duration_statement": "10sec"
HINT: Valid units for this parameter are "ms", "s", "min", "h", and "d".
LOCATION: set_config_option, guc.c:5472
LOG: F0000: configuration file "/Users/postgres/base/pgsql930/postgresql.conf"
contains errors; unaffected changes were applied
FATAL: 57P01: terminating connection due to administrator command
CONTEXT: SQL statement "select pg_sleep($1)"
PL/pgSQL function sample_f(integer) line 1 at SQL statement
LOCATION: ProcessInterrupts, postgres.c:2857
STATEMENT: SELECT sample_f(1000);
- 22. PostgreSQLが関連するファイルと
ディレクトリ
ディレクトリ名 利用用途 監視すべきタイミング サイズの測り方
$PGDATA/base 各テーブルやイン
デックスの格納
常時
メンテナンス前
専用の関数
(次ページ)
$PGDATA/base/pgsql_tmp ディスクソートや
ハッシュ処理など
の一時領域
バッチ処理時
メンテナンス処理時
ls や du
$PGDATA/pg_log サーバログの格納 常時 ls や du
$PGDATA/pg_xlog トランザクション
ログ(WAL)の格納
常時 ls や du
アーカイブディレクトリ WALのアーカイブ
格納
バッチ処理時
メンテナンス実行時
ls や du
テーブルスペース 各テーブルやイン
デックスの格納
常時
メンテナンス前
専用の関数
(次ページ)
- 23. オブジェクトのサイズ
対象 関数 備考
テーブル pg_relation_size()
テーブル+TOAST pg_table_size() (ver9.0から)
インデックス(単体) pg_relation_size()
インデックス(合計) pg_indexes_size() テーブルに付与された全ての
インデックス(ver9.0から)
テーブル+TOAST+
インデックス(合計)
pg_total_relation_size()
テーブルスペース pg_tablespace_size()
データベース pg_database_size()
目的に応じて様々な関数を利用できます。
名前が若干紛らわしいので、間違わないように注意し
ましょう!
- 28. 抑えておくべき稼働統計情報
ビュー 説明 役立つ情報
pg_stat_database DB単位の稼働統計
情報ビュー
- 基本的に累積情報
DB単位の
・ コミット/ロールバック数
・ 現在の接続数
・ 更新&参照件数
・ deadlock数
pg_stat_user_tables テーブル単位の稼働
統計情報ビュー
- 基本的に累積情報
テーブル単位の
・ SeqScan回数と件数
・ 更新件数
・ 最後のautovacuum/analyze時間
pg_stat_activity 現在の各クライアン
トからの処理内容
- 揮発情報
現在DBに接続しているクライアントの
・ クエリ内容
・ 接続開始&トランザクション開始
&クエリ開始時間
・ ロック待ちかどうか
たくさんの稼働統計情報用のビューがありますが、ま
ずは上記3つのビューを使えるようにしましょう。
これで大半のことが分かります。
- 30. (参考) pg_stat_statementsの導入
1. rpm などでcontribパッケージを入れる
(もしくはソースをmake && make install)
– postgresql-xx-contrib-*.rpm
2. postgresql.conf の shared_preload_librariesパラメータを
次の様に設定
shared_preload_libraries = 'pg_stat_statement'
3. PostgreSQLを再起動(service postgresql restart など)
4. ビューを作成したいDBに対して
CREATE EXTENSION pg_stat_statements;
を実施
これだけ。
- 31. (参考) pg_stat_statementsの導入
SELECT dbid, userid,
substr(query,1, 15) || '...' || right(query,15),
total_time, calls,
total_time/calls as avg_time, rows
FROM pg_stat_statements order by total_time desc limit 5;
-[ RECORD 1 ]---------------------------------
dbid | 16391
userid | 10
?column? | UPDATE pgbench_... WHERE bid = ?;
total_time | 2393.6419999997
calls | 61019
avg_time | 0.0392278142873483
rows | 61019
- 33. 稼働統計情報の取得
●
ちょっとした一工夫で解析が楽に
– COPY文でCSV形式に保存しておく
– 別テーブルへ保存しておく
- - COPY取得
COPY (SELECT now(), * FROM pg_stat_database
WHERE datname = 'postgres') TO
'/var/lib/pgsql/stats_log/xxxx.csv' WITH CSV;
- - 別テーブルへ保存
CREATE TABLE pg_stat_database_store
(correct_time timestamp, LIKE pg_stat_database);
INSERT INTO pg_stat_database_store
SELECT now(), * FROM pg_stat_database
WHERE datname = 'postgres'
- 34. 稼働統計情報の取得
●
ちょっとした一工夫で解析が楽に
– 現在時刻との差分で長時間実施処理を把握
postgres=# SELECT
now() - xact_start AS txn_duration,
now() - query_start AS query_duration,
datname, pid, usename, query, waiting
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() order by query_duration desc;
-[ RECORD 1 ]--+-------------------------------
txn_duration | 00:02:06.745105
query_duration | 00:02:06.745105
datname | postgres
pid | 29689
usename | postgres
query | SELECT * from pg_sleep(10000);
waiting | f
- 38. PostgreSQLの運用に役立つ
参考情報
■ バックアップの入門に
- PostgreSQLバックアップ・リカバリ入門
http://www.slideshare.net/satock/postgre-sql-20215836
■ 運用管理全般について、もっと深く知りたい
- PostgreSQL運用テクニック
http://www.postgresql.jp/events/event_sozai/Summer_seminar2011_Operation_technique.pdf
- PostgreSQL運用テクニック・レベルアップ編
http://www.postgresql.jp/events/pgcon2012/docs/c3.pdf
- Let's Postgres 運用管理
http://lets.postgresql.jp/map/operation
- OSS-DB Exam Gold 技術解説無料セミナー
http://www.oss-db.jp/news/event/image/20130615_01.pdf