web+db vol97のMySQL運用最前線を読んだ
前職でソシャゲ開発/運用をしていた関係でちょろちょろ触る程度のなんちゃってDBA/インフラーなのでそこまで深い知識は持っていないけど、 最低限時代についていく必要はあるので読んだ。 なんか間違ってること僕が書いてたら教えてください。
目次
について書かれている。
MySQLの現在
今現在の最新である5.7に至るまでのMySQL史が紹介されている。 次期リリースの「MySQL 8.0」はしばらくでなさそうだし、5.6はリリースされてだいぶ経っている。 5.7に移行したほうがいいよね、という熱感を高める文章が記載されている。
innoDB徹底活用
- innodbの解説(デフォルトで有効なストレージエンジンだし他のストレージエンジンにする必要ないとか)
- mysqlのパラメータの中でも最も重要な
innodb_buffer_pool_size
がオンラインで変更可能になったよ - ファイルフォーマット/行フォーマットの変更
- 日本語の全文検索が可能になったよ
あたりが言及されている。
innodb_buffer_pool_size
の動的変更、
バッファプールを増やす場合 全てのアクセスが禁止されるのでパフォーマンス劣化が懸念され、
バッファプールを減らす場合 チャンク単位のページ開放でロックを取得する場合他のトランザクションに影響する等でパフォーマンス劣化が懸念される
あたりが気をつける点としてあって、短期的なパフォーマンス劣化で中長期のパフォーマンスを向上させるものだという認識。 オフラインで対応する場合mysqlプロセスを停止させる必要があるが、その場合buffer_pool_sizeが大きければ大きいほどflushに時間がかかるのでダウンタイムが伸びる可能性があって、 どうしてもダウンタイム作れないものにはアクセス少ない時間帯にオンラインコマンド叩いとく感じになると思う。
とはいえauroraなどマネージド・サービスならデフォルトでインスタンスの ¾ のメモリ量になるよう設定されているようで足らなければインスタンス変更で対応しそうだし、
自前でmysql管理するレベルのチームなら最初に innodb_buffer_pool_size
を適切に設定しておくだろうし、
よっぽどリリース時から想定されていないアクセスが来たみたいな状況じゃないと使わなそう?(素人意見)
フォーマットのデフォルトが変更されたあたりは多分メリットしかなくて、
- デフォルトがAnteropeからBarracudaになった件は、普通のアプリケーションエンジニアが意識するのって絵文字対応などのときだと思っていて、これにより各々の
my.cnf
にinnodb_file_format = Barracuda
を書く必要がなくなった- 関連して
innodb_large_prefix
も5.7デフォルトで1になっており絵文字対応がデフォルトで対応されている?
- 関連して
- デフォルト行フォーマット
innodb_default_row_format
がdynamic
になった件は、ちょっとまだ肌感としてはよくわかってなくて、 圧縮される(のでストレージ負荷が下がる)代わりにCPU負荷が上がるCompact( or Compressed)を採用するか否かの話になると思うんだけど、CPU負荷というのがどれくらいのものなのかわからないのと、もはや近頃はストレージ価格というのはどんどん下がっているのでリスク犯すなら思考停止してdynamic
でいいじゃん、と思ってるんだけどどうなんでしょう
日本語の全文検索に関しては結構読み飛ばした(mysql内で形態素解析等するケースが思いつかなかった)
柔軟で安全なレプリケーション
この章がもう結構衝撃的で、正直前職では master_log_file
, master_log_pos
めっちゃ駆使してたし、 set global sql_slave_skip_counter=1
も手動で叩いていたので
GTIDとクラッシュセーフスレーブすげーーという感想になった。
GTIDっていう概念初めて知った
— 夜ご飯 (@reizist) 2017年3月11日
"CHANGE MASTER TOステ ートメントの実行時にmaster_auto_position = 1を 設定するだけで master_log_file と master_log_pos を指定しなくてよくなる" 凄い嬉しい
— 夜ご飯 (@reizist) 2017年3月11日
GTID、常に最新のバイナリログに全てのログを残すので全てのバイナリログを持つ必要がない(逆に最新のバイナリログは必ずデータ整合を保つ必要がある)というのと、とはいえ各IDごとのイベントはメモリに持っていないのでGTIDが多くなるとIOが大量に発生するっていうところ
— 夜ご飯 (@reizist) 2017年3月11日
マルチソースレプリケーションに関しては、チャンネル単位で複数スレッドに並列化してスレイブを構築するほどスレイブ遅延が発生する状況を知らないので読み込んでみたけどあまり直近で使う未来は見えなかった。 むしろ
ただしチャンネルはお互いに独立しているため、チャ ンネル間の整合性は保証されません。すなわち、チャン ネル❶のマスタが更新されたあとにチャンネル❷のマス タが更新されたとしても、スレーブ上ではどちらが先に 更新されるか保証することはできない
等のコメントを読んで腰が引けたというかあまり使いたくない印象を持ってしまった。
設定における留意点と分析機能の利用
この章も「フムフム」と言って読んだ。SQLモードの変更やログのスタンプ形式の変更は読んで把握しておいてよかったなと思った。 とはいえ個人的にはDBは常にUTCでもいいんじゃないかとも思っているので(実際に前職はそういう運用をしていた)、頭にindexを作るに留める。
所感
どんどん最新機能出てきてそれを最前線で追っている方々、すげえみたいな小学生のような感想。
今までローカルのmysql5.6だったけど、手元の開発が落ち着いたタイミングで brew install mysql
で5.7にあげよう。(今は brew install mysql56
)
サーバーエンジニアで少しでもDB(mysql)触る人は是非読みましょう
- 作者: 外村和仁,小林徹,古川陽介,佐藤歩,yoku0825,是澤太志,一野瀬翔吾,加藤颯史,のざきひろふみ,うらがみ,水嶋淳貴,久田真寛,久保達彦,伊藤直也,遠藤雅伸,ひげぽん,海野弘成,はまちや2,竹原,倉岡洋義,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2017/02/24
- メディア: 大型本
- この商品を含むブログを見る
(pdfはgihyoから買える)
参考
www.slideshare.net
www.slideshare.net