MySQL 5.7.5の新機能。
ログ貼ってたら長くなったので、バッファプールサイズを小さくするのは別エントリーへ。
理屈的には、
- バッファプールを大きくするとき
* innodb_buffer_pool_chunk_size ごとに新しいページを確保しながらゴニョゴニョやる
* この処理中は *バッファプールへの全てのアクセスがブロックされるよ*
- バッファプールを小さくするとき
* innodb_buffer_pool_chunk_size ごとにページを追い出しながらゴニョゴニョやる
らしい。
http://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-online-resize.html
しかしバッファプール大きくする時の動作はInnoDBのトラフィック全滅ですか使えNEEEE とか、「オンラインでバッファプールサイズを変えようと思うこと自体負けてる」とか思ってたんですが、やってみると意外と楽しかった。
ブロックされっぷりだけ判ればいいので、mysqladmin exでInnodb_rows_insertedだけ差分表示。
実際に叩いたのは↓。
ログの具合が悪いのか何なのか、エラーログにresize startedとresize completedを吐いてくれなかったので代用。
80GBの拡張でおおよそ10秒ちょいのブロック。。
これなら、オフラインにしてサイズ変えて起動してinnodb_buffer_pool_load_at_startupするのに比べて無茶苦茶早く済む。
ちょっとマジですかイケそうじゃないですか。
おまけにdstat。
おもしろーい :)
ログ貼ってたら長くなったので、バッファプールサイズを小さくするのは別エントリーへ。
理屈的には、
- バッファプールを大きくするとき
* innodb_buffer_pool_chunk_size ごとに新しいページを確保しながらゴニョゴニョやる
* この処理中は *バッファプールへの全てのアクセスがブロックされるよ*
- バッファプールを小さくするとき
* innodb_buffer_pool_chunk_size ごとにページを追い出しながらゴニョゴニョやる
らしい。
http://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-online-resize.html
しかしバッファプール大きくする時の動作はInnoDBのトラフィック全滅ですか使えNEEEE とか、「オンラインでバッファプールサイズを変えようと思うこと自体負けてる」とか思ってたんですが、やってみると意外と楽しかった。
ブロックされっぷりだけ判ればいいので、mysqladmin exでInnodb_rows_insertedだけ差分表示。
# mysqladmin -r -i 2 ex | grep Innodb_rows_inserted
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 12296 | -- ここからtpcc_start
| Innodb_rows_inserted | 19250 |
| Innodb_rows_inserted | 13717 |
| Innodb_rows_inserted | 5033 |
| Innodb_rows_inserted | 4990 |
| Innodb_rows_inserted | 5757 |
| Innodb_rows_inserted | 5301 |
| Innodb_rows_inserted | 4355 |
| Innodb_rows_inserted | 4835 |
| Innodb_rows_inserted | 4909 |
| Innodb_rows_inserted | 5161 |
| Innodb_rows_inserted | 5331 |
| Innodb_rows_inserted | 4907 |
| Innodb_rows_inserted | 5384 |
| Innodb_rows_inserted | 5047 |
| Innodb_rows_inserted | 5437 |
| Innodb_rows_inserted | 4922 |
| Innodb_rows_inserted | 5010 |
| Innodb_rows_inserted | 4827 |
| Innodb_rows_inserted | 5208 |
| Innodb_rows_inserted | 5543 |
| Innodb_rows_inserted | 4362 |
| Innodb_rows_inserted | 5460 |
| Innodb_rows_inserted | 4819 |
| Innodb_rows_inserted | 4555 |
| Innodb_rows_inserted | 4696 |
| Innodb_rows_inserted | 5047 |
| Innodb_rows_inserted | 5492 |
| Innodb_rows_inserted | 511 | -- SET GLOBALがここらへん
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 0 |
| Innodb_rows_inserted | 3740 |
| Innodb_rows_inserted | 20354 | -- ここらへんでCompleted resizing buffer pool
| Innodb_rows_inserted | 20937 |
| Innodb_rows_inserted | 21281 |
| Innodb_rows_inserted | 21474 |
| Innodb_rows_inserted | 21752 |
| Innodb_rows_inserted | 19685 |
| Innodb_rows_inserted | 21784 |
| Innodb_rows_inserted | 22009 |
| Innodb_rows_inserted | 22107 |
| Innodb_rows_inserted | 21842 |
..
実際に叩いたのは↓。
mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
| 4294967296 |
+---------------------------+
1 row in set (0.00 sec)
mysql> SET GLOBAL innodb_buffer_pool_size= 80 * 1024 * 1024 * 1024;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2014-09-18 07:21:02 |
+---------------------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'innodb_buffer_pool_resize%';
+----------------------------------+----------------------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------------------+
| Innodb_buffer_pool_resize_status | Completed resizing buffer pool at 140918 7:21:11. |
+----------------------------------+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
| 85899345920 |
+---------------------------+
1 row in set (0.00 sec)
ログの具合が悪いのか何なのか、エラーログにresize startedとresize completedを吐いてくれなかったので代用。
80GBの拡張でおおよそ10秒ちょいのブロック。。
これなら、オフラインにしてサイズ変えて起動してinnodb_buffer_pool_load_at_startupするのに比べて無茶苦茶早く済む。
ちょっとマジですかイケそうじゃないですか。
おまけにdstat。
# dstat -taml 5
----system---- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- ------memory-usage----- ---load-avg---
date/time |usr sys idl wai hiq siq| read writ| recv send| in out | int csw | used buff cach free| 1m 5m 15m
18-09 07:19:07| 0 0 100 0 0 0| 0 0 |1038B 7824B| 0 0 | 87 103 |2615M 142M 66.0G 51.1G| 0 1.49 5.27
18-09 07:19:12| 0 0 100 0 0 0| 0 0 |1260B 10k| 0 0 | 94 109 |2615M 142M 66.0G 51.1G| 0 1.46 5.24
18-09 07:19:17| 0 0 100 0 0 0|1797k 0 | 492B 1935B| 0 0 | 381 238 |2619M 145M 66.0G 51.1G| 0 1.44 5.21 ### mysqldの起動がこのへん
18-09 07:19:22| 0 0 100 0 0 0| 0 18k|1176B 1831B| 0 0 | 160 235 |2619M 145M 66.0G 51.1G| 0 1.42 5.19
18-09 07:19:27| 0 0 100 0 0 0| 19k 13k| 306B 397B| 0 0 | 75 85 |2619M 145M 66.0G 51.1G| 0 1.39 5.16
18-09 07:19:32| 0 0 100 0 0 0| 0 19k| 246B 1557B| 0 0 | 80 84 |2616M 145M 66.0G 51.1G| 0 1.37 5.13 ### このへんでtpcc_start
18-09 07:19:37| 0 1 99 0 0 0| 592k 34k| 474B 987B| 0 0 |1031 845 |3231M 145M 66.0G 50.5G| 0 1.35 5.10
18-09 07:19:42| 1 0 99 0 0 0| 474k 11M| 330B 3324B| 0 0 | 651 731 |3507M 145M 66.0G 50.2G| 0 1.32 5.08
18-09 07:19:47| 0 0 100 0 0 0| 582k 13M| 174B 1327B| 0 0 | 906 1099 |3532M 145M 66.0G 50.2G| 0 1.30 5.05
18-09 07:19:52| 0 0 100 0 0 0| 627k 13M| 204B 965B| 0 0 | 911 1119 |3558M 145M 66.0G 50.2G| 0 1.28 5.02
18-09 07:19:57| 0 0 100 0 0 0| 646k 13M| 246B 498B| 0 0 | 862 1097 |3581M 145M 66.0G 50.2G| 0 1.26 4.99
18-09 07:20:02| 0 0 100 0 0 0| 525k 13M|1332B 687B| 0 0 | 968 1198 |3604M 145M 66.0G 50.1G| 0 1.24 4.97 ### ここらへんでSET GLBOAL
18-09 07:20:07| 43 11 44 2 1 0| 78M 26M| 240B 1512B| 0 0 | 63k 187k|6545M 145M 66.3G 47.0G|1.12 1.45 5.02
18-09 07:20:12| 30 7 55 7 1 0| 60M 227M| 36B 121B| 0 0 | 94k 181k|7662M 145M 66.4G 45.8G|1.19 1.46 5.00 ### ここらへんでCompleted resizing buffer pool
18-09 07:20:17| 15 4 71 9 1 0| 36M 276M| 24B 81B| 0 0 | 101k 140k|7662M 145M 66.6G 45.7G|1.42 1.50 4.99
18-09 07:20:22| 11 3 77 9 1 0| 27M 230M| 198B 208B| 0 0 | 83k 112k|7664M 145M 66.6G 45.6G|1.79 1.58 5.00
..
おもしろーい :)