Oracle Autonomous Databaseに慣れる（６）

昨年、Oracle Autonomous Databaseに[JSON用データベース](https://www.oracle.com/jp/autonomous-database/autonomous-json-database/)が提供されました。データベースとしては基本的にOracle Databaseと同じですが、利用価格を下げ、シンプルなアクセスメソッド（SODA）を提供しています。ここではデータベースのインフラとしてAutonomous Transaction Processing (ATP) と JSON データベースがどのように違うのかを確認しました。

# JSONデータベースの作成

JSONデータベースの作成はOracle Cloud 「スタート・ガイド」画面から「ATPデータベースの作成」または「ADWデータベースの作成」をクリックし、「ワークロード・タイプの選択」で「JSON」を選択します。

![JSON Database GUI](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/96836fa4-bbf9-ae34-df8e-28f3841e8714.png)

「デプロイメント・タイプの選択」以降のCPU数やストレージ、ADMINユーザーのパスワード等はATP/ADWと同じです。JSON用の設定項目はありません。

# ATPとの比較
どちらも1 OCPUを指定して作ったATPとJSONデータベースについて比較しました。

## バージョン
バージョン情報はATP/ADW/JSONで違いはありません。Oracle Database 19c (19.5) が採用されています。

```
SQL> SELECT * FROM v$version;

BANNER                                                                  BANNER_FULL                                                             BANNER_LEGACY                                                           CON_ID
----------------------------------------------------------------------- ----------------------------------------------------------------------- ----------------------------------------------------------------------- -----                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production  Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production  Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production      0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                        Version 19.5.0.0.0                                                                                                                                                                                                                                                                                                            
```
## 初期化パラメータ
初期化パラメーターは大きく違いません。データベース名やファイル名等を除く違いとしては以下のようになります。JSONデータベースの方がやや大きいインフラになっていることがわかります。ただこれはATPがAlways Free環境であることも関係するかもしれません。OCPUとしては1を指定していますが、PDBから参照できる初期化CPU_COUNTはより大きい値を持っています。Resource Manager等の仕組みでプロセッサ使用量を制限していると思われます。

|初期化パラメータ名|ATP|JSON|
|:---|:---|:---|
|cluster_database_instances|2|8|
|cpu_count|2|6|
|cpu_min_count|2|6|
|db_recovery_file_dest_size|21167764M|123789329M|
|db_writer_processes|11|12|
|dml_locks|264332|264440|
|gcs_server_processes|4|5|
|optimizer_capture_sql_quarantine|TRUE|FALSE|
|pdb_lockdown|OLTP|JDCS|
|resource_manager_cpu_allocation|92|100|
|sessions|20|300|
|shared_pool_reserved_size|2925946470|4617089843|
|transactions|66083|66110|
|undo_tablespace|UNDOTBS1|UNDO_8|

上記以外に名前や接続情報に関する違いがみられます。

|初期化パラメータ名|異なる点|備考|
|:---|:---|:---|
|audit_file_dest|/u02/app/oracle/admin/{db_name}/adump||
|connection_brokers|((TYPE=DEDICATED)(BROKERS=1)),((TYPE=EMON)(BROKERS=1))|スペースの違い|
|control_files|+DATA/FEPP1POD/CONTROLFILE/current.{ID}.{ID},+RECO/FEPP1POD/CONTROLFILE/current.{ID}.{ID}||
|core_dump_dest|/u02/app/oracle/diag/rdbms/{db_name}/{instance_name}/cdump||
|db_name|{db_name}||
|db_unique_name|{db_unique_name}||
|dg_broker_config_file1|/u02/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr1{db_name}.dat||
|dg_broker_config_file2|/u02/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr2{db_name}.dat||
|dispatchers|(PROTOCOL=TCP) (SERVICE={db_name}XDB)||
|instance_name|{instance_name}||
|spfile|DATA/{db_name}/PARAMETERFILE/spfile.{ID}.{ID}||

## 表領域の構成
表領域はATPとJSONデータベースに違いはありません。基本的にはユーザー用表領域としてDATA、DBFS_DATAが提供されている部分も同じです。
その他の表領域についてはUNDO表領域の構成は違いますが他は同じです。

```
SQL> SELECT TABLESPACE_NAME, BLOCK_SIZE, BIGFILE, EXTENT_MANAGEMENT, ALLOCATION_TYPE, SEGMENT_SPACE_MANAGEMENT FROM DBA_TABLESPACES ORDER BY 1;

TABLESPACE_NAME                BLOCK_SIZE BIG EXTENT_MAN ALLOCATIO SEGMEN
------------------------------ ---------- --- ---------- --------- ------
DATA                                 8192 YES LOCAL      SYSTEM    AUTO
DBFS_DATA                            8192 YES LOCAL      SYSTEM    AUTO
SAMPLESCHEMA                         8192 YES LOCAL      SYSTEM    AUTO
SYSAUX                               8192 YES LOCAL      SYSTEM    AUTO
SYSTEM                               8192 YES LOCAL      SYSTEM    MANUAL
TEMP                                 8192 YES LOCAL      UNIFORM   MANUAL
UNDOTBS1                             8192 YES LOCAL      SYSTEM    MANUAL
UNDO_2                               8192 YES LOCAL      SYSTEM    MANUAL

8行が選択されました。
```

## ASM の構成
ASMディスクグループの構成もATPと同じです。DATAとRECOが用意されています。

```
NAME                           ALLOCATION_UNIT_SIZE BLOCK_SIZE TYPE     TOTAL_MB
------------------------------ -------------------- ---------- ------ ----------
DATA                                        4194304       4096 HIGH    269033472
RECO                                        4194304       4096 HIGH     67239936
```

JSON用データベースのインフラは基本的にはATP/ADWと同じOracle Databaseを使って実装されており、特殊なチューニングは行われていないように見えます。このためSODAの実装や、利用料金の違いはあってもテクノロジーとしては通常のOracle Databaseと考えてよさそうです。Oracle Database 21cではネイティブなJSON型が提供されていることから、今後JSONデータベースとしての特徴が出てくる可能性はあります。