GA

2014/09/26

MySQL 5.7.5で実装された オンラインでのInnoDBバッファプールサイズ変更(サイズ拡大編)

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だけ差分表示。

# 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
..


おもしろーい :)

0 件のコメント :

コメントを投稿