$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MySQLストレージエンジンの仕組み(アーキテクチャ)をざっくり理解する
Search
revenue-hack
February 19, 2024
1
570
MySQLストレージエンジンの仕組み(アーキテクチャ)をざっくり理解する
有名なリレーショナルデータベース(RDB)の一つであるMySQLのストレージエンジンの仕組みをざっくり理解して、RDBのパフォーマンスチューニングに活かす
revenue-hack
February 19, 2024
Tweet
Share
Featured
See All Featured
Practical Orchestrator
shlominoach
190
11k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
A Tale of Four Properties
chriscoyier
162
23k
Agile that works and the tools we love
rasmusluckow
331
21k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Site-Speed That Sticks
csswizardry
13
990
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How STYLIGHT went responsive
nonsquared
100
5.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Facilitating Awesome Meetings
lara
57
6.7k
Transcript
MySQLストレージエンジン の仕組みをざっくり理解する revenue-hack
自己紹介 • 現在フリーランス • バックエンドとインフラをメインに活動 • 技術顧問とかしてる • Goがメイン(後はPHPやTSとか) •
コードのアーキテクチャ設計やAWSが好き • フロント(React, Vue)も一応やっていた • 最近正社員になるか悩み中。。。 • X(@tagaranoko1014)
zennで書いた記事の内容を紹介 https://zenn.dev/revenuehack/articles/dc5a901fbe90e6
アジェンダ • SQLの処理フローについて • ストレージエンジンの説明 • SELECT文実行時の場合 • DML(INSERT, UPDATE,
DELETE)実行時の場合 • まとめ
1. SQLが来て、パースする
1. SQLが来て、パースする 2. オプティマイザが実行計画作る
1. SQLが来て、パースする 2. オプティマイザが実行計画作る 3. エグゼキュータが実行 4. ストレージエンジンからデータ取得
1. SQLが来て、パースする 2. オプティマイザが実行計画作る 3. エグゼキュータが実行 4. ストレージエンジンからデータ取得 ストレージエンジンの話!
ストレージエンジンのアーキテクチャ
Buffer pool データのキャッシュが置かれる領域。 基本的にここを通してデータが返され る。多くの場合インメモリの 80%程度 がここの領域に当てられる。 インメモリ Log Buffer
ディスク上のログファイルに書き込ま れるデータを一時的に保持する領 域。redoログデータをディスクに書き 込むと、遅くなってしまうため、 Log Bufferに書き込み、速くトランザクショ ンを実行出来るようにするためにあ る。 インメモリ Redo Log INSERT時などのCOMMITタイミング でデータが書き込まれる。クラッシュ リカバリー時に対応出来るように COMMIT時にこの不揮発性ストレー ジに書き込まれる ストレージ Tablespaces テーブルやインデックスが置かれる 部分 ストレージ
SELECT文のフロー SELECT * FROM `users`; ※これを2回実行した場合の例
1回目SELECT
2回目目以降SELECT
DML文(INSERT,UPDATE,DELETE)のフロー BEGIN; INSERT INTO `users` VALUES (1, ‘hoge’); INSERT INTO
`users` VALUES (2, ‘fuga’); COMMIT;
BEGIN; INSERT INTO `users` VALUES (1, ‘hoge’);
INSERT INTO `users` VALUES (2, ‘fuga’);
COMMIT;
チェックポイントのタイミングwrite! Tablespacesへはいつ書き込まれる?
チェックポイントっていつ? • ReadLogのサイズがあふれる時 • あまりMySQLが稼働してない時(CPU使用率が低い) • 適当な時間間隔 • …
まとめ • バッファプールキャッシュのサイズは重要 • ストレージエンジンの仕組みを理解しておくと、パフォーマン スチューニングに役に立つ