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
My MySQL Best Practices
Search
Satoshi MITANI
March 21, 2017
Technology
78
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
My MySQL Best Practices
Satoshi MITANI
March 21, 2017
More Decks by Satoshi MITANI
See All by Satoshi MITANI
MySQL go-sql-driver mysql と collation
mita2
0
180
MySQL の接続エラーと8.0.24
mita2
0
6.4k
MySQL ShelldumpInstance のバグを調べた件
mita2
0
60
MySQL Shell dumpInstance の仕組み
mita2
0
97
MySQLの容量とか圧縮まわり
mita2
0
70
MySQL 透過的暗号化とSSLを使ってみた
mita2
0
81
OSC 2017 Osaka MySQL 落ちないDBサーバの作り方
mita2
0
81
OSC 2017 Okinawa MySQL の高可用性構成比較 と新機能 Group Replication
mita2
0
94
(続)MySQL Group Replication
mita2
0
130
Other Decks in Technology
See All in Technology
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.1k
Claude Codeとのおしゃべりでセマンティックモデルの定義からダッシュボード作成まで完成させる
nic_sugiyama
0
110
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
250
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
入門!AWS Blocks
ysuzuki
1
130
不要なレビューをAIにまかせて AIコーディングの環境改善を加速した
shoota
1
120
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.1k
連合学習と機密コンピューティング
lycorptech_jp
PRO
0
120
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
6
2.4k
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
130
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
3
210
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
310
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
780
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Six Lessons from altMBA
skipperchong
29
4.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The agentic SEO stack - context over prompts
schlessera
0
820
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
610
Discover your Explorer Soul
emna__ayadi
2
1.1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
Transcript
My MySQL Best Practices 2017/03/21 MyNA @mita2
2 Thank you, Matt ! Welcome MySQL Nippon Association
みんなBest Practice おさらい • @yoku0825 • MySQL パターン • https://www.slideshare.net/yoku0825/mysql-71661984
• アンリーダーブルSQL • RDBMS・ザ・オラクルマシン etc… • @sodai1025 • Web エンジニアに知ってほしいRDBアンチパターン • http://soudai.hatenablog.com/entry/2017/03/04/190000 3
自己紹介 4 • 三谷 智史(Twitter: @mita2) • MySQLとの関わり 2002年~ 主に利用して開発
2010年~ 主に管理する立場
5 My MySQL Best Practice というかDBAからのお願いです
My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no
more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 6
My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no
more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 7
DBを選ぶ • みんな 大好き MySQL • 苦手なこともあるよ 8
MySQL の得意分野 9 OLTP系 ワークロード OLTP系 ワークロード DWH系 ワークロード DWH系
ワークロード テーブル テーブル • Online Transaction Processing • オンライン処理 • 結果をすぐ返す • 多数の行のうち 少数の行の複数のカラムに注目 • よくアクセスされる行と そうでない行がある • Data WareHouse • 集計・解析 • 多くはバッチ・非同期 • 多数の行のうち 多数の行の少数のカラムに注目 • 比較的均一にアクセスされる
MySQL の得意分野 10 OLTP系 ワークロード OLTP系 ワークロード DWH系 ワークロード DWH系
ワークロード テーブル テーブル • Online Transaction Processing • オンライン処理 • 結果をすぐ返す • 多数の行のうち 少数の行の複数のカラムに注目 • よくアクセスされる行と そうでない行がある • Data WareHouse • 集計・解析 • 多くはバッチ・非同期 • 多数の行のうち 多数の行の少数のカラムに注目 • 比較的均一にアクセスされる
DBMSの使い分け • DB選定フェーズを確保する • 「違うもの」と比較する • × MySQL vs MySQL
forks • ◦ MySQL vs Hadoop • ◦ MySQL vs Cassandra • ◦ OSS vs 商用 • × どのDBが一番良いか • ◦ どう組み合わせるのが良いか 11
My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no
more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 12
Use InnoDB, No more MyISAM • MyISAM は トランザクション非対応 •
BEGIN/COMMITが使えない・・・だけではない 13
Use InnoDB, No more MyISAM • MyISAM は ディスクに同期書き込みしない •
障害時にデータがロストするリスクがある • 破損チェックや復旧に時間がかかる 14
Use InnoDB, No more MyISAM • MyISAM フェードアウトは確定的 • MySQL
8.0 • Dictionary Data in InnoDB • DDL が crash safe に • https://dev.mysql.com/doc/refman/8.0/en/data-dictionary.html 15
My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no
more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 16
エラーハンドリング • DBのエラーはログに落とす • PHP PDOのERR_MODEをException にするの忘れがち • setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
• エラーハンドリングは「開発者の腕の見せ所」 17
リトライ • エラーはいつでもあり得る • DBの構成を工夫しても、リトライがなければ活かされない • リトライしてますか? • そのバッチ再実行できますか? 18
そしてテスト • 障害試験 • 負荷試験 • RDBはスケールできない(他と比較して • 近年、軽視されがち •
ビジネスの加速 • CI/CD 等によるチェックポイントのない運用 • クラウドによるスケールアップ 19
My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no
more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 20
定期的な再接続 • コネクションプーリングしているとき • 定期的に張りなおしが必要 • Apache なら MaxRequestsPerChild を設定
• 2つの理由 21
理由1 設定変更の反映 • コネクションの設定は、「新規接続時」に適用される • SET GLOBAL → 再接続しないといつまでも古い設定のまま 22
理由2 コネクションの偏りを解消する • 障害等でコネクションが偏る • 偏っても問題ないのが、理想だが・・・実際は不安 • 復旧後、自動で偏りが解消されるように 23
My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no
more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 24
クエリとクエリの間に処理をはさまない 25 Connect Connect Execute SQL Execute SQL Call WebAPI
Call WebAPI Execute SQL Execute SQL Disconnect Disconnect Connect Connect Execute SQL Execute SQL Call WebAPI Call WebAPI Execute SQL Execute SQL Disconnect Disconnect APIが遅くなると・・・ TIME
クエリとクエリの間に処理をはさまない • API を呼び出している間、コネクションは Idle 状態 • コネクションの生存期間が延びて・・・ • Too
many connections で新規接続不可 26
クエリとクエリの間に処理をはさまない • Idle コネクションはそのうち wait_timeoutで切られる • SQL 実行時には接続が失われている 27 Connect
Connect Execute SQL Execute SQL Call WebAPI Call WebAPI Execute SQL Execute SQL Disconnect Disconnect MySQL server has gone away MySQL server has gone away
クエリとクエリの間に処理をはさまない • DBの処理はまとめて行う • まとめられないなら、「遅くなる可能 性のある処理」にはタイムアウトを 28 Connect Connect Execute
SQL Execute SQL Call Web API Call Web API Execute SQL Execute SQL Disconnect Disconnect
My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no
more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 29
DBAとのコミュニケーションのコツ • 「やってほしい作業」ではなく「目的」を伝える • 開発者に見えているDBの状態はごく一部 • 経験豊富・情報量の多いDBAに「手段」はまかせる 30
31 Enjoy MySQL