こんにちは、モリモトです。
メンテなしでinnoDBバッファプールを変更できる可能性!?と期待してどん底に突き落とされた話をします
■MySQL5.7の新機能
MySQL5.7で、InnoDBバッファープールのオンライン変更ができるようになったらしい。
MySQL5.6までは、バッファープールのサイズ変更には再起動だったのでエッ・・・・凄い!!!!ってなりました。
なぜならバッファープールのサイズ頻繁にチューニングするのに、その度に調整して再起動してを繰り返しててめんどくせーってなってたから。
■ウキウキで試してみる
方法は通常の設定変更と変わないようで以下でセットできる模様。
SET GLOBAL innodb_buffer_pool_size = 変更したいサイズ;
モリモトの検証環境は低スペックなので細かく設定させていただきます….ということで
mysql> SET GLOBAL innodb_buffer_pool_size = 1443889152;
Query OK, 0 rows affected, 1 warning (0.21 sec)
ヨシ
確認してみます。
mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+------------+
| Variable_name | Value |
+-------------------------+------------+
| innodb_buffer_pool_size | 2147483648 |
+-------------------------+------------+
1 row in set (0.00 sec)
SET GLOBALしたのにSETされてねーじゃん!!!
驚きすぎてBookOffのテンションで心で叫びました。
インターネットで調べたら他の方はできてるのに・・なぜわたしだけ?
そういえばwarningがでてました。中身をみてみよう。
Query OK, 0 rows affected, 1 warning (0.21 sec)
これね。
原因を究明すべく確認します。
mysql> show warnings;
+---------+------+---------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------------+
| Warning | 1210 | InnoDB: Cannot resize buffer pool to lesser than chunk size of 134217728 bytes. |
+---------+------+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)
いや、知らんけど・・・・・・・
うん、わかりません。なに?これは
chunk size未満に変更することはできません?
うん
なに?これは・・・・・・・・
インフラ初心者のモリモトに厳しいwarningです。
■chunk sizeとは
「チャンクサイズ」は、データの読み書きを行う単位のことらしいです。
チャンクサイズ(innodb_buffer_pool_chunk_size )とインスタンスの数(innodb_buffer_pool_instances)で増減するらしい
ここまで書いてよくわかっていません
(間)
いろいろ調べて公式ドキュメントみたら一発だったのでリンクをはります。
https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-resize.html
モリモトなりの解釈ですが、
・innodb_buffer_pool_sizeはchunk sizeに依存している
・チャンクサイズは、innodb_buffer_pool_chunk_size 構成オプションによって定義されていて、構成オプションの既定値は128M
・バッファープールのサイズは常にinnodb_buffer_pool_chunk_sizeの倍数以上でないと駄目
結論から言うとinnodb_buffer_pool_chunk_sizeのサイズが128である限り
innodb_buffer_pool_sizeは128Mとか256Mとか384Mとか128Mの倍数でしか設定できない!!!
細かく設定するにはこのinnodb_buffer_pool_chunk_sizeを変更するしかないようでこれを反映するには再起動が必要・・・・・・・・
■諦めて再起動しました
気軽に再起動していい段階のときにチャンクサイズを変更しとかないとなと思いました。完