High Performance MySQL, 4th Edition の輪読会を開催しました

こんにちは。クラウド基盤エンジニアの飯塚です。

サイボウズが提供している多くのクラウドサービスでは MySQL をプライマリデータストアとして利用しています。安定したサービスを提供するためには MySQL の有効な利用法やアンチパターンについてキャッチアップする機会が定期的に必要となりますが、ちょうどよいタイミングで High Performance MySQL, 4th Edition が刊行されていたため輪読会を開催しました。輪読の目標としていた範囲が先日完了したため、その報告をさせていただきます。

この本について

名著と言われている「実践ハイパフォーマンス MySQL 第3版」(High Performance MySQL, 3rd Edition) の改定版であり、前の版から著者陣を変えて2021年末に発売されました。

www.oreilly.com

前の版が刊行されたのは2012年であり、MySQL 5.6 が GA になる前の MySQL 5.5 が最新だった時代です。刊行後に MySQL 5.6, 5.7, 8.0 とメジャーバージョンが3回も変わっており、さすがに古い内容も増えつつある状況だったため改定が期待されていました。

進め方

プロダクトチームとクラウド基盤チームの合同で取り組みました。9章以降の内容はプロダクトチームにとってはあまり業務で触れることが想定しにくいトピックを中心に扱っていたため1章から8章に集中して取り組みました。

期間としては週1時間の枠で半年ほどかかりました。準備のための事前の担当割り当てがあまり良くなく20分程度で終わってしまった回もあったので、計画的に進めることができれば3~4か月で終えることもできるでしょう。

特徴的な章の紹介

第3版の2章ではベンチマークについて扱っていましたが、第4版の2章では代わりにモニタリングについて扱っています。第3版が出版された当時は SLI/SLO や Site Reliability Engineering の考え方がまだ広く知られている状況ではありませんでしたが、今ではデータベースの分野にもそのような考え方が取り入れられつつある状況のため第4版の記述はこれらの考え方を意識したものになっていました。

3章では Performance Schema の説明にひとつの章が丸ごと割り当てられています。Performance Schema は MySQL 5.5 の時代から実装されていた機能ですが、第3版の刊行後にリリースされた MySQL 5.6 で機能面、性能面で実用的なものになったといわれています。Performance Schema はクエリのパフォーマンスやサーバーの状態に関してこれまでには得られなかった情報を得ることができる有用なツールであるため、今の時代の MySQL のパフォーマンス解析ツールの紹介としては納得の取り上げ方です。

MySQL で利用可能なストレージエンジンの中で InnoDB 一強の傾向が前の版の時代よりもさらに強くなっていることを反映して、もはや MyISAM は名前だけ登場する程度で InnoDB が前提の説明になっています。また最近の MySQL では innodb_dedicated_server の設定により調整必須のパラメータが自動で設定されるようになったことに加え、InnoDB の進化によって以前は安定した性能を維持するために調整が必要だったパラメータでも調整なしで安定動作するようになってきています。第5章では設定の最適化について MySQL の内部のアーキテクチャの説明を交えながら解説していますが、結局のところ innodb_dedicated_server の設定だけで多くの場合は問題ないと締めくくっています。あまり知られていない設定項目を緻密にチューニングすることで MySQL のパフォーマンスを最大限に引き出せるような事例を求めている読者にとっては寂しいかもしれませんが、そのような努力を要する設定項目はもはやほとんど残されていないということを教えてくれます。

おわりに

この記事では私たちが取り組んでいた輪読会について紹介しました。この本で得た知識を活用してサービスの改善に役立てていきたいと思います。