最近、サーバーの1つがメモリ不足になり、クラッシュしました。 munin
グラフを確認したところ、クラッシュの直前にピークに達した唯一のメトリック(メモリ使用量以外)はMySQL throughput
でした。ただし、MySQL queries
の数がこれに対応して増加すると予想されていましたが、これは発生しませんでした。
MySQLスループットのこのピークの原因を調べたいと思います。クラッシュのbinログのリストは次のとおりです。
101M Apr 17 01:27 drupal_master-bin.001270
106M Apr 17 03:00 drupal_master-bin.001271
101M Apr 17 04:05 drupal_master-bin.001272
104M Apr 17 05:53 drupal_master-bin.001273
104M Apr 17 06:39 drupal_master-bin.001274
101M Apr 17 07:02 drupal_master-bin.001275
104M Apr 17 07:22 drupal_master-bin.001276 # 100M filled up in 1 min
106M Apr 17 07:23 drupal_master-bin.001277
101M Apr 17 07:33 drupal_master-bin.001278
101M Apr 17 07:43 drupal_master-bin.001279
104M Apr 17 07:46 drupal_master-bin.001280
102M Apr 17 08:29 drupal_master-bin.001281
102M Apr 17 08:46 drupal_master-bin.001282
105M Apr 17 08:54 drupal_master-bin.001283
13M Apr 17 09:26 drupal_master-bin.001284 # crash of server around 09:50
# prior to crashing load went very high (we saw 45) and server was extremely slow (few min delay when typing in an SSH session)
101M Apr 17 10:54 drupal_master-bin.001285 # server up again, nothing wrong since then
私はそれらのビンログを分析するためのツールを探していました。これまでのところ、私は見つけました:
binlog-analyze.pl :select
、insert
、update
..(FYIスクリプト内でselect into
をselect
に置き換えました。
$ mysqlbinlog /path/to/bin.log | binlog-analyze.pl -v
pt-query-digest :クエリサイズ(最小、最大、平均...)に関する統計情報を提供します。そのユーティリティにはたくさんのオプションがありますが、何を探すべきかわかりません。
$ mysqlbinlog /path/to/bin.log | pt-query-digest
私たちが知りたいのは、MySQL出力の増加を引き起こしたクエリです。
MySQLスループットが急激に増加するクエリを特定するために、MySQL binログを確認する方法を誰かが指示できますか?
Binlogには、完了したクエリがFIFOキューのようにバイナリログに挿入されます。
実際に探す必要があるのは、アクティブに実行されているクエリの履歴がどのように見えるかです。言い換えると、独自の状況が発生したときにどのようなクエリとどのようなパフォーマンスがあったかを明らかにするために、プロセスリストをキャッチする必要があります。
Pt-query-digestの使用を強くお勧めしますが、別の方法で使用する必要があります。クエリダイジェストにbinlogエントリを処理させ、プロセスリストLIVEを処理させる必要があります。
pt-query-digest の使用方法に関する過去の投稿(2011年11月24日)を書きました(私の投稿では mk-query-digest を使用しています)。遅いクエリログ(私が使用した実際のスクリプトとクエリダイジェスト出力の読み方を投稿しました): MySQLの一般的なクエリログのパフォーマンスへの影響 。 私の過去の投稿は、その方法を示すYouTubeビデオに基づいていました 。私は単に mk-query-digest を使用して自分自身をエミュレートしました。
最近、サーバーの1つがメモリ不足になり、クラッシュしました。
スワッピングを禁止しましたか?そうしないと、MySQLは(無惨に)速度を落としますが、クラッシュしません。スワッピングは回避する必要がありますが、防止することはできません。
高すぎる設定可能な調整パラメータがありますか? http://mysql.rjweb.org/doc.php/memory を参照してください