Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MySQLストレージエンジンの仕組み(アーキテクチャ)をざっくり理解する
Search
revenue-hack
February 19, 2024
1
140
MySQLストレージエンジンの仕組み(アーキテクチャ)をざっくり理解する
有名なリレーショナルデータベース(RDB)の一つであるMySQLのストレージエンジンの仕組みをざっくり理解して、RDBのパフォーマンスチューニングに活かす
revenue-hack
February 19, 2024
Tweet
Share
Featured
See All Featured
The Brand Is Dead. Long Live the Brand.
mthomps
49
29k
What’s in a name? Adding method to the madness
productmarketing
PRO
17
2.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
21
6.4k
Web Components: a chance to create the future
zenorocha
306
41k
Building a Scalable Design System with Sketch
lauravandoore
457
32k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
222
21k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
Fireside Chat
paigeccino
22
2.6k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
19
6.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
Gamification - CAS2011
davidbonilla
77
4.6k
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使用率が低い) • 適当な時間間隔 • …
まとめ • バッファプールキャッシュのサイズは重要 • ストレージエンジンの仕組みを理解しておくと、パフォーマン スチューニングに役に立つ