【AWS備忘録】「DBInstanceClassMemory」とは?
こんにちはこぐまです。
AWS備忘録の記事です。
本日は、
「DBInstanceClassMemory」
の備忘録です。
結論
DBInstanceClassMemory ・・・単位はバイト。
インスタンスクラスごとに変動するパラメータ値の算出の為に用いる。
【参考】db.r5.2xlarge の場合、約61.9GB
メモ解説
RDSには、DBを特定の設定値で起動させるためのパラメータ群を保存しておくことができます。これをパラメータグループといいます。
DBインスタンス(Auroraの場合はクラスターにも)に、任意のパラメータグループをアタッチすることで、その設定値で動きます。
再起動を伴う必要があるパラメータもありますが、洋服を変えるように簡単に変えられるので設定値の異なる複数のパラメータグループを作っておくと、検証等で役に立ちます。
このパラメータグループの各項目には、直接の数値やBoolean値(enable or disable)を入れることができます。加えて、例えば、Postgresの利用できる共用バッファ値(Shared_Buffers)などには、「DBInstanceClassMemory」といった変数が定義されていて、その値をもとに、項目値が算出されるようになっています。
つまり、パラメータグループの各項目への設定方法は以下の3通りがあります。
・直接数値を入れる。
・enable or disable を入れる。
・変数値から自動算出される。
「DBInstanceClassMemory」とは、その名の通りそのDBインスタンスのメモリサイズということになります。
これが変数定義されていることがなぜ便利かというと、DBインスタンスのクラスを変えた時に、わざわざパラメータグループを付け替える必要がなくなるからです。以下に例を示します。
例えば、DBインスタンスを「db.r5.xlarge」→「db.r5.2xlarge」に変更したい時があったとします。
参考までに、「db.r5.xlarge」の搭載メモリは約32GiB、「db.r5.2xlarge」の搭載メモリは約64GiBです。約2倍の違いがあり、その差も32GiBと大きいです。
この時、パラメータグループの「shared_buffers」の設定値を決定するの方法として固定値だった場合(例えば24GiBと固定値で設定されていた場合)、
せっかくインスタンスクラスを2倍にしたのに、「shared_buffers」の値は24GiBのまま変わらない=AuroraPostgresの利用できる共用メモリが増えていない ということになってしまいます。そのため、例えば「shared_buffers」が48GB相当となるような値を設定した別のパラメータグループをアタッチする必要が出てきてしまいます。
DBInstanceClassMemoryという変数があるおかげで、アタッチするインスタンスクラスの大きさのメモリが自動的に値として利用されるので、インスタンスクラスの変動に柔軟に対応できます。
ちなみに、Auroraはマネージドサービスであるので、選択されたインスタンスタイプのOS部分はAWSが管理してくれます。つまり、OSが利用するメモリというものも少しはあるので、DBInstanceClassMemoryの値は、実際のDBインスタンスクラスのメモリよりもわずかに低くなります。
XXXXXDB=> show shared_buffers ;
shared_buffers
----------------
43797984kB
(1 row)
実際の「db.r5.2xlarge」のAuroraに入り、「shared_buffers」の値を調べてみると上記となっています。
「shared_buffers」 は「8kb」の「枚数」で表すようですので、上記から、
枚数としては、「43797984kB」÷ 8kb =「5474748」枚となります。
上記の通り、パラメータグループの「shared_buffers」の枚数を求める計算式は、SUM({DBInstanceClassMemory/12038},-50003) となっていますので、これを逆算することで、インスタンスクラス「db.r5.2xlarge」の「DBInstanceClassMemory」のおおよその値がわかります。
計算してみましょう。
SUM({DBInstanceClassMemory/12038},-50003) = 「5474748」枚
なので、
DBInstanceClassMemory = (5474748+50003)*12038
= 66,506,952,538
あ、ちなみに、「DBInstanceClassMemory」の単位は「バイト」です。
なので、1024で割り続けると、大体「61.93GB」くらいになります。
「db.r5.2xlarge」の搭載メモリは、64GBなので、約2GB程度は、
DB以外の用途に利用されていることがわかります。
【背景】
Auroraは「shared_buffers」に全メモリの75%程度を割り当てるということを知り、実際どれくらいの値になっているのかを確認しようとして、「DBInstanceClassMemory」の存在が出てきて、実際計算してみようと思ったのがきっかけです。
また、「shared_buffers」 の単位が 8kごとの枚数であること、
「DBInstanceClassMemory」の単位はバイトであることも新しく知ることができました。
インスタンスクラスを変えても、意識せずに割合で設定される部分に少し安心しました。
ちなみに、ちょっと追加で疑問になる部分も出てきたので、改めて確認できたらまた更新しようと思います!