2013年2月21日木曜日

MySQL5.6での新しい暗黙のデフォルトを改めて

使ってみたりBugsに色々上がったりしているのを見たのでメモ。

ネタ元はOracle公式のここ。 MySQL Server 5.6 defaults changes

・binlog_checksum
⇒5.6からの新規パラメータ。
暗黙のデフォルトはcrc32だが、
マスターが5.6、スレーブが5.5以下の(定石を無視した)環境ではnoneでないとI/O Threadが転ける

・innodb_buffer_pool_instances
⇒5.5ではデフォルト1が、デフォルトautosized8に。
autosizedではinnodb_buffer_pool_sizeが1300M以上の時はinnodb_buffer_pool_size/128Mに設定されるらしい。
木下さんが昔「5.5では1から動かさない方が良いよ」って書いていたけれど、
Dimitriさんが5.6でやったやつを見ると使い物になりそうだし、
Vadimさんが5.6.7でやったやつを見ても、バッファプールが100GB超えるまでは安定して動きそう。

・innodb_file_per_table
⇒暗黙のデフォルトがONに。やったね。

・innodb_stats_on_metadata
⇒暗黙のデフォルトがOFFに。やったね。

・query_cache_type
⇒暗黙のデフォルトが0(OFF)に。
query_cache_typeはオンラインで変更可能だけれど、
0で起動したインスタンスを1, 2に変更することはできないので注意

・sort_buffer_size
⇒暗黙のデフォルト2Mから256Kへ。
filesortしてるけど2Mありゃ良いかーと思ってた環境は明示しないとなぁ。。

・sync_master_info/sync_relay_log/sync_relay_log_info
⇒0から10000へ。10,000イベント記録するたびにfdatasyncする、という意味。
10000イベントって結構簡単に行きそうな気がする。I/Oに負荷行くかも。


取り敢えず気が付いたところだけー。


【2013/02/21 12:25】


mysql56> show variables like 'innodb_buffer_pool%';+-------------------------------------+----------------+| Variable_name                       | Value          |+-------------------------------------+----------------+| innodb_buffer_pool_dump_at_shutdown | OFF            || innodb_buffer_pool_dump_now         | OFF            || innodb_buffer_pool_filename         | ib_buffer_pool || innodb_buffer_pool_instances        | 8              || innodb_buffer_pool_load_abort       | OFF            || innodb_buffer_pool_load_at_startup  | OFF            || innodb_buffer_pool_load_now         | OFF            || innodb_buffer_pool_size             | 2147483648     |+-------------------------------------+----------------+8 rows in set (0.00 sec)

Σ(゚д゚lll) 俺のところでもなってない!


storage/innobase/handler/ha_innodb.ccの中を覗いてみると、
---GPLのコードです---

 3027         if (innobase_buffer_pool_instances == 0) {
 3028                 innobase_buffer_pool_instances = 8;
 3029
 3030 #if defined(__WIN__) && !defined(_WIN64)
 3031                 if (innobase_buffer_pool_size > 1331 * 1024 * 1024) {
 3032                         innobase_buffer_pool_instances
 3033                                 = ut_min(MAX_BUFFER_POOLS,
 3034                                         (long) (innobase_buffer_pool_size
 3035                                         / (128 * 1024 * 1024)));
 3036                 }
 3037 #endif /* defined(__WIN__) && !defined(_WIN64) */
 3038         }

---GPLのコードここまで---

「8. On 32 bit Windows only, if innodb_buffer_pool_size is greater than 1300M, default is innodb_buffer_pool_size / 128M」

………8。 ただし、32bit Windowsだけ、ほげほげ~。

8, On 32bit Windows only. if ...ってコンマとピリオドを逆に読んでた。。ごめんなさい。。


【2013/02/26 10:05】
そういえば元ネタにしたページには載っていなかったけど、performanse_schemaもデフォルトで有効になりました。
performanse_schemaをそんなにカジュアルに使うか? というのと、
Bug #68413 performance_schema overhead is at least 10% こんなのもVerifyされているので、
基本的には明示的にOFFにした方が良いと思われ。。


【2013/03/08 18:37】

・join_buffer_size
 ⇒5.5はデフォルト128k、5.6では256k。
  性能悪くなることはないだろー、とタカをくくってたけど、
  コネクション数が多い環境だと無視できない差だなと気付いたので追記。

0 件のコメント :

コメントを投稿