MySQLを根っこからじっくりと

0. 初めに

インフラエンジニアとして早6年。その中でもMySQLは切っても切り離せない存在となっています。

私がインフラエンジニアになった時から既にそうであったのですが、最近のミドルウェアは軽く動かすだけであれば、正直インストールして起動するだけで問題ないです

なので所謂スタートアップ系とか軽めのアプリケーションには、もうインフラエンジニア専業の奴はいらなくなってくるんじゃないかと思っています。(下手な使い方して、動かないとかはあると思いますが、どっちみちエラーログ見てググるだけなので、それなりのサーバサイドエンジニアであればできますし...)

自分は数万rpsや数千qpsの負荷を裁く必要があるサービスを扱う都合上、多少は深くミドルウェアを触っておりますが、
触る部分といえばmy.cnfの中身からbinlogを吐き出すディスクの分散程度です。もっと根っこのところは正直よくわかっておりません。

より深掘りして、根っこからいろいろ理解したい。というモチベーションで少しずつ記事を書いていこうと思っています。

1. 構成

ごりっごりに自分が気になる箇所をいっぱい書いてやろうと思っています。
また、このページに全部書くと大変なことになりそうなので、1テーマにつき1記事に分けて書いていこうかと考えています。

まずは、テーマ決めから...

1.1 ibdファイルの中身について

まずは、どのような仕組みで書き込まれて行っているのか。また、deleteされた際の挙動などが気になっています。

ファイルフォーマットのAntelopeやBarracuda周りも調べたい。

innodb_flush_method周りも調べてみたい。

1.2 木構造やインデックス

インデックス。張ればいいって話じゃない。どういう構造でインデックスが張られているのか。というところから調査したいと思っています。

また、query optimizerの挙動が変わる箇所なども気になっています。show engine statusやExplain 周りの挙動も含めて確認する形になるかと考えています。

1.3 InnoDBMyISAM

なんやかんやで最近はInnoDB使ってるけど、MyISAMとの違いやトランザクション分離レベルの話も触れたい。

参考 MySQL の Repeatable Read と RocksDB の楽観的トランザクション解説 | 株式会社インフィニットループ技術ブログ

多分、innodbの仕組みを詳しく調べるだけでも1記事作れそう。

Lockの仕組みも見たい。

1.4 GTIDとPosition Based Replication の違いや詳細

binlog/relaylogのとりかたから、それぞれの特徴をざっくりまとめたい気持ち。

1.5 InnoDB Cluster

各機能の挙動や、マスター昇格する際の挙動やスレーブ復帰の処理などを詳しく調べたい。

あと、ここが欲しかったというポイントも

1.6 Internal Temporary Tableについて

これに関してのbugを踏んだこともあり、内部テンポラリーテーブルについて知見を深めたい

これとかは参考 第129回 Internal Temporary Table(内部テンポラリテーブル)について[その1]:MySQL道普請便り|gihyo.jp … 技術評論社

1.7 doublewrite buffer

1.8 5.6以降の各バージョンの比較