Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RDBのトラブルの現場を追え! / rdb-Troubleshooting

RDBのトラブルの現場を追え! / rdb-Troubleshooting

soudai sone

August 03, 2019
Tweet

More Decks by soudai sone

Other Decks in Technology

Transcript

  1. 自己紹介
 曽根 壮大(34歳)
 株式会社 オミカレ 副社長 CTO
 
 そ  ね  

    たけ とも
 • 日本PostgreSQLユーザ会 勉強会分科会 担当
 • 3人の子供がいます(長女、次女、長男)
 • 技術的にはWeb/LL言語/RDBMSが好きです
 • コミュニティが好き
  2. 初級編:スロークエリを追え!
 =# SELECT l.locktype, c.relname, l.pid, l.mode,
 substring(a.current_query, 1, 6)

    AS query,
 (current_timestamp - xact_start)::interval(3) AS duration
 FROM pg_locks l LEFT OUTER JOIN pg_stat_activity a
 ON l.pid = a. procpid
 LEFT OUTER JOIN pg_class c ON l.relation = c.oid
 WHERE NOT l.granted ORDER BY l.pid;

  3. 初級編:スロークエリを追え!
 locktype | relname | pid | mode | query

    | duration ---------------+----------+------+---------------+--------+-------------- tuple | tellers | 2700 | ExclusiveLock | UPDATE | 00:00:00.013 transactionid | | 2701 | ShareLock | INSERT | 00:00:00.004 transactionid | | 2702 | ShareLock | UPDATE | 00:00:00.014 tuple | tellers | 2703 | ExclusiveLock | UPDATE | 00:00:00.004 tuple | tellers | 2704 | ExclusiveLock | UPDATE | 00:00:00.009 tuple | branches | 2705 | ExclusiveLock | UPDATE | 00:00:00.001 transactionid | | 2706 | ShareLock | UPDATE | 00:00:00.001 transactionid | | 2707 | ShareLock | UPDATE | 00:00:00.017 transactionid | | 2708 | ShareLock | UPDATE | 00:00:00.007 (9 rows)
  4. 初級編:スロークエリを追え!
 
 • Mackerel + plugin
 • Zabbix + pg_monz


    • pg_statsinfo + pg_stats_reporter 
 …etc
 メジャーなモニタリングツール

  5. 中級編:エラーログを追え!
 
 # postgresql
 logging_collector=on # logの有効化
 # logの出力時のフォーマットの指定
 log_line_prefix='[%t]%u

    %d %p[%l] %h[%i]' 
 log_min_duration_statement=<許容できないレスポンス時間(ミリ秒)>
 # 出力したい深刻度レベル
 # 指定された深刻度レベルよりも重要なレベルが出力される
 # この場合、ERROR LOG FATAL PANIC
 log_min_error_statement=error 

  6. 中級編:エラーログを追え!
 
 # mysql
 log_syslog=1
 log_syslog_include_pid=1
 log_error_verbosity=3
 slow_query_log = 1

    # slow queryログの有効化
 slow_query_log_file=/usr/local/mysql/data/slow.log # ファイルパス
 long_query_time=<許容できないレスポンス時間(秒)>
 # インデックスが使用されていないクエリをログに出力
 log_queries_not_using_indexes = 1