17
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle AI Database 26ai: Automatic In-Memory (AIM) をためしてみてみた

17
Last updated at Posted at 2026-03-31

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

in_memoryイメージ.png
Automatic In-Memory: 自動インメモリ および Automatic Data Optimization(ADO): 自動データ最適化 は、ユーザーの介入なしに、IMカラムストア内のオブジェクトを動的に管理します。

  • 自動インメモリの目的
    自動インメモリ機能は、手動による介入なしに、SQLワークロードの変化に応じて最適化を行います。
    従来は、どのセグメントを INMEMORY 対象にするか、どのオブジェクトを投入・退避するか、どの ADO IM ポリシーを作るかを、DBA がワークロードを見ながら判断する必要がありました。
    Automatic In-Memory では、こうした判断を Oracle Database が内部統計にもとづいて自動化します。どのオブジェクトを載せるか、どれを外すか、いつ切り替えるかをデータベース自身が判断し、IM column store を自律的に維持します。

  • 自動インメモリの仕組み
    自動インメモリ機能は、セグメントレベルのアクセス追跡と内部統計情報を使用して、インメモリオブジェクトと列へのアクセス頻度を判断します。
    メモリ内の自動加熱レベル統計
    自動インメモリ機能**は、ヒートマップに似た列統計インフラストラクチャに加えて、セグメントレベルのアクセス追跡を使用してセグメントを監視します。
    次の図に示すように、自動インメモリ機能はヒートレベルの統計情報を使用して、どのセグメントにデータを格納および削除するか、またどの列を圧縮するかを決定します。
    image.png

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) の設定と確認手順をまとめてみてみます。

 :white_check_mark: 0. 事前確認
 :white_check_mark: 1. Eligibility Test を先に実行する
 :white_check_mark: 2. IM column store を有効化する
 :white_check_mark: 3. ASMM 前提をそろえる
 :white_check_mark: 4. Advisor 用に Heat Map を有効化する
 :white_check_mark: 5. Database-native In-Memory Advisor を実行する
 :white_check_mark: 6. Advisor 結果をもとに初期サイズを決める
 :white_check_mark: 7. Automatic In-Memory を MEDIUM で開始する
 :white_check_mark: 8. 状態確認
 :white_check_mark: 9. 自動サイズ調整と IM 使用状況を監視する
 :white_check_mark: 10. 自動化対象オブジェクトの載り方を確認する
 :white_check_mark: 11. 問題なければ HIGH に引き上げる
 :white_check_mark: 12. HIGH へ上げた後の監視
 :white_check_mark: 13. PDB ごとに上限を制御したい場合
 :white_check_mark: 14. 推奨する本番導入パターン
 :white_check_mark: 15. AIM 注意点
 :white_check_mark: まとめ
 :white_check_mark: 参考
 :white_check_mark: 技術解説

■ 0. 事前確認

現在設定されている値を確認します。
次章の Eligibility Test を実施する場合は、INMEMORY_SIZE=0 であることを事前に確認しておきます。

SQL
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 スナップショットを確認します。

SQL
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スナップショット取得
対象スナップショットを決めて実行します。

SQL
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

実行結果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% 未満であるとします。

実行結果 2
SQL> print analysis_summary

ANALYSIS_SUMMARY
-------------------------------------------------------------------------------------------------
Observed Analytic Workload Percentage is 10% is less than target Analytic Workload Percentage 20%

・実行結果 3
この場合、活動不足に関するメッセージが表示される。つまり、データベースがアイドル状態だったか、ほとんど活動がなかったということです。

実行結果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 から始めます。

SQL
-- CDB$ROOT
alter system set inmemory_size = 16G scope=spfile;

-- Base Level は使わない
-- もし BASE_LEVEL が入っていたら解除
alter system reset inmemory_force scope=spfile sid='*';

2) 初回設定反映
再起動して設定を反映します。

SQL
shutdown immediate
startup

3) 設定確認
設定を確認します。

SQL
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 が未設定なら先に設定します。

SQL
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 が必須です。これは公式に明記されています。

SQL
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. 追跡開始

SQL
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. 追跡終了

SQL
exec dbms_inmemory_advise.stop_tracking;

● 5-4. 推奨生成

SQL
exec dbms_inmemory_advise.generate_advise;

● 5-5. 結果確認

SQL
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 を見積もります。

・ 読み方のコツ
例えば結果が次の傾向なら:

SQL
	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 を採用する場合:

SQL
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 から始めると、いきなり全面自動にせず、安全に挙動を見られます。

SQL
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. 状態確認

SQL
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 の状況を確認します。

SQL
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 確認
サイズ助言も確認します。

SQL
select *
from   v$inmemory_size_advice;

Oracle は V$INMEMORY_SIZE_ADVICE を、異なる IM サイズでの使用量と性能統計の見積りビューとして説明しています。ASMM による自動サイズ調整の判断にもこの統計が使われます。

■ 10. 自動化対象オブジェクトの載り方を確認する

1) v$im_segments確認

SQL
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 が自律的に候補を判断します。

SQL
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 影響が目立たなければ、より自律的な運用へ進めます。

SQL
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 などです。

SQL
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 の活動確認に使えます。

SQL
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 SizingDatabase-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 は、思っていた以上に“ためしてみてみる価値のある機能”だと感じました。

■ 参考

■ 技術解説

17
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?