-
Notifications
You must be signed in to change notification settings - Fork 1
/
MySQLパフォーマンスチューニング概要.txt
106 lines (85 loc) · 3.81 KB
/
MySQLパフォーマンスチューニング概要.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
■MySQLパフォーマンスチューニング概要
⇒諸事情により、プレゼンで使用した資料をそのまま共有はNGなため、
主な内容を以下にテキストでまとめました。
["MySQLパフォーマンスチューニング概要"のサマリー]
- システム変数(パラメータ)の確認
- show global variables;
- ステータス変数の確認
- show global status;
- ステータス変数を確認して、システム変数をチューニングする例
- "threads_created"(ステータス変数)が増加し続ける場合は、
"thread_cache_size"(システム変数)を増加させる
- "sort_merge_passes"(ステータス変数)が増加し続ける場合は、
"sort_buffer_size"(システム変数)を増加させる
("sort_buffer_size"は、セッション単位でも変更可能)
- クエリーキャッシュを使用している場合
- "qcache_lowmem_prunes"(ステータス変数)が増加し続ける場合は、
"query_cache_size"(システム変数)を増加させる
- "qcache_hits","qcache_inserts"(ステータス変数)を確認し、
"qcache_hits"が少ない場合は、クエリーキャッシュの無効化を検討
- InnoDBの診断
- SHOW ENGINE INNODB STATUS
- スキーマのデザイン
- 正規化する
- 正規化した後で、必要に応じて非正規化するのはいいが、
テーブル設計をないがしろにして正規化しないのはNG。
- データ型は、適切なものを選択する(よりサイズが小さいデータ型を選ぶ)
- インデックスは、以下のインデックスも活用する
- 複数列に対するインデックス
- プレフィックスインデックス
- カバリングインデックス
- オプティマイザの制御(ヒント句)
- SQL文に書かれた順番に結合する
- SELECT STRAIGHT_JOIN * from tbl1,tbl2 ...
- インデックスの使用/未使用
- SELECT STRAIGHT_JOIN * from tbl1,tbl2 ...
- スロークエリログ
- 実行に時間がかかったクエリをログに出力
- インデックスが使えなかったクエリを全部ログに出力することも可能
- ログをファイルではなく、テーブルに出力することも可能
(利点:SQLを使ってログの調査ができる)
- mysqldumpslow を使って、スロークエリログの集計/分析が可能
- 現在実行中のSQLを調査
- SHOW FULL PROCESSLIST;
(MySQL Workbenchを使うと、バックグランドスレッドやスリープしている
コネクションを非表示にできるため、より便利に調査可能)
- EXPLAIN
- SQLの実行計画を確認
- 以下の記事でEXPLAINの見方が解説されている
- MySQLのEXPLAINを徹底解剖
http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html
- MySQL Enterprise Monitor
- 商用版でのみ使用できる監視ツール
- MySQLサーバーの稼働情報を自動的に収集し、グラフ化して確認可能
- 問題発生の予兆を検知して警告を通知する(メール、SNMPTrap)機能も有り
- MySQL Query Analyzer
- MySQL Enterprise Monitorの一機能
- 悪いクエリーを確認するための専門の画面
- グラフを見ながら気になった時間帯を選択すると、その時間帯に
実行されたクエリーが絞り込まれて、一覧表示できる
- MySQL商用版の特徴
- 「パフォーマンス・チューニング」や「SQLチューニング」まで
通常サポートの範囲内
■その他の参考情報、参考資料、など
- MySQLのスロークエリログから一部を切り出して分析するパッチ
http://d.hatena.ne.jp/sh2/20100403
⇒以下のFeature request(機能追加要望)に"Affects me"してもらえると、
「このパッチをMySQL本体に取り込んで欲しい」と開発チームに要望を
伝えられるので、是非右側の"Affects me"ボタンをクリックしてください!!
Bug #52568 Begin and End option for mysqldumpslow
http://bugs.mysql.com/bug.php?id=52568
- MySQL 5.6 パラメータ検討会
http://d.hatena.ne.jp/sh2/20130806
⇒MySQL 5.6のパラメータ設定を検討する上で、有益な資料です。
- ふつうのWeb開発者のためのクエリチューニング
http://kamipo.github.io/talks/20140711-mysqlcasual6/#/title
⇒EXPLAINから悪いクエリを判断する方法等が紹介されています。
------------------------------------------------------------
[ハンズオンに関して]
■MySQL 5.6でのサブクエリの最適化に関して
今回勉強会で使ったデータではなく、MySQLのサンプルデータベース
(employeeデータベース)を使って、MySQL 5.5とMySQL 5.6でクエリー
実行速度を比較することもできます。
手順と実行結果を添付ファイルにまとめていますので、
ご参照下さい。
------------------------------------------------------------