Oracle AI Database 26ai では、Automatic In-Memory(AIM) がさらに強化され、どのオブジェクトを In-Memory に載せるか、どの機能を有効化するか、IM column store のサイズをどこまで使うかを、これまで以上にデータベース自身が自律的に判断できるようになりました。
今回は、26ai の新機能である Automatic In-Memory Sizing と Database-native In-Memory Advisor を使って、AIM の設定と確認手順を実際に試してみます。

Automatic In-Memory: 自動インメモリ および Automatic Data Optimization(ADO): 自動データ最適化 は、ユーザーの介入なしに、IMカラムストア内のオブジェクトを動的に管理します。
-
自動インメモリの目的
自動インメモリ機能は、手動による介入なしに、SQLワークロードの変化に応じて最適化を行います。
従来は、どのセグメントをINMEMORY対象にするか、どのオブジェクトを投入・退避するか、どの ADO IM ポリシーを作るかを、DBA がワークロードを見ながら判断する必要がありました。
Automatic In-Memory では、こうした判断を Oracle Database が内部統計にもとづいて自動化します。どのオブジェクトを載せるか、どれを外すか、いつ切り替えるかをデータベース自身が判断し、IM column store を自律的に維持します。 -
自動インメモリの仕組み
自動インメモリ機能は、セグメントレベルのアクセス追跡と内部統計情報を使用して、インメモリオブジェクトと列へのアクセス頻度を判断します。
メモリ内の自動加熱レベル統計
自動インメモリ機能**は、ヒートマップに似た列統計インフラストラクチャに加えて、セグメントレベルのアクセス追跡を使用してセグメントを監視します。
次の図に示すように、自動インメモリ機能はヒートレベルの統計情報を使用して、どのセグメントにデータを格納および削除するか、またどの列を圧縮するかを決定します。

Oracle AI Database 26ai の Automatic In-Memory(AIM)新機能 は次のものがあります。
-
Automatic Enablement of In-Memory Features
この機能は、Automatic In-Memory (AIM) の機能強化版であり、26ai では、強化されたワークロード分析アルゴリズムに基づいて、AIM が自動的に結合グループを作成し、インメモリ最適化演算、ベクトル最適化、およびブルームフィルタ最適化を有効にできます。この新しい分析では、インメモリに格納されたオブジェクトの DML オーバーヘッドを考慮することで、混合ワークロード環境における AIM のワークロード測定方法も改善されます。 -
Automatic In-Memory Sizing
これは非常に画期的な新機能です。自動インメモリサイジングにより、IMカラムストアを自動共有メモリ管理(ASMM)の一部として管理できるようになりました。つまり、ASMMはデータベース全体のワークロード要件に基づいてIMカラムストアを拡張または縮小できるということです。 -
New Database-native In-Memory Advisor
新しいインメモリ・アドバイザーが利用可能になりました。以前発表し、19c にバックポートしたインメモリ適格性テストに加え、今回インメモリ・アドバイザーもデータベースに統合しました。新しいアドバイザーの大きな利点は、インメモリ・アドバイザーを実行するためにデータベースに追加のコードをインストールする必要がないことです。新しいインメモリ・アドバイザーは、追加ライセンスが不要になったヒートマップデータを使用して、2 つのスナップショット間の分析ワークロードを分析し、その結果をレポートで確認できます。
ということで、Automatic In-Memory(AIM) の設定と確認手順をまとめてみてみます。
0. 事前確認
1. Eligibility Test を先に実行する
2. IM column store を有効化する
3. ASMM 前提をそろえる
4. Advisor 用に Heat Map を有効化する
5. Database-native In-Memory Advisor を実行する
6. Advisor 結果をもとに初期サイズを決める
7. Automatic In-Memory を MEDIUM で開始する
8. 状態確認
9. 自動サイズ調整と IM 使用状況を監視する
10. 自動化対象オブジェクトの載り方を確認する
11. 問題なければ HIGH に引き上げる
12. HIGH へ上げた後の監視
13. PDB ごとに上限を制御したい場合
14. 推奨する本番導入パターン
15. AIM 注意点
まとめ
参考
技術解説
■ 0. 事前確認
現在設定されている値を確認します。
次章の Eligibility Test を実施する場合は、INMEMORY_SIZE=0 であることを事前に確認しておきます。
show con_name
show parameter sga_target -- 0 より大きいこと
show parameter memory_target -- 0 なら未有効
show parameter memory_size
show parameter inmemory_size -- Eligibility Testする場合は 0 の状態でワークロード流れたAWRスナップショットである必要があります
show parameter inmemory_force -- BASE_LEVEL でないこと
show parameter inmemory_automatic_level
show parameter heat_map -- Advisor 実行前に ON 必須
show parameter vector_memory_size -- 0 または未設定であること
show parameter compatible
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show parameter sga_target -- 0 より大きいこと
NAME TYPE VALUE
---------- ----------- -------
sga_target big integer 32G
SQL> show parameter memory_target -- 0 なら未有効
NAME TYPE VALUE
------------- ----------- -----
memory_target big integer 0
SQL> show parameter memory_size
NAME TYPE VALUE
--------------------------- ----------- -------
inmemory_size big integer 0
memory_size big integer 0
shard_apply_max_memory_size big integer 0
vector_memory_size big integer 0
SQL> show parameter inmemory_size
NAME TYPE VALUE
------------- ----------- -------
inmemory_size big integer 0
SQL> show parameter inmemory_force -- BASE_LEVEL でないこと
NAME TYPE VALUE
-------------- ------ -------
inmemory_force string DEFAULT
SQL> show parameter inmemory_automatic_level
NAME TYPE VALUE
------------------------ ------ -----
inmemory_automatic_level string OFF
SQL> show parameter heat_map -- Advisor 実行前に ON 必須
NAME TYPE VALUE
-------- ------ -----
heat_map string OFF
SQL> show parameter vector_memory_size -- 0 または未設定であること
NAME TYPE VALUE
------------------ ----------- -----
■ 1. Eligibility Test を先に実行する
Oracle では、Advisor を実行する前に Eligibility Test を実施することが推奨されています。
・参考: インメモリ適性テスト
これは DBMS_INMEMORY_ADVISE.IS_INMEMORY_ELIGIBLE で実行し、分析ワークロード比率を見て「In-Memory を本格適用する価値があるか」を先に判定します。26ai ではこのパッケージはデータベースに含まれています。
1) AWR スナップショット確認
AWR スナップショットを確認します。
col begin_interval_time format a30
col end_interval_time format a30
select snap_id,
begin_interval_time,
end_interval_time
from dba_hist_snapshot
order by snap_id desc
fetch first 20 rows only;
SQL> select snap_id,
2 begin_interval_time,
3 end_interval_time
4 from dba_hist_snapshot
5 order by snap_id desc
6* fetch first 20 rows only;
SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME
_______ _______________________________ _______________________________
67 26-MAR-26 12.58.25.780000000 PM 26-MAR-26 01.58.27.291000000 PM
66 26-MAR-26 11.58.24.237000000 AM 26-MAR-26 12.58.25.780000000 PM
65 26-MAR-26 10.58.22.648000000 AM 26-MAR-26 11.58.24.237000000 AM
64 26-MAR-26 09.58.21.159000000 AM 26-MAR-26 10.58.22.648000000 AM
63 26-MAR-26 08.58.19.556000000 AM 26-MAR-26 09.58.21.159000000 AM
62 26-MAR-26 07.58.17.987000000 AM 26-MAR-26 08.58.19.556000000 AM
61 26-MAR-26 06.58.16.427000000 AM 26-MAR-26 07.58.17.987000000 AM
60 26-MAR-26 05.58.14.820000000 AM 26-MAR-26 06.58.16.427000000 AM
59 26-MAR-26 04.58.13.313000000 AM 26-MAR-26 05.58.14.820000000 AM
58 26-MAR-26 03.58.11.760000000 AM 26-MAR-26 04.58.13.313000000 AM
57 26-MAR-26 02.58.10.223000000 AM 26-MAR-26 03.58.11.760000000 AM
56 26-MAR-26 01.58.08.621000000 AM 26-MAR-26 02.58.10.223000000 AM
55 26-MAR-26 12.58.07.056000000 AM 26-MAR-26 01.58.08.621000000 AM
54 25-MAR-26 11.58.05.434000000 PM 26-MAR-26 12.58.07.056000000 AM
53 25-MAR-26 10.58.03.838000000 PM 25-MAR-26 11.58.05.434000000 PM
52 25-MAR-26 09.58.02.246000000 PM 25-MAR-26 10.58.03.838000000 PM
51 25-MAR-26 08.59.00.651000000 PM 25-MAR-26 09.58.02.246000000 PM
50 25-MAR-26 07.58.59.060000000 PM 25-MAR-26 08.59.00.651000000 PM
49 25-MAR-26 06.58.57.411000000 PM 25-MAR-26 07.58.59.060000000 PM
48 25-MAR-26 05.58.55.789000000 PM 25-MAR-26 06.58.57.411000000 PM
20 rows selected.
2) AWRスナップショット取得
対象スナップショットを決めて実行します。
var inmem_eligible boolean
var analysis_summary varchar2(4000)
exec dbms_inmemory_advise.is_inmemory_eligible(<begin_snap>, <end_snap>, :inmem_eligible, :analysis_summary);
print inmem_eligible
print analysis_summary
・実行結果1
SQL> var inmem_eligible boolean
SQL> var analysis_summary varchar2(4000)
SQL> exec dbms_inmemory_advise.is_inmemory_eligible(48, 67, :inmem_eligible, :analysis_summary);
PL/SQL procedure successfully completed.
SQL> print inmem_eligible
INMEM_ELIGI
-----------
TRUE
SQL> print analysis_summary
ANALYSIS_SUMMARY
--------------------------------------------------------------------------------
Observed Analytic Workload Percentage is 100% is greater than target Analytic Wo
rkload Percentage 20%
Eligibility Test の結果、観測された分析系ワークロード比率は 100% であり、判定基準の 20% を大きく上回った。そのため、今回のスナップショット範囲は In-Memory 適用候補として十分に適していると判断できました。
判定目安:
TRUE なら次へ進む
FALSE なら、対象期間が OLTP 中心か、分析系 SQL が少ない可能性があります
Oracle は、Eligibility Test で不適と出たワークロードには Advisor を回さず、候補ワークロードに集中することを推奨しています。
・実行結果2
指定された AWR スナップショット期間の分析ワークロードが 10% にすぎないため、データベースは対象外であることがわかります。IS_INMEMORY_ELIGIBLE 手順では、分析ワークロードがデータベース インメモリの対象外となる割合が 20% 未満であるとします。
SQL> print analysis_summary
ANALYSIS_SUMMARY
-------------------------------------------------------------------------------------------------
Observed Analytic Workload Percentage is 10% is less than target Analytic Workload Percentage 20%
・実行結果 3
この場合、活動不足に関するメッセージが表示される。つまり、データベースがアイドル状態だったか、ほとんど活動がなかったということです。
Snapshot range cannot be analyzed as it has insufficient activity.
Eligibility Test と In-Memory Advisor は似ていますが、前提条件が異なります。
- Eligibility Test は、Database In-Memory 導入前の AWR スナップショット範囲で実行します
- In-Memory Advisor も、In-Memory が有効な期間は分析対象にできません
- そのため、Advisor を実行する場合は、
INMEMORY_SIZE=0の期間で取得したワークロードを使うか、テスト用にいったん In-Memory を無効化してから実施します
■ 2. IM column store を有効化する
初回有効化は SCOPE=SPFILE で設定して再起動です。INMEMORY_SIZE > 0 にすると IM column store が有効になります。
1) inmemory_size 設定
まずは控えめに開始し、Advisor の結果で後から増やす方が安全です。例えば 16G から始めます。
-- CDB$ROOT
alter system set inmemory_size = 16G scope=spfile;
-- Base Level は使わない
-- もし BASE_LEVEL が入っていたら解除
alter system reset inmemory_force scope=spfile sid='*';
2) 初回設定反映
再起動して設定を反映します。
shutdown immediate
startup
3) 設定確認
設定を確認します。
show parameter inmemory_size
SQL> show parameter inmemory_size
NAME TYPE VALUE
------------- ----------- -------
inmemory_size big integer 16G
INMEMORY_SIZE を 0 から非0にすると IM column store が有効になり、再起動後に初期化されます。また INMEMORY_SIZE は SGA_TARGET の一部として扱われます。
■ 3. ASMM 前提をそろえる
Automatic In-Memory Sizing は、SGA_TARGET > 0 かつ INMEMORY_AUTOMATIC_LEVEL = MEDIUM または HIGH のときに有効です。
そのため、SGA_TARGET が未設定なら先に設定します。
alter system set sga_target = 80G scope=both;
補足として、26ai では INMEMORY_SIZE の物理サイズ最適化に V$INMEMORY_SIZE_ADVICE が使われます。
■ 4. Advisor 用に Heat Map を有効化する
DBMS_INMEMORY_ADVISE を使うには HEAT_MAP=ON が必須です。これは公式に明記されています。
alter system set heat_map = on scope=both;
show parameter heat_map
SQL> alter system set heat_map = on scope=both;
System altered.
SQL> show parameter heat_map
NAME TYPE VALUE
-------- ------ -----
heat_map string ON
■ 5. Database-native In-Memory Advisor を実行する
26ai では新しい database-native In-Memory Advisor が使えます。追加インストール不要です。手順は以下です。
ここで紹介する Advisor 実行例は、INMEMORY_SIZE=0 の期間に取得したワークロード、またはテスト用にいったん In-Memory を無効化した環境で実施する前提です。
● 5-1. 追跡開始
var taskid number
exec dbms_inmemory_advise.start_tracking(:taskid);
print taskid
SQL> var taskid number
SQL> exec dbms_inmemory_advise.start_tracking(:taskid);
PL/SQL procedure successfully completed.
SQL> print taskid
TASKID
----------
1
● 5-2. 代表ワークロードを流す
ここが重要です。
この間に、実際のレポート SQL、分析 SQL、月次集計、BI 画面、バッチなど、本番で速くしたい SQL を流します。
おすすめは:
通常日ピーク 1〜3時間
可能なら月次集計や重い分析クエリも含める
● 5-3. 追跡終了
exec dbms_inmemory_advise.stop_tracking;
● 5-4. 推奨生成
exec dbms_inmemory_advise.generate_advise;
● 5-5. 結果確認
col recommended_obj_list format a120
select task_id,
round(inmemory_size/1024/1024) as inmemory_size_mb,
estimated_db_time_low,
estimated_db_time_high,
estimated_db_time_analytics_low,
estimated_db_time_analytics_high,
recommended_obj_list
from dba_inmemory_advisor_recommendation
order by task_id, inmemory_size;
このビューは、サイズごとの推定 DB time と推奨オブジェクト一覧を返します。
Advisor は複数の IM サイズをシミュレートし、各サイズでの参照ワークロードの DB time を見積もります。
・ 読み方のコツ
例えば結果が次の傾向なら:
16G → 効果小
32G → 大きく改善
64G → 改善が頭打ち
この場合、初期最小値は 32G が良いです。
26ai ではその後、Automatic In-Memory Sizing が需要に応じて伸縮するため、最初から最大想定でベタ固定しなくても運用できます。
・ 実行結果例
このビューは、サイズごとの推定 DB time と推奨オブジェクト一覧を返します。
つまり、「どのくらいの In-Memory サイズを与えると、どの表・パーティションを優先的に載せるべきか」を段階的に確認できます。
次の結果では、72.24MB 時点で FACT_SALES の 1 パーティションが推奨され、サイズ増加に応じて推奨対象の FACT_SALES パーティションが段階的に増加しました。
最終的に 722.37MB では FACT_SALES の対象パーティション群に加え、DIM_PRODUCT、DIM_REGION、DIM_CUSTOMER も推奨に含まれています。
SQL> select task_id,
round(inmemory_size/1024/1024,2) as inmemory_size_mb,
estimated_db_time_low,
estimated_db_time_high,
estimated_db_time_analytics_low,
estimated_db_time_analytics_high,
recommended_obj_list
from dba_inmemory_advisor_recommendation
where task_id = (select max(task_id) from dba_inmemory_advisor_recommendation)
order by inmemory_size;
TASK_ID INMEMORY_SIZE_MB ESTIMATED_DB_TIME_LOW ESTIMATED_DB_TIME_HIGH ESTIMATED_DB_TIME_ANALYTICS_LOW ESTIMATED_DB_TIME_ANALYTICS_HIGH RECOMMENDED_OBJ_LIST
_______ ________________ _____________________ ______________________ _______________________________ ________________________________ _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
1 0 127 127 122 122
1 72.24 118 126 113 121 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ;
1 144.47 110 125 105 120 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ;
1 216.71 101 124 96 119 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ;
1 288.95 93 124 88 118 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P612 ;
1 361.18 76 122 71 117 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P612 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P611 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P610 ;
1 433.42 68 121 62 116 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P612 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P611 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P610 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P609 ;
1 505.66 59 121 54 115 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P612 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P611 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P610 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P609 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P608 ;
1 577.89 51 120 46 115 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P612 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P611 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P610 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P609 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P608 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P607 ;
1 650.13 42 119 37 114 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P612 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P611 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P610 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P609 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P608 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P607 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P606 ;
1 722.37 25 117 20 112 Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P615 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P614 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P613 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P612 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P611 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P610 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P609 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P608 ; Owner: IMDEMO2 Table: FACT_SALES Partition: SYS_P607 ; Owner:
■ 6. Advisor 結果をもとに初期サイズを決める
例えば 32G を採用する場合:
alter system set inmemory_size = 32G scope=both;
注意点として、26ai でも ALTER SYSTEM での動的変更は 増加方向が基本で、小さくする場合は SPFILE 変更+再起動が必要です。公式手順でも縮小時は再起動前提です。
■ 7. Automatic In-Memory を MEDIUM で開始する
自動化を開始します。
26ai の Automatic In-Memory Sizing は MEDIUM または HIGH で有効です。
特に HIGH だと DB が内部統計をもとに自律的にホットセグメントを選び、コールドなものを追い出します。
まずは MEDIUM から始めると、いきなり全面自動にせず、安全に挙動を見られます。
alter system set inmemory_automatic_level = medium scope=both;
show parameter inmemory_automatic_level
SQL> alter system set inmemory_automatic_level = medium scope=both;
System altered.
SQL> show parameter inmemory_automatic_level
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
inmemory_automatic_level string MEDIUM
■ 8. 状態確認
show parameter sga_target
show parameter inmemory_size
show parameter inmemory_automatic_level
show parameter inmemory_force
show parameter vector_memory_size
SGA_TARGET > 0
INMEMORY_SIZE > 0
INMEMORY_AUTOMATIC_LEVEL = MEDIUM
INMEMORY_FORCE = DEFAULT
VECTOR_MEMORY_SIZE = 0 または未設定
この条件で 26ai の Automatic In-Memory Sizing が成立します。
■ 9. 自動サイズ調整と IM 使用状況を監視する
1) v$inmemory_area 確認
まずは IM area の状況を確認します。
col pool format a20
select pool, alloc_bytes, used_bytes, populate_status
from v$inmemory_area;
SQL> select pool, alloc_bytes, used_bytes, populate_status
2* from v$inmemory_area;
POOL ALLOC_BYTES USED_BYTES POPULATE_STATUS
________________ ____________ __________ _______________
1MB POOL 113760010240 795869184 DONE
64KB POOL 48766451712 149422080 DONE
IM POOL METADATA 16777216 16777216 DONE
1MB POOL 117440512000 0 DONE
64KB POOL 50314870784 0 DONE
IM POOL METADATA 16777216 16777216 DONE
1MB POOL 117440512000 795869184 DONE
64KB POOL 50314870784 149422080 DONE
IM POOL METADATA 16777216 16777216 DONE
9 rows selected.
2) v$inmemory_size_advice 確認
サイズ助言も確認します。
select *
from v$inmemory_size_advice;
Oracle は V$INMEMORY_SIZE_ADVICE を、異なる IM サイズでの使用量と性能統計の見積りビューとして説明しています。ASMM による自動サイズ調整の判断にもこの統計が使われます。
■ 10. 自動化対象オブジェクトの載り方を確認する
1) v$im_segments確認
col owner format a20
col segment_name format a40
col partition_name format a30
col bytes_not_populated format 999,999,999,999
select owner,
segment_name,
partition_name,
populate_status,
inmemory_size,
bytes,
bytes_not_populated
from v$im_segments
order by owner, segment_name;
OWNER SEGMENT_NAME PARTITION_NAME POPULATE_STATUS INMEMORY_SIZE BYTES BYTES_NOT_POPULATED
______ ____________ ______________ _______________ _____________ ___________ ___________________
IMDEMO DIM_CUSTOMER COMPLETED 3407872 2957312 0
IMDEMO DIM_PRODUCT COMPLETED 1310720 188416 0
IMDEMO DIM_REGION COMPLETED 1310720 49152 0
IMDEMO FACT_SALES P05 COMPLETED 469630976 40968241152 0
IMDEMO FACT_SALES P06 COMPLETED 469630976 40968241152 0
2) dba_tables
現在 INMEMORY 扱いになっている表を確認します。
HIGH でない場合は、原則としてオブジェクトを INMEMORY 指定しない限り載りません。HIGH にすると DB が自律的に候補を判断します。
col owner format a20
col table_name format a40
col inmemory format a12
col inmemory_priority format a15
col inmemory_compression format a25
select owner,
table_name,
inmemory,
inmemory_priority,
inmemory_compression
from dba_tables
where owner not in ('SYS','SYSTEM')
order by owner, table_name;
OWNER TABLE_NAME INMEMORY INMEMORY_PRIORITY INMEMORY_COMPRESSION
______ ____________ ________ _________________ ____________________
IMDEMO DIM_CUSTOMER ENABLED HIGH FOR QUERY LOW
IMDEMO DIM_PRODUCT ENABLED HIGH FOR QUERY LOW
IMDEMO DIM_REGION ENABLED HIGH FOR QUERY LOW
IMDEMO FACT_SALES
■ 11. 問題なければ HIGH に引き上げる
数日〜1週間見て、不要なメモリ圧迫や DML 影響が目立たなければ、より自律的な運用へ進めます。
alter system set inmemory_automatic_level = high scope=both;
HIGH では、データベースが使用状況を見て最適なセグメント・列を保持し、コールドセグメントを退避します。Oracle はこれを “No user decision-making is required” と説明しています。
■ 12. HIGH へ上げた後の監視
Automatic In-Memory 関連の確認に使えるビューがあります。
・ v$auto_im_features
V$AUTO_IM_FEATURES は、AIM が最適化している In-Memory performance features を示します。例えば Bloom Filter 最適化や Optimized Arithmetic などです。
select * from v$auto_im_features;
FEATURE_ID DESCRIPTION CON_ID
__________ ____________________________________ ______
1 Autonomous Join Groups 0
2 Autonomous DML tracking 0
3 Autonomous Optimized Arithmetic 0
4 Autonomous Bloom Filter Optimization 0
5 Autonomous Vector Optimization 0
6 Autonomous Cold Column Eviction 0
・ dba_aim_perf_features
DBA_AIM_PERF_FEATURES は、Automatic In-Memory performance features が有効になっている表列を示します。
DBMS_AUTOIM パッケージも 26ai の PL/SQL Packages and Types Reference にあり、ACTIVITY_REPORT などで Automatic In-Memory の活動確認に使えます。
select *
from dba_aim_perf_features
order by owner_name, table_name, column_name;
■ 13. PDB ごとに上限を制御したい場合
CDB 全体で IM column store を共有すると、特定 PDB が多く使いすぎる可能性があります。Oracle は PDB ごとの INMEMORY_SIZE 制限をサポートしています。しかも PDB 合計が CDB 値を超える オーバーサブスクライブも可能です。
alter session set container = SALESPDB;
alter system set inmemory_size = 20G;
alter session set container = HRPDB;
alter system set inmemory_size = 0;
ASMM 配下では、CDB/PDB 間で INMEMORY_AUTOMATIC_LEVEL の整合性に注意が必要です。
CDB で HIGH の場合、PDB は LOW や MEDIUM に変更可能ですが、OFF は不可です。
■ 14. 推奨する本番導入パターン
・ パターンA: まず安全運用
これは一番無難です。効果を数字で確認しながら、自動化の暴れ方を抑えられます。
INMEMORY_SIZE=16G or 32G
SGA_TARGET 有効
HEAT_MAP=ON
Eligibility Test
Advisor 実施
INMEMORY_AUTOMATIC_LEVEL=MEDIUM
・ パターンB: 分析DB寄り
分析中心ならこちらが強いです。ホットデータ中心に自律的に回りやすいです。
Advisor 実施後
INMEMORY_AUTOMATIC_LEVEL=HIGH
PDBごと上限調整
V$INMEMORY_SIZE_ADVICE と V$IM_SEGMENTS 監視
■ 15. AIM 注意点
一番大事なのはこの3つです。
1. BASE_LEVEL を使わないこと
INMEMORY_FORCE=BASE_LEVEL だと Automatic In-Memory は無効です。今回は EE Extreme Performance 前提なので、通常は DEFAULT 相当で進めるべきです。
2. 初期サイズは“最小値”として考えること
26ai + ASMM では INMEMORY_SIZE は固定サイズというより、自動伸縮の下限として扱われます。
3. Advisor は必ず代表ワークロードで取ること
Advisor は AWR / ASH / Heat Map から見積るので、テスト時間帯が軽すぎると、本番向けの良い推奨になりません。
・ Oracle Database 21c Enhanced In-Memory External Table Support
・ Oracle Database 21c In-Memory Full Text Columns
・ Oracle Analytics Cloud Uses Database In-Memory
■ まとめ
今回は、Oracle AI Database 26ai の新機能である Automatic In-Memory Sizing と Database-native In-Memory Advisor を中心に、Automatic In-Memory(AIM) の設定と確認手順を整理してみました。
事前評価、初期サイズ決定、自動化開始、監視という流れを押さえておくことで、AIM を“なんとなく有効化する”のではなく、根拠を持って導入しやすくなると感じました。
今後はさらに、INMEMORY_AUTOMATIC_LEVEL=HIGH にしたときの実際の変化や、Automatic Join Groups / Bloom Filter Optimization / Vector Optimization など、26ai で強化された AIM の自動最適化も試してみたいところです。
今回あらためて感じたのは、In-Memory は「大量メモリーがないと使えない機能」ではなく、圧縮効果によって、少ないメモリーでも十分に導入価値がある機能だということです。
前回の In-Memory(IM) の検証では、約 38.15GB のデータが、In-Memory Column Store 上では約 0.44GB にまで圧縮されました。
この結果を見ると、まずは小さく始めて効果を確認する、というアプローチでも十分に現実的だと感じます。
その一方で、Exadata Database Service on Dedicated Infrastructure のデータシートを見ると、最小構成の Database Server 2台構成でも 2780 GB のメモリーを搭載しています。 このような大容量メモリーを持つ環境では、システムによってはまだ活用しきれていないメモリーが残っているケースもあるのではと思いました。そうした環境で Automatic In-Memory Sizing や AIM を組み合わせれば、
余っているメモリーをそのまま眠らせるのではなく、性能向上という形で活かせる可能性があります。
少ないメモリーでも試す価値があり、大きなメモリーを持つ Exadata ではさらに真価を引き出せる。
In-Memory は、思っていた以上に“ためしてみてみる価値のある機能”だと感じました。
■ 参考
-
概要
・ Database In-Memory -
26ai 新機能ブログ、Automatic In-Memory ドキュメント
・ New Database In-Memory Features in Oracle AI Database 26ai
・ New In-Memory Eligibility Test
・ DBIM Resources
・ Oracle AI Database In-Memoryの概要
・ Oracle Exadata インメモリー列形式のサポート
・ Database In-Memory Guide -
Whitepaper、LiveLabs
・ Oracle Database In-Memory with Oracle Database 19c Technical Overview
・ LiveLabsワークショップ-- Oracle Database In-Memoryによる分析パフォーマンスの向上 -
YouTube
・ Database In-Memory YouTubeチャンネル
・ Database In-Memory Office Hours -
Data Sheet
・ Oracle Database In-Memory
・ Exadata Database Service on Dedicated Infrastructure X11M