2014年9月26日金曜日

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

MySQL 5.7.5の新機能、オンラインバッファプールサイズ変更について。
今のサイズより大きくする(サイズ拡大編)は別エントリーで

↑のエントリーにも書いたけど、理屈的には
* バッファプールサイズを今より大きく変更する時には全ブロック
* バッファプールサイズを今より小さく変更する時にはブロックなし
らしい。れつご。


# mysqladmin -r -i 2 ex | grep Innodb_rows_inserted
..
| Innodb_rows_inserted                          | 19837                                              | -- 前のエントリーの続きで、バッファプール80GBでtpcc_startでトラフィックかけてる
| Innodb_rows_inserted                          | 18892                                              |
| Innodb_rows_inserted                          | 18198                                              |
| Innodb_rows_inserted                          | 17974                                              |
| Innodb_rows_inserted                          | 4293                                               | -- このへんでSET GLOBAL
| Innodb_rows_inserted                          | 1261                                               |
| Innodb_rows_inserted                          | 1160                                               |
| Innodb_rows_inserted                          | 1669                                               |
| Innodb_rows_inserted                          | 1207                                               |
| Innodb_rows_inserted                          | 744                                                |
| Innodb_rows_inserted                          | 1274                                               |
| Innodb_rows_inserted                          | 964                                                |
| Innodb_rows_inserted                          | 1060                                               |
| Innodb_rows_inserted                          | 1134                                               |
| Innodb_rows_inserted                          | 1197                                               |
| Innodb_rows_inserted                          | 1147                                               |
| Innodb_rows_inserted                          | 1199                                               |
| Innodb_rows_inserted                          | 1261                                               |
| Innodb_rows_inserted                          | 1247                                               | -- まだ終わってないけど、以降は似たような値が続く
..
| Innodb_rows_inserted                          | 2998                                               |
| Innodb_rows_inserted                          | 3325                                               |
| Innodb_rows_inserted                          | 3434                                               |
| Innodb_rows_inserted                          | 2894                               | -- たぶんここでCompleted resizing buffer pool
| Innodb_rows_inserted                          | 902                                |
| Innodb_rows_inserted                          | 559                                |
| Innodb_rows_inserted                          | 765                                |


コマンド。

mysql> SELECT NOW(); SET GLOBAL innodb_buffer_pool_size= 4 * 1024 * 1024 * 1024;
+---------------------+
| NOW()               |
+---------------------+
| 2014-09-18 07:32:19 |
+---------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GLOBAL STATUS LIKE 'innodb_buffer_pool_resize%';
+----------------------------------+------------------------------------+
| Variable_name                    | Value                              |
+----------------------------------+------------------------------------+
| Innodb_buffer_pool_resize_status | Withdrawing blocks to be shrunken. |
+----------------------------------+------------------------------------+
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:41:30. |
+----------------------------------+----------------------------------------------------+
1 row in set (0.00 sec)

10分かかったけど特にブロックもなく(ただし、innodb_lock_wait_timeout= 1にしてるから、それでタイムアウトしたトランザクションはあった)ある程度想像通り。


----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:31:34|  7   1  88   4   0   0|7576k  158M|  60B  711B|   0     0 |  69k   92k|51.8G  136M 67.3G  609M|3.59 8.37 8.50
18-09 07:31:39|  6   1  89   4   0   0|8872k  164M| 222B  600B|   0     0 |  60k   83k|51.9G  136M 67.3G  577M|3.38 8.25 8.46
18-09 07:31:44|  7   1  88   4   0   0|9477k  147M| 276B 1082B|   0     0 |  59k   83k|51.9G  136M 67.2G  577M|3.11 8.11 8.42
18-09 07:31:49|  7   1  88   4   0   0|8838k  145M| 324B  380B|   0     0 |  64k   88k|51.9G  136M 67.2G  566M|2.94 7.99 8.38
18-09 07:31:54|  7   1  88   4   0   0|9045k  145M| 534B  690B|   0     0 |  65k   89k|51.9G  136M 67.2G  569M|2.79 7.88 8.34
18-09 07:31:59|  8   1  87   4   0   0|9562k  152M| 414B  524B|   0     0 |  68k   95k|52.0G  136M 67.1G  607M|2.81 7.79 8.31
18-09 07:32:04|  7   1  88   4   0   0|8458k  154M| 324B 1376B|   0     0 |  68k   93k|52.0G  136M 67.1G  625M|2.74 7.70 8.28
18-09 07:32:09|  8   2  86   4   0   0|9323k  149M| 192B 1059B|   0     0 |  71k   99k|52.0G  136M 67.1G  584M|2.60 7.59 8.24
18-09 07:32:14|  6   1  88   4   0   0|  10M  179M| 462B  526B|   0     0 |  67k   91k|52.0G  136M 67.1G  572M|2.47 7.48 8.20 ### ここでSET GLOBAL
18-09 07:32:19|  7   1  87   4   0   0|  11M  149M|  78B   83B|   0     0 |  73k   98k|52.1G  136M 67.0G  591M|2.35 7.37 8.16
18-09 07:32:24|  2   0  94   3   0   0|3083k  122M| 246B  370B|   0     0 |  68k   78k|52.1G  136M 67.1G  570M|2.33 7.28 8.13
18-09 07:32:29|  1   0  95   3   0   0|2534k  116M| 210B  257B|   0     0 |  68k   76k|52.1G  136M 67.0G  616M|2.22 7.18 8.09
18-09 07:32:34|  1   0  95   3   0   0|3034k  115M| 108B   65B|   0     0 |  64k   72k|52.1G  136M 67.0G  596M|2.12 7.07 8.05
18-09 07:32:39|  1   0  95   3   0   0|2546k  121M| 450B 1102B|   0     0 |  66k   74k|52.1G  136M 67.1G  579M|2.03 6.97 8.01
18-09 07:32:44|  1   0  95   3   0   0|2746k  118M|  54B   22B|   0     0 |  68k   76k|52.1G  136M 67.0G  632M|1.95 6.87 7.97
18-09 07:32:49|  1   0  95   3   0   0|2560k  122M|   0     0 |   0     0 |  64k   72k|52.1G  136M 67.0G  616M|1.87 6.78 7.9
..
18-09 07:41:09|  1   1  93   5   0   0|6458k  302M|  60B  610B|   0     0 |  11k   16k|52.1G  134M 67.1G  580M|1.88 3.00 5.51
18-09 07:41:14|  1   1  94   4   0   0|5389k  299M|  72B  559B|   0     0 |  12k   16k|52.1G  134M 67.1G  566M|1.81 2.97 5.49
18-09 07:41:19|  1   1  94   4   0   0|5843k  299M|  60B  544B|   0     0 |  13k   17k|52.1G  134M 67.1G  571M|1.90 2.97 5.47
18-09 07:41:24|  1   1  94   4   0   0|5178k  312M|  60B  544B|   0     0 |  13k   18k|52.1G  134M 67.1G  576M|1.91 2.95 5.45
18-09 07:41:29|  1   5  94   1   0   0|1595k   42M|  60B  554B|   0     0 |2307  2665 |17.3G  134M 67.1G 35.3G|2.08 2.97 5.45
18-09 07:41:34|  1   1  97   1   0   0|7552k   66M|  60B  548B|   0     0 |2987  3801 |9.81G  134M 67.1G 42.8G|1.99 2.94 5.42 ### ここでCompleted resizing buffer pool
18-09 07:41:39|  0   0  99   0   0   0|  10M   14M|  60B  554B|   0     0 |1004  1337 |9.81G  134M 67.1G 42.8G|1.83 2.89 5.39
18-09 07:41:44|  0   0  99   0   0   0|  10M   14M|  60B  554B|   0     0 |1023  1352 |9.81G  134M 67.2G 42.7G|1.69 2.84 5.36
18-09 07:41:49|  0   0  99   0   0   0|8557k   14M|  60B  554B|   0     0 | 932  1250 |9.81G  134M 67.2G 42.7G|1.55 2.79 5.33
18-09 07:41:54|  0   0  99   0   0   0|9382k   14M|  60B  554B|   0     0 | 950  1275 |9.81G  134M 67.2G 42.7G|1.43 2.75 5.31
18-09 07:41:59|  0   0  99   0   0   0|8710k   13M|  60B  554B|   0     0 | 942  1257 |9.81G  134M 67.2G 42.7G|1.31 2.70 5.28
18-09 07:42:04|  0   0  99   0   0   0|9101k   14M|  60B  554B|   0     0 | 986  1297 |9.81G  134M 67.3G 42.6G|1.21 2.66 5.25
18-09 07:42:09|  0   0  99   0   0   0|8640k   15M|  60B  607B|   0     0 |1243  1673 |9.81G  134M 67.3G 42.6G|1.11 2.61 5.22


* ストレージへのWriteがゴリゴリ走るのは、バッファプールの縮小はつまるところバッファプールからページがこぼれるのと同じ動作になのでflushが頻発する
* 最終的なfreeは当然バッファプールリサイズが全て終わったあと。
* Last checkpointed atの値から1GBくらい引き離されたところでやってみたけど一応吸収してくれてるぽい。

ある意味想定内だったアレとしては、
* innodb_buffer_pool_instances= 1で(でないとinnodb_buffer_pool_sizeを1GB未満にできないから)
* innodb_log_file_size= 2Gで
* innodb_buffer_pool_size= 80Gから
* innodb_buffer_pool_size= 256Mに変更したら
ハングアップ!

ご利用は計画的にってことですねわかりますん :)

0 件のコメント :

コメントを投稿