DBCSのシェイプ変更時に注意しておくこと

# はじめに

Oracle Cloud Infrastructure データベース・サービス(DBCS)は、Oracle Cloud Infrastructure の上で稼働する Oracle Database のPaaSサービスです。
特徴としては、ユーザーはオンプレミスと全く同じOracle Databaseのソフトウェアをクラウド上で利用することができ、引き続きすべてのデータベース・サーバーの管理権限(OSのroot権限含む)およびデータベースの管理者権限を保持することができます。

DBCSについてはOracleさんのblog等（[Oracle Database Cloud Service (DBCS) を使ってみよう](https://blogs.oracle.com/otnjp/post/minamin-cloud-014)）を参照ください。

今回はDBCSのOCI Database-VMのシェイプ変更（いわゆる、コア数やメモリサイズの変更）を実施する際の注意点について記載します。

# シェイプとは

シェイプとは、インスタンスに割り当てるOCPU数メモリー・サイズおよびその他のリソースを決定するテンプレートになります。
DBCSのシェイプは現時点（2022/4/24）では以下から選択できます。

| シェイプ | OCPU数 | メモリサイズ(GB) |
| :---: | :---: | :---: |
| VM.Standard2.1 | 1 | 15 |
| VM.Standard2.2 | 2 | 30 |
| VM.Standard2.4 | 4 | 60 |
| VM.Standard2.8 | 8 | 120 |
| VM.Standard2.16 | 16 | 240 |
| VM.Standard2.24 | 24 | 320 |

#### シェイプの変更

パブリッククラウドなので、（再起動は入りますが）シェイプ自体はいつでも変更が可能です。
例えば、VM.Standard2.1からVM.Standard2.24等への拡張や、逆のVM.Standard2.24 → VM.Standard2.8 のような縮小も可能です。

#### シェイプ変更時に変更される初期化パラメータ

シェイプ変更は基本的には再起動になるので、割り当てられているOCPU数やメモリサイズ(+シェイプサイズに依存するNW帯域等)以外の設定値、例えばIPアドレス等は変更されません。

一方で、Oracle Databaseはコア数やメモリサイズに連動して利用されているパラメータがありますので、シェイプ変更に伴いコア数やメモリに応じて、初期化パラメータが幾つか変更されます。
変更される初期化パラメータは以下の通りです。（DSSかOLTPかによってもデフォルト値が違いますし、以下のパラメータに連動して変更されるパラメータもあります）

1. [cpu_count](https://docs.oracle.com/cd/F19136_01/refrn/CPU_COUNT.html)
1. [processes](https://docs.oracle.com/cd/F19136_01/refrn/PROCESSES.html#GUID-B757AF80-DA38-4167-A914-FE376A3AD4FE)
1. [sga_target](https://docs.oracle.com/cd/F19136_01/refrn/SGA_TARGET.html#GUID-4702FDB7-BADC-4997-BC49-1B91088234AE)
1. [pga_aggregate_target](https://docs.oracle.com/cd/F19136_01/refrn/PGA_AGGREGATE_TARGET.html#GUID-DEBBD3F7-9F6D-4AC8-952C-0E0B2E62312D)


特に注意が必要なパラメータがprocessesになります。
processesにもインスタンスシェイプ毎のデフォルトがあり、シェイプを変更するとそのパラメータが設定されます。
動的には変更できないため、インスタンスの再起動が必要になります。（シェイプ変更時にもインスタンス再起動が入るので、必要な場合には合計2回再起動が必要になる）

例えば、シェイプを大きくしても、processesは小さくなってしまう、といったことが起こりうるので、注意しましょう。

| シェイプ | OCPU数 | メモリサイズ(GB) | cpu_count | processes | sga_target | pga_aggregate_target | 
| :---: | :---: | :---: | :---: | :---: | :---: |  :---: |
| VM.Standard2.1(OLTP) | 1 | 15 | 2 | 200 | 6,442,450,944 | 1,610,612,736 |
| VM.Standard2.2(OLTP) | 2 | 30 | 4 | 400 | 14,495,514,624 | 3,623,878,656 |
| VM.Standard2.4(OLTP) | 4 | 60 | 8 | 800 | 30,601,641,984 | 7,650,410,496 |
| VM.Standard2.8(OLTP) | 8 | 120 | 16 | 1,600 | 62,813,896,704 | 15,703,474,176 |
| VM.Standard2.16(OLTP) | 16 | 240 | 32 | 3,200 | 127,238,406,144 | 31,809,601,536 |
| VM.Standard2.24(OLTP) | 24 | 320 | 48 | 4,800 | 170,188,079,104 | 42,547,019,776  |
| VM.Standard2.1(DSS) | 1 | 15 | 2 | 200 | 3,221,225,472  | 3,221,225,472 |
| VM.Standard2.2(DSS) | 2 | 30 | 4 | 400 | 7,247,757,312 | 7,247,757,312 |
| VM.Standard2.4(DSS) | 4 | 60 | 8 | 800 | 15,300,820,992 | 15,300,820,992 |
| VM.Standard2.8(DSS) | 8 | 120 | 16 | 1,600 | 31,406,948,352 | 31,406,948,352 |
| VM.Standard2.16(DSS) | 16 | 240 | 32 | 3,200 | 63,619,203,072 | 63,619,203,072 |
| VM.Standard2.24(DSS) | 24 | 320 | 48 | 4,800 | 85,094,039,552 | 85,094,039,552 |

#### 設定しているとシェイプ変更ができない初期化パラメータ

こちらはマニュアル等には記載がありませんが、設定しているとシェイプ変更ができないパラメータが存在します。

- [db_nk_cache_size](https://docs.oracle.com/cd/F19136_01/refrn/DB_nK_CACHE_SIZE.html#GUID-025ECEB2-E535-49D2-9721-268E3925FE09)

こちらのパラメータは、バッファキャッシュのブロックサイズをデフォルト以外に設定できるパラメータになります。
2k、4k、8k、16k、32k が設定可能で、それぞれのバッファキャッシュサイズを個別に設定可能です。

該当のパラメータを設定していると、シェイプ変更がFailしてしまいます。
また、db_nK_cache_size自体は nK のブロックサイズで作成された表領域があるとパラメータのオフができないため、一時的に該当の表領域をオフラインにしておく必要がありますので、ご注意ください。

# まとめ

DBCSのシェイプ変更はいつでも実施できますが、設定されているパラメータ等によっては、シェイプ変更の実施自体がFailしてしまう場合や、実施後に改めてパラメータ変更を実施する必要があります。
運用等でのシェイプ変更を想定している場合には事前に設定パラメータ等を含めた確認を行い、作業のウィンドウに収まるか、想定されているパラメータになっているか、等を確認しておきましょう。