AWS Aurora Serverless が GA 化とともに東京リージョンでの使えるようになりました。
- Aurora Serverless MySQL の一般利用が開始(Amazon Web Services ブログ)
すでに色々な記事が出ていますが、私はいつもの通りバッファプール(バッファキャッシュ)の挙動について確認してみました。
一時停止→復帰の場合
Aurora Serverless は、クライアントからの接続がない状態で一定時間(設定可能。デフォルトは 5 分間)を経過すると一時停止(pause)状態になります。
一時停止状態で再接続すると、15 ~ 30 秒程度経過後、一時停止時と同じキャパシティユニットのサイズで復帰(resume)するのですが、このときバッファプール(バッファキャッシュ)がどうなるのか確認してみます。
$ mysql -u mkadmin -h test.cluster-XXXXXX.ap-northeast-1.rds.amazonaws.com -p --default-character-set=utf8mb4
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.10 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
2018-08-20 07:47:04 2b47aaa43700 INNODB MONITOR OUTPUT
=====================================
(中略)
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 0; in additional pool allocated 0
Dictionary memory allocated 185320
Buffer pool size 98162
Free buffers 97933
Database pages 229
Old database pages 0
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0 single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 229, created 0, written 0
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 229, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
(以降省略)
Free buffers
・Database pages
の数値の通り、起動直後は空に近い状態です。
ここで、適当に用意したテーブルのチェックサムを実行してみます。
mysql> CHECKSUM TABLE backup_restore_test.text_table_01;
+-----------------------------------+-----------+
| Table | Checksum |
+-----------------------------------+-----------+
| backup_restore_test.text_table_01 | 495039982 |
+-----------------------------------+-----------+
1 row in set (4 min 44.35 sec)
mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
2018-08-20 07:53:19 2b47aaa84700 INNODB MONITOR OUTPUT
=====================================
(中略)
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 0; in additional pool allocated 0
Dictionary memory allocated 200431
Buffer pool size 98162
Free buffers 2048
Database pages 96114
Old database pages 35438
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0 single page 0
Pages made young 169, not young 5258610
0.00 youngs/s, 0.00 non-youngs/s
Pages read 614679, created 10, written 0
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 96114, unzip_LRU len: 0
I/O sum[776]:cur[0], unzip sum[0]:cur[0]
(以降省略)
Database pages
が増えて、読み込まれたことがわかります。
この状態でクライアントからの接続を切り、5 分(デフォルト通り)待ってから再接続します。
$ mysql -u mkadmin -h test.cluster-XXXXXX.ap-northeast-1.rds.amazonaws.com -p --default-character-set=utf8mb4
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.10 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
2018-08-20 08:03:58 2aee84ac2700 INNODB MONITOR OUTPUT
=====================================
(中略)
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 0; in additional pool allocated 0
Dictionary memory allocated 176617
Buffer pool size 98162
Free buffers 97934
Database pages 228
Old database pages 0
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0 single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 227, created 1, written 0
11.35 reads/s, 0.05 creates/s, 0.00 writes/s
Buffer pool hit rate 964 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 228, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
(以降省略)
消えてしまったようです。
手動でキャパシティユニットを変更した場合
ここで、一旦またテーブルのチェックサムを実行してから、キャパシティユニットを最初の 2 から 4 へ増やしてみました。
実行結果の記録は省略しますが、10 ~ 20 秒経過後にキャパシティユニットが増加すると、やはりバッファプール(バッファキャッシュ)は消えました。
自動でキャパシティユニットが変更された場合
未検証ですが、おそらく消えるはずです。
8/22追記:
キャパシティユニットを手動で 4 にした後、自動的に 2 に減ったときに確認してみたところ、やはり消えました。
手動の場合と同様、総メモリ容量の変化とともにバッファプール(バッファキャッシュ)に割り当てられるメモリの容量も変化するため、当然と言えば当然ですね。
その他
Aurora Serverlessについて、この検証中に色々わかったことがあるので、別の記事にまとめる予定ですました。