目次
ごあいさつ
こんばんは。
好きなお菓子はその日によりけり、もに倉です。
今回はなんか調べても情報が散らかっててよくわからなかったRDSの仕様を紹介します。
登場物紹介
お名前:RDS for MySQL
インスタンスクラス:db.t3.micro (2CPU,1GB)
DB インスタンスパラメータグループ:default.mysql8.0
発端
えーと、innodb_buffer_pool_sizeの設定は↓だから~
DBInstanceClassMemory = 1GBってことは、DBInstanceClassMemory*3/4 = 768MB か~
まあ一応実際の設定も見に行っておきますかね……。
MySQL [(none)]> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 268435456 |
+-------------------------+-----------+
1 row in set (0.009 sec)
むむ?
768MBではなさそうだな~。でも見間違いか計算違いかもしれんし。
268MB……?
な、なんかinnodb_buffer_pool_sizeが思ってんのと違う~!
なんで? 調べてみました!
調べてみたんですけど情報が散らかっててよくわからなかったので、
AWSのサポートに問い合わせました!
結果、簡潔に言うと仕様とのことでした。
(冒頭でネタバレしている通り)
AWSドキュメントによると……
「DB パラメータの指定 - DBInstanceClassMemory」
この数値は、DB インスタンスクラスの合計メモリ量から始めて内部的に計算されます。
この数から、インスタンスを管理する RDS プロセスとオペレーティングシステム用に予約されているメモリ量を減算します。
したがって、この数値は、「 DB インスタンスクラス」のインスタンスクラステーブルに示されているメモリ値よりも、常にやや低くなります。
正確な値は、複数の要因の組み合わせによって異なります。
MySQLだけでなくほかの要素(OS・システムなど)にもメモリを使うから、
実際に使えるメモリはDBInstanceClassMemoryの値よりも小さい ということのようです。
また、インスタンスクラスによっても変動する可能性があり……
MariaDB または MySQL DB インスタンスが db.t3.micro や db.t3.small などの
小さな DB インスタンスクラスで実行されている場合、使用可能な合計メモリは少なくなります。
これらの DB インスタンスクラスでは、使用可能なメモリのかなりの部分が RDS によって予約されるため、値 max_connections に影響します。
というわけで、小さいインスタンスクラスだととくに小さくなるみたいですね。
ほかにもあって
「Amazon RDS for MySQL の既知の問題と制限 - innodb_buffer_pool_size の上書き」
マイクロ DB インスタンスクラスまたはスモール DB インスタンスクラスでは、innodb_buffer_pool_size パラメータのデフォルト値は、次のコマンドを実行して返される値とは異なる場合があります。
こういうこともあるらしい……。
あとがき
実際の設定を確認しに行くのは大事ですね。
たまごのひび割れから身が見え始めたエンジニア。