スロークエリログを知る。
こんにちは。TIです。まさかの今年度最後の大取りです。
緊張しますが今回は、スロークエリログについて書かせていただきます。
クエリとは?
スロークエリログの前にスロークエリって?クエリって?となった方もいらっしゃると思います。
“クエリ”を簡単に説明すると、
データベース(※以降はDBと省略します)に対しての命令文だと思ってください。
そのクエリが遅い=処理に時間がかかるものを”スロークエリ”といいます。
それらを記録しておくものが ”スロークエリログ” というわけです。
ではまずログを出力させたいのなら ”ルール” が必要です。
無差別にスロークエリログを垂れ流しにするのは、サーバにとって負担になります。
なぜならこのスロークエリログは、肥大化しやすいファイルだからです。
もしかしたら貴方のサーバもそのログのせいで、重くなっているのかもなんてこともあり得ます。
なのでしっかりとルールを作っていく必要があります。
以下が大まかなルールになります。
・何秒以上のクエリをログとして出力するか ・そのログを吐くファイルは、どこにするか ・インデックスを使用していないクエリを出力させるか
上二つについては、イメージしやすいのではないでしょうか。
なので、”インデックス”を詳しく説明させていただければと思います。
次の項目を分かりやすく図にまとめましたので、ご参考までにご覧ください。
インデックスとは?
インデックスって何?となった方もいらっしゃると思います。本の目次や気になったページに貼る付箋のような役割だと思っていただければ幸いです。
下図で、効率が悪い・よいパターンを載せています。
<インデックスが全て一緒の場合>
テーブルから情報を取り出す際は、先頭から順に情報を確認していく性質のため
まとめられていないと無駄な情報を処理しながら目的の情報へたどり着きます。
結果、処理に時間がかかり効率よく情報を取り出せません。
そこで以下の図のようにしてみると、一気に効率がよくなります。
<インデックスが複数あり、まとめられている場合>
するとどうでしょう。”1~50″と”51~100″に分けられていることによって、60番の情報を見に行く際に
インデックス②を使用し、効率よく情報を取り出すことができます。
ここでは、”1~50″と”51~100″の二つで分けていますがさらに細分化も可能です。
少しインデックスに話がそれてしまいましたが、
“インデックス” について、少しイメージがついたのではないでしょうか。
次は、スロークエリログに戻って注意点とこれらの解決策などをご紹介いたします。
スロークエリログの注意点
そんな優秀なログファイルをなぜデフォルトで、設定していないのか。
それは、冒頭で言った通り肥大化しやすいという欠点があります。
肥大化してしまうと、ディスクの使用量などを大きく消費してしまい
サービスやコンテンツにも影響が出てしまいます。
なのでこのログを出力する際は
・何秒以上かかったクエリをログに記録するか
・ログローテートの設定を設ける
など…
どういった内容を記録したいのかの定義づけをしっかりと行って、設定しましょう。
最後に
スロークエリログが原因で、ディスク使用量などが圧迫されてしまった際は
弊社でローテートの設定を行うことも可能でございます。
勿論弊社では、それ以外の原因(アタックなど)でのディスク使用量の上昇の際も
原因確認からお客様へご報告・原因解決へのご提案を行っております。
ぜひお気軽にご相談していただければと思います。
それでは、TIのブログは以上です。
今年度もありがとうございました!