MySQLストレージエンジンの仕組み(アーキテクチャ)をざっくり理解する
by
revenue-hack
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
MySQLストレージエンジン の仕組みをざっくり理解する revenue-hack
Slide 2
Slide 2 text
自己紹介 ● 現在フリーランス ● バックエンドとインフラをメインに活動 ● 技術顧問とかしてる ● Goがメイン(後はPHPやTSとか) ● コードのアーキテクチャ設計やAWSが好き ● フロント(React, Vue)も一応やっていた ● 最近正社員になるか悩み中。。。 ● X(@tagaranoko1014)
Slide 3
Slide 3 text
zennで書いた記事の内容を紹介 https://zenn.dev/revenuehack/articles/dc5a901fbe90e6
Slide 4
Slide 4 text
アジェンダ ● SQLの処理フローについて ● ストレージエンジンの説明 ● SELECT文実行時の場合 ● DML(INSERT, UPDATE, DELETE)実行時の場合 ● まとめ
Slide 5
Slide 5 text
1. SQLが来て、パースする
Slide 6
Slide 6 text
1. SQLが来て、パースする 2. オプティマイザが実行計画作る
Slide 7
Slide 7 text
1. SQLが来て、パースする 2. オプティマイザが実行計画作る 3. エグゼキュータが実行 4. ストレージエンジンからデータ取得
Slide 8
Slide 8 text
1. SQLが来て、パースする 2. オプティマイザが実行計画作る 3. エグゼキュータが実行 4. ストレージエンジンからデータ取得 ストレージエンジンの話!
Slide 9
Slide 9 text
ストレージエンジンのアーキテクチャ
Slide 10
Slide 10 text
Buffer pool データのキャッシュが置かれる領域。 基本的にここを通してデータが返され る。多くの場合インメモリの 80%程度 がここの領域に当てられる。 インメモリ Log Buffer ディスク上のログファイルに書き込ま れるデータを一時的に保持する領 域。redoログデータをディスクに書き 込むと、遅くなってしまうため、 Log Bufferに書き込み、速くトランザクショ ンを実行出来るようにするためにあ る。 インメモリ Redo Log INSERT時などのCOMMITタイミング でデータが書き込まれる。クラッシュ リカバリー時に対応出来るように COMMIT時にこの不揮発性ストレー ジに書き込まれる ストレージ Tablespaces テーブルやインデックスが置かれる 部分 ストレージ
Slide 11
Slide 11 text
SELECT文のフロー SELECT * FROM `users`; ※これを2回実行した場合の例
Slide 12
Slide 12 text
1回目SELECT
Slide 13
Slide 13 text
2回目目以降SELECT
Slide 14
Slide 14 text
DML文(INSERT,UPDATE,DELETE)のフロー BEGIN; INSERT INTO `users` VALUES (1, ‘hoge’); INSERT INTO `users` VALUES (2, ‘fuga’); COMMIT;
Slide 15
Slide 15 text
BEGIN; INSERT INTO `users` VALUES (1, ‘hoge’);
Slide 16
Slide 16 text
INSERT INTO `users` VALUES (2, ‘fuga’);
Slide 17
Slide 17 text
COMMIT;
Slide 18
Slide 18 text
チェックポイントのタイミングwrite! Tablespacesへはいつ書き込まれる?
Slide 19
Slide 19 text
チェックポイントっていつ? ● ReadLogのサイズがあふれる時 ● あまりMySQLが稼働してない時(CPU使用率が低い) ● 適当な時間間隔 ● …
Slide 20
Slide 20 text
まとめ ● バッファプールキャッシュのサイズは重要 ● ストレージエンジンの仕組みを理解しておくと、パフォーマン スチューニングに役に立つ