Recommended
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PDF
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
PDF
PDF
MySQLとPostgreSQLの基本的なパラメータ比較
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
PDF
Pgunconf 20121212-postgeres fdw
PDF
MySQLとPostgreSQLにおける基本的なアカウント管理
PDF
MySQLとPostgreSQLの基本的なバックアップ比較
PDF
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
PDF
MySQLとPostgreSQLの基本的な実行プラン比較
PDF
MySQLとPostgreSQLの基本的なレプリケーション設定比較
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
PDF
PDF
Lt ingaoho-jsonb+postgeres fdw
PDF
PDF
PostgreSQL Unconference #29 Unicode IVS
PDF
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
PDF
RailsエンジニアのためのSQLチューニング速習会
PDF
PostgreSQL Unconference #26 No Error on PostgreSQL
PDF
PDF
AvailabilityZoneとHostAggregate
KEY
PDF
MySQL 5.7 トラブルシューティング 性能解析入門編
More Related Content
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PDF
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
PDF
PDF
MySQLとPostgreSQLの基本的なパラメータ比較
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
What's hot
PDF
PDF
Pgunconf 20121212-postgeres fdw
PDF
MySQLとPostgreSQLにおける基本的なアカウント管理
PDF
MySQLとPostgreSQLの基本的なバックアップ比較
PDF
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
PDF
MySQLとPostgreSQLの基本的な実行プラン比較
PDF
MySQLとPostgreSQLの基本的なレプリケーション設定比較
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
PDF
PDF
Lt ingaoho-jsonb+postgeres fdw
PDF
PDF
PostgreSQL Unconference #29 Unicode IVS
PDF
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
PDF
RailsエンジニアのためのSQLチューニング速習会
PDF
PostgreSQL Unconference #26 No Error on PostgreSQL
PDF
PDF
AvailabilityZoneとHostAggregate
Similar to Maatkit で MySQL チューニング
KEY
PDF
MySQL 5.7 トラブルシューティング 性能解析入門編
PDF
PDF
MySQL 5.5 Update #denatech
PPT
HandlerSocket plugin for MySQL
PDF
PDF
Osc2015北海道 札幌my sql勉強会_波多野_r3
PDF
ODP
PPT
Linux/DB Tuning (DevSumi2010, Japanese)
PPT
MySQL Casual Talks Vol.3 LT
PPT
PDF
PPT
PDF
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo
PDF
MySQL57 Update@OSC Fukuoka 20151003
PDF
tcpdump & xtrabackup @ MySQL Casual Talks #1
PDF
Index shotgun on mysql5.6
PPTX
PDF
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
Recently uploaded
PDF
膨大なデータ時代を制する鍵、セグメンテーションAIが切り拓く解析精度と効率の革新
PDF
ニューラルプロセッサによるAI処理の高速化と、未知の可能性を切り拓く未来の人工知能
PDF
AI開発の最前線を変えるニューラルネットワークプロセッサと、未来社会における応用可能性
PPTX
2025年11月24日情報ネットワーク法学会大井哲也発表「API利用のシステム情報」
PPTX
ChatGPTのコネクタ開発から学ぶ、外部サービスをつなぐMCPサーバーの仕組み
PDF
[2025 Rakuten Technology Conference] Daybreak for AI Agents
Maatkit で MySQL チューニング 1. Maatkit で MySQL チューニング YAPC::Asia Tokyo 2010 前夜祭 2. 自己紹介 金子 健介 (Kensuke Kaneko) プログラマ @ ペパボ 刺身☆ブーメラン id:a666666 @kyanny 3. 4. Maatkit とは MySQL 用のユーティリティ集 作者は実践ハイパフォーマンス MySQL の著者 なぜかエジプトっぽいロゴ Perl スクリプトなので読みやすい $ wc -l mk-* 127964 total ( 12 万行もあるけど)読みやすい 5. MySQL チューニングのいろは EXPLAIN SHOW INDEXES スロークエリログ mysqldumpslow mk-query-digest mk-query-profiler 6. 7. 使い方 $ mk-query-digest --fingerprints slow.log # Files: slow.log # Overall: 115 total, 12 unique, 0.00 QPS, 0.03x concurrency _____________ # total min max avg 95% stddev median # Exec time 2323s 3s 338s 20s 49s 43s 5s # Lock time 6ms 22us 270us 55us 98us 31us 42us # Rows sent 22.92k 0 664 204.08 487.09 171.01 166.51 # Rows exam 730.08k 0 123.41k 6.35k 38.40k 18.22k 329.68 # Time range 2010-09-28 05:54:30 to 2010-09-29 04:00:47 # bytes 25.16k 134 2.45k 224.03 381.65 239.90 130.47 # Profile # Rank Query ID Response time Calls R/Call Item # ==== ================== ================ ===== ======== ================ # 1 0x5C552C534D2A3440 1114.2297 48.0% 17 65.5429 SELECT t3 # 2 0xD9C2EFCBECC526D1 549.2743 23.6% 73 7.5243 SELECT t2 # 3 0x0255F509DADB6455 457.1587 19.7% 9 50.7954 UPDATE t1 オプションはドットファイルに書いておける t3 テーブルへのクエリが非常に遅い 8. 結果の見方 # Query 1: 0.00 QPS, 0.04x concurrency, ID 0x5C552C534D2A3440 at byte 3907 # pct total min max avg 95% stddev median # Count 14 17 # Exec time 47 1114s 3s 338s 66s 258s 96s 14s # Lock time 18 1ms 33us 86us 68us 80us 15us 73us # Rows sent 2 672 24 90 39.53 88.31 27.42 23.65 # Rows exam 50 372.21k 462 89.27k 21.89k 88.02k 30.14k 4.17k # Users 1 test # Hosts 1 # Databases 1 test # Time range 2010-09-28 05:54:30 to 2010-09-28 13:54:18 # bytes 15 3.97k 237 240 239.06 234.30 0 234.30 統計情報(全てのクエリ、個別のクエリ) 注目すべき部分 Exec time これはとてもだめな例 平均 258 秒もかかっている 9. mk-query-profiler もう少し詳しい情報を知りたい 例 : ディスク I/O がどれくらい発生しているか? EXPLAIN だけではわからないことも多い プロファイリングツール SET profiling=1 oprofile mk-query-profiler mk-query-profiler の利点 導入が手軽 deb, rpm あります スクリプト単体で入手可能 実行結果が見やすい 10. 使い方 $ mk-query-profiler -u user -D database -vv sql.txt +----------------------------------------------------------+ | 1 (303.3715 sec) | +----------------------------------------------------------+ __ Overall stats _______________________ Value _____________ Total elapsed time 303.372 Questions 27350 COMMIT 0 DELETE 0 DELETE MULTI 0 INSERT 0 INSERT SELECT 0 REPLACE 0 REPLACE SELECT 0 SELECT 1 UPDATE 0 UPDATE MULTI 0 Data into server 208 Data out of server 39153 Optimizer cost 17504.809 長いので以下略 11. 結果の見方 (1) 今回は I/O に関係しそうな部分を重点的にみた +----------------------------------------------------------+ | 1 (303.3715 sec) | +----------------------------------------------------------+ __ Row operations ____________________ Handler ______ InnoDB Reads 92594 1816374 __ I/O Operations _____________________ Memory ________ Disk InnoDB buffer pool Reads 2474442 34106 Random read-aheads 390 Sequential read-aheads 36 __ InnoDB Data Operations ____ Pages _____ Ops _______ Bytes Reads 44271 38091 725336064 ディスクからの読み込みが多い == 遅い 12. 結果の見方 (2) 同じクエリのプロファイル結果(連続して実行) +----------------------------------------------------------+ | 1 (0.6755 sec) | +----------------------------------------------------------+ __ Row operations ____________________ Handler ______ InnoDB Reads 92599 94843 __ I/O Operations _____________________ Memory ________ Disk InnoDB buffer pool Reads 323664 0 Random read-aheads 0 Sequential read-aheads 0 __ InnoDB Data Operations ____ Pages _____ Ops _______ Bytes Reads 0 0 0 ディスクからの読み込みが減った バッファプール(メモリ)に載っているのではやい 13. mk-query-profiler は何をしているか 大半はオプションのパースと出力のフォーマット 実際に仕事をしてるのは get_status_info() sub get_status_info { my ( $o, $dbh, $have_session ) = @_; my $res = $dbh->selectall_arrayref( $have_session ? ($o->get('external') ? 'SHOW GLOBAL STATUS' : 'SHOW SESSION STATUS') : 'SHOW STATUS' ); my %result = map { @{$_} } @$res; return { map { $_ => $result{$_} || 0 } @important_vars }; } SHOW STATUS の結果を整形してる 14. 15. チューニング後 (1) # Files: slow.log # Overall: 68 total, 8 unique, 0.00 QPS, 0.02x concurrency _______________ # total min max avg 95% stddev median # Exec time 1152s 3s 80s 17s 49s 18s 9s # Lock time 3ms 22us 312us 49us 84us 36us 38us # Rows sent 18.11k 0 1.45k 272.78 487.09 257.13 223.14 # Rows exam 75.33k 0 46.46k 1.11k 1.20k 5.33k 271.23 # Time range 2010-10-02 08:19:13 to 2010-10-03 04:00:46 # bytes 17.99k 134 4.02k 270.90 363.48 499.75 130.47 # Profile # Rank Query ID Response time Calls R/Call Item # ==== ================== ================ ===== ======== ================ # 1 0xD9C2EFCBECC526D1 644.6672 55.9% 51 12.6405 SELECT t2 # 2 0x0255F509DADB6455 357.9470 31.1% 7 51.1353 UPDATE t1 # 3 0xE4D15EB8FF64B268 45.1097 3.9% 5 9.0219 SELECT t3 t3 テーブルへのクエリに改善がみられた 16. チューニング後 (2) # Query 3: 0.01 QPS, 0.10x concurrency, ID 0xE4D15EB8FF64B268 at byte 6136 # pct total min max avg 95% stddev median # Count 7 5 # Exec time 3 45s 6s 12s 9s 12s 2s 8s # Lock time 8 285us 39us 90us 57us 89us 18us 47us # Rows sent 0 120 24 24 24 24 0 24 # Rows exam 5 4.20k 586 1006 861 964.41 144.29 918.49 # Users 1 test # Hosts 1 # Databases 1 test # Time range 2010-10-02 15:59:14 to 2010-10-02 16:06:35 # bytes 9 1.69k 346 346 346 346 0 346 17. 考察 mk-query-digest について 統計情報をすばやく把握 平均や 95% など情報量が多い 慣れるまではちょっと多すぎるかも mk-query-profiler について より詳細なデータが取得できる SHOW STATUS や SHOW ENGINE INNODB STATUS も大事ですね 「 たぶん ディスク読み込みが遅いんでメンテします」とか言わずに済む 仮説、調査、裏付け(!)、実行 自信をもってチューニングに取り組める 18. まとめ Maatkit は便利で導入も簡単 豊富なオプションと丁寧なドキュメント なぜかエジプトっぽいロゴ MySQL チューニングのお供にぜひどうぞ 参考 http://www.maatkit.org/ http://code.google.com/p/maatkit/ http://d.hatena.ne.jp/marqs/20100515/1273861805 http://d.hatena.ne.jp/hxmasaki/20100726/1280117979 19.