Weitere ähnliche Inhalte Ähnlich wie MySQL 初めてのチューニング (20) Kürzlich hochgeladen (10) MySQL 初めてのチューニング2. 自己紹介
• id:Craftworks
• Twitter: @Craftworks
• github: https://github.com/Craftworks
• Blog: http://d.hatena.ne.jp/Craftworks
• 最近は EC2 で Perl 書いてます
• ずっと PostgreSQL を使っていた MySQL
初心者です
12. sort_buffer_size
– ORDER BY, GROUP BY に使われる領域
– 多用する場合は増やす
read_rnd_buffer_size
– ソート後にレコードを読む際に使用
– ORDER BY の性能向上
13. join_buffer_size
– インデックスを使用しないテーブル結合の
際に使われる領域
– インデックスを用いないテーブル結合は避
けるべきなので大きくする必要は無い
17. innodb_log_file_size
– InnoDBの更新ログを記録するディスク上の
ファイル
– innodb_log_file がいっぱいになったら、
innodb_buffer_poolの中の更新されたデー
タをディスクに書き出し
– innodb_buffer_pool_size を大きくしたら
innodb_log_file_size も合わせて調整
– 大きくするほどクラッシュリカバリに時間が
かかる
21. 設定の目安
グローバルバッファ
+ (スレッドバッファ × 最大接続数)
= 搭載メモリの 8 ~ 9 割
警告: 32-bit GNU/Linux x86 上では、メモリ使用を高く設定しすぎないように注意して
ください。glibc はプロセス ヒープがスレッド スタックよりも大きくなる事を許容する可
能性があり、その為サーバがクラッシュしてしまうかもしれません。もし次の式の値が
2GB に近い、またはそれを上回っていたら危険です:
innodb_buffer_pool_size + key_buffer_size +
max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size) +
max_connections*2MB
22. 設定メモリ量の計算
• 個々の設定を計算するのは面倒臭い
– ツールがあります
– mymemcheck
– !includedir に対応したものを github に置きました
– https://gist.github.com/733390
– mysql -e 'SHOW VARIABLES' | mymemcheck
– mymemcheck ~/my.cnf
23. 実行結果抜粋
global_buffers
key_buffer_size 16777216 16.000M
innodb_buffer_pool_size 268435456 256.000M
innodb_log_buffer_size 67108864 64.000M
innodb_additional_mem_pool_size 20971520 20.000M
net_buffer_length 16384 16.000K
---------------------------------------------------
total 356.016M
25. key_buffer_size の調整
• SHOW STATUS LIKE 'Key_read%';
– Key_read_requests / Key_reads = 150 以上になる
ように key_buffer_size を調整
• SHOW STATUS LIKE 'Key_blocks%';
– Key_blocks_unused が数百など少ない場合
key_buffer_size を増やす必要がある。
26. 最大接続数とスレッド数の確認
• SHOW STATUS LIKE '%connection%';
– Max_used_connections
• これまでに記録された同時接続数の最大値
• SHOW STATUS LIKE 'Threads%';
– Threads_connected
• 現在開いている接続の数
– Threads_created
• 接続を処理するために生成されたスレッド数
– Threads_running
• スリープ状態になっていないスレッド数
27. table_open_cache の調整
• SHOW STATUS LIKE 'Open_tables';
– Open_tables
• 現在開かれているテーブル数を確認
– Opened_tables
• たとえ多くの FLUSH TABLES を実行していない場合でも、
この値が非常に大きい場合や急速に大きくなる場合
は、テーブルキャッシュサイズを拡張する
28. query_cache_size の調整
• SHOW STATUS LIKE 'Qcache%';
– Qcache_free_memory
• query_cache_size で割り当てたメモリ残量
• これが小さくなって、Qcache_lowmem_prunes が増加してい
たら、query_cache_size の増量を検討
– Qcache_inserts / Qcache_hits
• Qcache_inserts に対して Qcache_hitsが少ないとキャッシュ
のヒット率が悪い
– Qcache_free_blocks
• 増加している場合 → フラグメンテーション発生
– FLUSH QUERY CACHE でデフラグする必要がある
30. まとめ
• 最大限のパフォーマンスを発揮できるよ
うに、なるべく多くのメモリを割り当てる
• かつ、コネクションが増えた時にメモリを
食い過ぎてスワップが発生しないように、
安全なラインに設定する
• 運用しながら SHOW STATUS で値を確認
しながらチューニングする
31. 参考
• 6.5.5. MySQL でのメモリの使用
– http://dev.mysql.com/doc/refman/5.1/ja/memory-use.html
• 9.3. InnoDB スタートアップオプションとシステム変数
– http://dev.mysql.com/doc/refman/5.1-olh/ja/innodb-parameters.html
• 4.13.3. クエリ キャッシュの設定
– http://dev.mysql.com/doc/refman/5.1/ja/query-cache-configuration.html
• 6.4.8. MySQL でのテーブルのオープンとクローズの方法
– http://dev.mysql.com/doc/refman/5.1/ja/table-cache.html
• 13.5.3. InnoDB 設定
– http://dev.mysql.com/doc/refman/5.1/ja/innodb-configuration.html
• 5分でできる、MySQLのメモリ関係のチューニング!
– http://dsas.blog.klab.org/archives/50860867.html