地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【MySQL】よく使うpt-query-digestのオプション

www.percona.com

よく使うやつ

--group-by

fingerprintとかでまとめたいときに使う。

--order-by

query_timeとかlock_timeとかrows_examinedの合計でソートしたりができる

その他

出力形式が色々あってワンライナーとかCIとかと組み合わせてなにかできそうと思った。

report | テキストレポート形式
slowlog | スロークエリログ形式
secure-slowlog | セキュアスロークエリログ形式
json | JSONレポート形式
json-anon | セキュアJSONレポート形式

【MySQL】MySQL 5.7でsysスキーマにロック状態確認ができるビューがあった

qiita.com

あるトランザクションのロックが他のトランザクションのロック獲得を待たせているみたいなのを引くにはinformation_schemaのLOCK関係のテーブルをJOINしていく必要があると思っていたが上記の記事を見ていくとsysにもっと便利にみれるビューがあることに気づいた。これは便利。

mysql> SELECT * FROM  sys.innodb_lock_waits\G
*************************** 1. row ***************************
                wait_started: 2018-01-07 13:09:32
                    wait_age: 00:00:02
               wait_age_secs: 2
                locked_table: `lock_test`.`lock_test`
                locked_index: PRIMARY
                 locked_type: RECORD
              waiting_trx_id: 92210
         waiting_trx_started: 2018-01-07 13:07:49
             waiting_trx_age: 00:01:45
     waiting_trx_rows_locked: 2
   waiting_trx_rows_modified: 0
                 waiting_pid: 6
               waiting_query: UPDATE lock_test.lock_test SET val1=6 WHERE id=6
             waiting_lock_id: 92210:112:3:7
           waiting_lock_mode: X
             blocking_trx_id: 92209
                blocking_pid: 4
              blocking_query: NULL
            blocking_lock_id: 92209:112:3:7
          blocking_lock_mode: X
        blocking_trx_started: 2018-01-07 13:04:45
            blocking_trx_age: 00:04:49
    blocking_trx_rows_locked: 1
  blocking_trx_rows_modified: 1
     sql_kill_blocking_query: KILL QUERY 4
sql_kill_blocking_connection: KILL 4
1 row in set, 3 warnings (0.00 sec)

【MySQL】 InnoDB Checkpoint Ageの監視

writeされたデータがメモリ上に持ったままでよいサイズというのが innodb_log_file_size。そしてまだディスクにフラッシュされていないデータ(dirty page)のサイズが Checkpoint Age になる。innodb_log_file_sizeというサイズを増やすとこのサイズが増えていく。ログファイルが小さいと、不要なディスク書込みが多数発生します。

ログの情報についてはinnodbのstatusで見ることができます。

---
LOG
---
Log sequence number 9542414
Log flushed up to   9542414
Pages flushed up to 9542414
Last checkpoint at  9542405 # 最後にチェックポイントが行われたバイト数
0 pending log flushes, 0 pending chkp writes
10 log i/o's done, 0.00 log i/o's/second

フラッシュ間隔が結構曲者で調べていると新目のMySQLになるにつれてけっこう更新が入っているらしく追っていくのは大変そうだなと感じ。

labs.gree.jp

【MySQL】MySQLのwrite処理メモ

  • SQLをパーシングします
  • 操作対象となるデータページ単位でメモリー上のBuffer Poolに呼び出し
  • データに操作を行い、そのページがDirty Pageに
  • Redo Logに操作と操作対象テーターなど情報を書く
  • Redo Logをハードディスクに書き込む
  • Dirty Pageを(ハードディスクにある)Double Write Bufferに書き込みます。
  • Double Write BufferにあるDirty Pageをハードディスクのページが元ある場所に書き戻します。