ログを記録するとMySQLのパフォーマンスが低下しますが、なぜでしょうか。


9

MySQLのドキュメントでも、サイトのどこにもこれに対する答えが見当たらないことには、私はかなり驚いています(セクション5.2には、それ以外の場合はログが十分にカバーされているようです!)

binlogsを有効にすると、(主観的に)小さなパフォーマンスヒットが表示されますが、これは少し余分なIOで予想されるものですが、一般的なクエリログを有効にすると、非常に大きなパフォーマンスヒットが表示されます(クエリの実行時間が2倍になり、または悪いことに)、私がバイナリログで見るものをはるかに超えています。もちろん、今ではすべてのSELECTとすべてのUPDATE / INSERTをログに記録していますが、他のデーモンは停止せずにすべてのリクエスト(Apache、Exim)を記録します。

IOに関して、パフォーマンスの「転換点」に近いことの影響を見ているだけなのでしょうか、それとも、これを発生させるクエリのロギングに関して根本的に難しいことはありますか?すべてのクエリをログに記録して開発を容易にしたいのですが、一般的なクエリログオンでパフォーマンスを回復する必要があると思われるハードウェアの種類を正当化することはできません。

もちろん、遅いクエリをログに記録します。これを無効にすると、一般的な使用法の改善はごくわずかです。

(これはすべてUbuntu 10.04 LTS、MySQLd 5.1.49にありますが、調査ではこれがかなり普遍的な問題であることが示唆されています)

回答:


9

一般的なクエリログは、バイナリログよりもはるかに多くのIOです。ほとんどのSQLサーバーが90%の読み取りから10%の書き込みであるという事実に加えて、バイナリログは、ディスクスペースの使用量が少ないプレーンテキストではなく、バイナリ形式で保存されます。(スペースがどれだけ少ないかわかりません。申し訳ありません。)

ApacheとEximがパフォーマンスに大きな影響を与えずにすべてのリクエストを記録できる理由は2つあります。1つ目は、リクエストが発生したという事実を記録しますが、ログに記録する内容は通常、実際のリクエストよりも大幅に小さいことです。多くの場合、HTTPリクエストはログに入る行の2倍の大きさであり、短いプレーンテキストの電子メールでさえ、それに伴うログ行の10または20倍大きくなります。10MBの添付ファイルがあるメールでも、ログには数行しか書き込まれません。

これの2番目の部分は、通常のWebアプリケーションでは通常、単一のHTTPページに関連付けられた数十のSQLクエリがあることです。電子メールは、HTTP要求よりもさらに少ない傾向があります。MySQLサーバーは、ApacheまたはEximよりもはるかに多くのログを記録しようとしています。

1日の終わりに、MySQLバイナリログと一般ログ、およびApacheとEximログのサイズ(非圧縮)を確認します。MySQLの一般的なログは、5倍以上の最大のログであることがわかります。


1
いくつかの良い点-特に、はい、私たちのアプリケーションへの単一のGETは何百ものSELECTを引き起こす可能性があります。なぜなら、単一のクエリでできる限りのことをしようとしますが、これのパフォーマンス/クリーンさをトレードオフすることがありますよりエレガントな構造、より読みやすいコード、よりクリーンなDB。(余談ですが、パラメーターCGI.pmが1つのケースで見られ、他のケースでは見られないため、GETSからのURLだけでなく、POSTのログの内容の話から、このすべてが実際に始まり、そこから一般)。とにかく、それは数時間なので、答えは受け入れられました。ありがとう!
James Green、

4

提供された回答に追加するために、MySQLデータストアが存在するのと同じデバイスにログを記録している場合は、パフォーマンスヒットも表示されます。同じディスクの場合、複数の場所で読み取りと書き込みが行われます。常に、プロセス全体の速度が低下します。

これは、同じ物理ディスク上の別のパーティションであっても当てはまります。

ロギングが別のデバイスに送信される場合は、パフォーマンスの問題の一部が軽減されるはずです。


1
私の状況には関係ありません-これはホストされたVMであり、DBは/ varとは別の論理ボリューム上にあり、同じストレージアレイから順番に提供されます。理論的にはそれらが同じスピンドル上にある可能性があると思いますが、それはまさかの偶然のように感じるでしょう:-)とは言っても、+ 1は別にします。これは、たとえばデフォルトのDebian / Ubuntuセットアップ(DBのDB / var / mysql、/ var / logにログイン)!
James Green、

@jimbo-特定の状況に直接適用できない場合でも、小道具に感謝します:)
ウォーレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.