GA

2015/01/26

MySQL 5.7で暗黙のデフォルトが変わりそうなはなし

Morgan Tocker というMySQLの中の人(MySQL Community Teamのひと)が 自身のブログ で、MySQL 5.7のデフォルト値の変更に関する意見を募集していたりする。







ので、ちょっと解説してみます。わたしが勝手に思っていることを述べているだけなので、詳しくは原文をあたってください。


まずはこっち。 Proposal to change additional defaults in MySQL 5.7 | Master MySQL

* transaction_isolation
  * REPEATABLE-READ から READ-COMMITTED に

実際READ-COMMITTEDで十分だし、いくつかのサービスはREAD-COMMITTEDで速くなってるし、今後波及させていくつもりだったし、個人的にはいいんじゃない感。
クセのあるREPEATABLE-READがデフォルトじゃなくなるのは少し寂しい気がしなくもないのと、REPEATABLE-READを前提にした情報がWEBには溢れているので、それが淘汰されるまで時間がかかりそうだなぁと思うくらい。


* binlog_format
  * STATEMENT から ROW に

トランザクション分離レベルがREAD-COMMITTEDになるとSBRは使えないから当然こうなる。RBRはSBRに比べてサイズがでかいとはいえ、1クエリーで100万レコード書き換えるようなクエリーはそうそう(ユーザートラフィック上では)ないのでそこまで悲観してない。ところで一時期は暗黙のデフォルトまで上り詰めたMIXEDはどこいった。


* innodb_autoinc_lock_mode
  * 1から2に

1よりも2の方が並列性能高いんだけど、SBRで2にするとデータがズレることがあるよ! ということで1になっていたのが、RBRになるので安心して2にできるということか。


( ´-`).oO(新しいデフォルトでbinlog_formatをROW以外の何かに変える時は残りの2つも変えないとヤバい、と。憶えてられるかな。


次はこっち。 Proposal to change Replication and InnoDB Settings in MySQL 5.7 | Master MySQL


* binlog_error_action
  * 5.7.5ではbinlogging_impossible_modeと呼ばれていたアレ。
  * IGNORE_ERROR から ABORT_SERVER へ

バイナリーログの書き出しに失敗した時の動作を指定できるオプション。バイナリーログに書き出しができなければmysqldがまるっと落ちるようなデフォルトに。InnoDBログファイルとかもともとそうだし、InnoDBのクラッシュリカバリーにバイナリーログを使ったりする昨今では妥当な変更。


* innodb_checksum_algorithm
  * 昔innodb_checksumと呼ばれていたアレの発展バージョン。5.6からこの名前。
  * innodb (ソフトウェア計算) から crc32 (ハードウェア支援が受けられればそれを使える) に

ベンチとってみたくなります。


* innodb_page_cleaners, innodb_purge_threads
  * 1 から 4 へ

* innodb_strict_mode
  * OFF から ON へ

もともとONで使ってるからそんなに気にならない。


* innodb_log_file_size
  * 48M から 128M へ

今までが少なすぎたので、いいことかと(いや、自分で指定するけど)
昔はクラッシュリカバリーに時間がかかったーというけど5.5以降ならギガバイト単位でもそんなに困らないし、ストレージも大きくなったしってことで。


* innodb_buffer_pool_dump_at_shutdown, innodb_buffer_pool_load_at_startup
  * 0 から 1 へ

MySQL 5.6で入ったInnoDBバッファプール暖機のアレ。デフォルトで有効に。


* innodb_buffer_pool_dump_pct
  * 100 から 25 に

InnoDBバッファプールダンプ(↑InnoDBバッファプール暖気のやつ)のとき、バッファプール全体の何%をib_buffer_poolに書き出すかというオプションらしい。そもそも5.7での新顔。


* innodb_file_format
  * Antelope から Barracuda

ついにデフォルトになるときがきたのだー


* innodb_large_prefix
  * OFF から ON に

かみぽさんの悲願がついにかなう。


* binlog_gtid_recovery_simplified
  * OFF から ON に

オプション名も変わっているみたいだけど、そもそも初めて知ったオプション。
このへんと関係ある? Relay Log Recovery when SQL Thread’s Position is Unavailable | MySQL Server Blog


* sync_binlog
  * 0 から 1 へ

ACIDのDに使うようになっちゃってますからね。


* slave_net_timeout
  * 3600 から 60 へ

これも長すぎる長すぎる言われてたのが、ついに。


* [mysql]セクションのpropmt
  * "mysql> " から "\u@\h [\d] > " に

ユーザー名@ホスト名 [スキーマ名]、これはもともとやってる人多かったんじゃなかろうか。


* sql_mode
  * 今までのに加えて NO_AUTO_CREATE_USER

GRANTステートメント前にCREATE USERステートメント必須。


どっちもプロポーザルってことになっているので、興味があればコメントしてみたりするといいと思います :)



【2015/02/25 11:28】
新しくまた別のプロポーザルも出てたので、こっちに書きました。

日々の覚書: MySQL 5.7の暗黙のデフォルトに対するプロポーザル その2