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

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

【MySQL】Redoログを無効化する

dev.mysql.com

本番で使うのは想定されていないようだがレプリカラグがひどくて〜とかの場合に一部ケースで使えるかもしれない?クラッシュリカバリできなくなるというが少しでも早く本番投入したいレプリカサーバとかで使うとIOが減ってサービスインまでの時間が短くなるみたいなケースでは使えるのではないだろうか。

参考

atsuizo.hatenadiary.jp

【MySQL】参照系のクエリだけで大量にdisk writeを発生させるには

というのを考えてみる。

大量にクエリを実行する

これが一番てっとり速い気がするクエリログを出力させておけばいい感じにディスクに書いてくれるのでwriteが発生するだろう。エラーログをわざと発生させまくるのでもwriteは発生しそう(エラーログの場合はbufferingされないで書き出される気がするのでこっちの方が大量書き込みには向いている???)

create tmp tableが発生するクエリを実行する

CREATE TEMPORARY TABLEを実行するのは参照系ではないので今回は外れるがサーバーはクエリーの処理中に内部一時テーブルを作成するケースがある。条件は色々あるが参照系クエリという縛りがあるのでUNIONとかサブクエリを大量に実行すればdisk writeが発生する。

dev.mysql.com

一時ファイルを使うクエリを実行する

ORDER BY や GROUP BYのソートで使用される。sort_buffer_sizeを超えてソートしようとするとこれはファイルに書き出された上で処理を行っていくのでdisk writeが発生してく。join_bufferとかも小さくしておくことで一時ファイルが使われそうである。

dev.mysql.com

【Mackerel】仮想メモリのチェックプラグインを書いた

github.com

指定された使用率を超えた場合にWARNやCRITにするプラグイン。失敗したら後続の処理を〜みたいなことができるので仮想メモリの使用率が高いようなサービスをrestarさせるみたいなことができる。3~4ヶ月に一回くらい発生する問題で睡眠時間を削られていたのでこれをいれることで健康になるので期待

【MySQL】トランザクションの過去のクエリを見たい

現在実行中のトランザクションからtrx_mysql_thread_idをメモする

SELECT trx_id,trx_query,trx_mysql_thread_id FROM information_schema.innodb_trx ORDER BY trx_started;

PROCESSLIST_IDに先ほどのtrx_mysql_thread_idを指定する

SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID =;

THREAD_IDを使ってperformance_schema.events_statements_historyを見ればよい

SELECT * FROM performance_schema.events_statements_history WHERE thread_id = ? ORDER BY TIMER_START