なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

MySQLのgeneral_log出力のパフォーマンス影響を調べてみた

きっかけ

みんなで使っているMySQL上のデータを誰かが削除して、犯人探しをしたい、という話から。


別エントリでMySQLのログの種類と監査の手段について触れるけど、Community版だと基本的にgeneral_logを使うしか、後追いで誰が何したかを追いかける方法ってないのよね。


で、DB監査が要件に入っていないから、デフォルト通りgeneral_logをOFFにして性能要件固めてスペック決めてるのに、後で事件がおきてから騒ぐっていう。


じゃあ、ONにしたら、どの程度影響があるの?というのが調査の発端です。



試した環境

マシン・OS・MySQLのバージョンなど

2箇所で実験しました。


(A)自宅PC
WindowsマシンのVirtualBox上に立てたLinux+MySQL5.6.31
ストレージはUSB3.0経由の外付けHDD(IO DATAのHDCL-UTEシリーズ)で、IOPSは不明。
Virtualboxのゲストマシンイメージまるごと外付け側に乗せてます。


(B)AWS RDS
MySQL 5.6.23で、ストレージはGeneral Purpose (SSD) で1TBのPIOPSなし(3000 IOPS)


どちらも、SWAP不要なレベルにメモリを用意し、テストでアクセスする対象データもバッファに乗りきるようにInnoDB Buffer Pool Sizeをチューニングする以外は、すべてデフォルトです。

負荷条件

sh2氏謹製のjdbcrunner付属の「Tiny SysBench」をデフォルト設定で実行。
JdbcRunner - 汎用データベース負荷テストツール


「(A)自宅PC」の場合は、同じホストマシン上のVirtualBoxMySQLとは別のゲストマシンを立て、ゲストOS間通信でのリクエスト。


ホストマシンはCorei7の8スレ、メモリ16GBあるところから、各ゲストマシンにCPU2スレ、メモリ4GBずつ割り当てているので、リソース競合が起こるのはストレージのみという環境にしています。




「(B)AWS RDS」の場合は、手元のWindowsPC上のVirtualBoxLinuxマシンを立てて、そこからRDSに対してリクエスト。


これを、ログ出力モードを切り替えながら数回繰り返して計測しました。


結果

具体的なスコアではなく、デフォルト時に対する比率で表すと、以下のような結果となりました。
複数回実施の結果からの傾向なので、当然ばらつきがありますが、そこは丸めて掲載しています。

No general_log log_output mysql.general_logのENGINE (A)自宅PCスコア (B)RDSのスコア
(1) 0(OFF) - - 1.00 1.00
(2) 1(ON) FILE - 0.95 0.86
(3) 1(ON) TABLE CSV 0.59 0.82
(3) 1(ON) TABLE MyISAM 0.67 未計測

自宅PCとRDSが1:1という意味ではなく、自宅-(1)に対し、自宅-(2)~(4)、RDS(1)に対し、RDS-(2)~(4)です。


なお、RDSのスコアは、インスタンスタイプ「db.r3.large(2vCPU+15GiBメモリ)」の結果に基づくもので、「db.t2.micro」でも試してみたのですが、(3)のテーブル出力のケースでは自宅PC並に劣化(0.65)しました。


また、RDSだと、他に同じインスタンスにアクセスしている人がいない状態でも、計測する度にスコアがブレブレになり、明らかに負荷が上がるはずのモードの方がスコアが良いという事例が発生しており、ある程度安定したかな(=自宅PCと似たような傾向になったかな)と判断したところを恣意的に選択していますので要注意です。


実ハード上で共有する他のインスタンスの利用状況に引きずられているのでしょうか。

考察

(1)ファイルに吐くだけなら、思ったよりは負荷が軽い。
(2)劣化傾向から見るに、影響があるのはCPUよりはDisk I/Oの方。
 エビデンス残していませんが、モード間のCPU負荷は大差なかった印象です。(後でもう少ししっかり計測してみたい)


最大性能が1割程度は下がることに間違いはないです。
DB監査の要件の有無は、要求スペックを決める段階でしっかり確認し、業務系負荷と合わせて満たせるものを選定するべく計測しましょう!


実践ハイパフォーマンスMySQL 第3版

実践ハイパフォーマンスMySQL 第3版

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド