Autonomous Databaseでのデータベース・インメモリーの使用
Autonomous Databaseで使用可能なデータベース・インメモリー機能によって、リアルタイム・アナリティクスおよび混合ワークロードのパフォーマンスが大幅に向上します。
- Database In-Memoryについて
Oracle Database In-Memory (Database In-Memory)は、リアルタイム・アナリティクスおよび混合ワークロードのパフォーマンスを大幅に向上させる一連の機能です。 - インメモリー移入のオブジェクトの有効化
インメモリー列ストアへの移入のオブジェクトを有効または無効にできます。 - インメモリー列ストアのサイズ設定
Autonomous Databaseインスタンスに16以上のECPUがある場合、データベース・インメモリー機能がデフォルトで有効になり、インメモリーで最大50%のSGAを使用できます。 - インメモリー列ストアの無効化
Autonomous Databaseのインメモリー列ストアを無効にするには、最大インメモリー・サイズを0に変更します。
親トピック: 機能
Database In-Memoryについて
Oracle Database In-Memory (Database In-Memory)は、リアルタイム分析と混合ワークロードのパフォーマンスを大幅に改善する一連の機能です。
-
オンプレミス・データベースに対してインメモリー機能を有効にし、オンプレミス・データベースからAutonomous Databaseに移行しています。
-
データベース内の問合せでは、ほとんどの実行時間がデータのスキャンとフィルタリング、および結合とグループ化集計の実行に費やされます。
-
アナリティクの性質上、問合せのレスポンス時間を改善する必要があります。
インメモリー列ストアは、Database In-Memoryの主な機能です。 インメモリー列ストアは、システム・グローバル領域(SGA)のオプション部分であるインメモリー領域にあります。 インメモリーに対して有効にすると、表、パーティション、サブパーティションおよびマテリアライズド・ビューは、インメモリー列ストア内の列形式で移入されます。 この列形式は、非常に高速なスキャン用に最適化されているため、アナリティク問合せで行形式ベースの問合せよりも桁違いに高速に実行できます。 詳細については、Oracle Database In-Memoryを参照してください。
インメモリー列ストアは、最もホットなINMEMORY
オブジェクトに対応するために、時間の経過とともに動的に増加します。 PRIORITY
表句を使用するか、連続した表スキャンを使用して、インメモリー列ストアがワークロードに十分な大きさになるようにすることができます。 詳細については、「インメモリー列ストアのサイズ設定」を参照してください。
INMEMORY
句を使用すると、次のオブジェクトに対してインメモリーを有効にできます:
-
表(外部表を含む)
-
パーティションまたはサブパーティション
-
マテリアライズド・ビュー
詳細については、「インメモリー移入のオブジェクトの有効化」を参照してください。
Database In-Memoryを有効にするには、次の点に注意してください:
-
データベース・インメモリーは、次のAutonomous Databaseインスタンスでのみ使用できます:
-
ECPUコンピュート・モデル
-
最小16 ECPU
-
-
データベースを再起動する場合、
INMEMORY
に対して有効になっているオブジェクトには、インメモリー列ストアへの再移入が必要です。 優先度の設定によっては、自動または初回アクセス時に再移入が行われる場合があります。 パフォーマンスをモニタリングしている場合、オブジェクトが再移入されるまでパフォーマンスが低下します。
インメモリー移入に対するオブジェクトの有効化
インメモリー列ストアへの移入のオブジェクトを有効または無効にできます。
INMEMORY
句を持つオブジェクトのみがインメモリー列ストアへの移入の対象となります。 DDL文CREATE TABLE
またはALTER TABLE
を使用して、INMEMORY
句を適用します。
デフォルトでは、オブジェクトはNO INMEMORY
属性を使用して作成されます。つまり、インメモリー列ストアへの移入に適格ではありません。
INMEMORY
としてオブジェクトを有効にすると、オブジェクトがインメモリー列ストアに存在する可能性があることが指定されます。 インメモリー移入は、データベースが既存の行形式データを読み取って列形式に変換し、インメモリー列ストアに格納する場合に発生する個別のステップです。 デフォルトでは、INMEMORY
属性を持つオブジェクト内のすべての列がインメモリー列ストアに移入されます。
オブジェクトにINMEMORY
属性を設定することは、オブジェクトがインメモリー列ストアへの移入の候補であることを示します。 オブジェクトは、すぐにインメモリー列ストアに移入されません。 ただし、PRIORITY
句をINMEMORY
属性とともに使用して、インメモリー列ストアへの移入の優先度を制御できます。 PRIORITY
句は、次の値で指定できます:
-
CRITICAL
: オブジェクトは、データベースがオープンされた直後に移入されます。 -
HIGH
: インメモリー列ストアで領域が使用可能な場合は、すべてのCRITICAL
オブジェクトが移入された後にオブジェクトが移入されます。 -
MEDIUM
: オブジェクトは、すべてのCRITICAL
およびHIGH
オブジェクトが移入された後、移入され、インメモリー列ストアで使用可能な領域が残ります。 -
LOW
: オブジェクトは、インメモリー列ストアで使用可能な領域が残っている場合、すべてのCRITICAL
、HIGH
およびMEDIUM
オブジェクトが移入された後に移入されます。 -
NONE
: オブジェクトは、インメモリー列ストアで領域が使用可能な場合、初めてスキャンされた後にのみ移入されます。 優先度NONE
がデフォルトの優先度です。
INMEMORY
属性を持つ表を作成する例:
CREATE TABLE im_emp (
id NUMBER, name VARCHAR2(20),
depno NUMBER, sal NUMBER,
mgr NUMBER,
loc VARCHAR2(20))
INMEMORY;
この例では、INMEMORY
属性を使用してim_emp
表を作成します。 この例では、INMEMORY
句にデフォルトの優先度NONE
が使用されています。これは、表が初めてスキャンされた後にのみ移入されることを意味します。
INMEMORY
属性でPRIORITY
句を使用する例:
CREATE TABLE im_emp_1 (
id NUMBER, name VARCHAR2(20),
depno NUMBER, sal NUMBER,
mgr NUMBER,
loc VARCHAR2(20))
INMEMORY PRIORITY CRITICAL;
既存の表に対してINMEMORY
属性を設定する例:
ALTER TABLE employees INMEMORY;
この例では、employees
表のINMEMORY
属性を設定します。
表を変更して、表の列のサブセットに対してのみINMEMORY
属性を設定することもできます。 たとえば:
ALTER TABLE im_emp_tb INMEMORY NO INMEMORY(depno);
この例では、im_emp_tb
のINMEMORY
属性を設定しますが、depno
列は除外されます。
詳細については、INMEMORY_TABLE_CLAUSEを参照してください。
INMEMORY
を有効にした後、V$IM_SEGMENTS
ビューを問い合せて、表のデータがインメモリー列ストアに移入されているかどうかを判断できます。 たとえば: SELECT SEGMENT_NAME, POPULATE_STATUS
FROM V$IM_SEGMENTS
WHERE SEGMENT_NAME = 'IM_EMP';
詳細については、V$IM_SEGMENTSを参照してください。
NO INMEMORY
属性で更新された場合のみ、オブジェクトが削除されます。 たとえば: ALTER TABLE im_emp NO INMEMORY;
詳細については、「インメモリー移入の仕組み」を参照してください。
インメモリー移入のオブジェクトを有効にするためのノート:
-
データベースでは、
PRIORITY
設定がNONE
のインメモリー・オブジェクトは自動的に移入されません。 ただし、これらのオブジェクトをインメモリー列ストアに手動で移入できます。 詳細については、「IM列ストアの手動移入」と「DBMS_INMEMORY.POPULATEプロシージャ」を参照してください。 -
インメモリー列ストアが自動的にワークロードに十分な大きさになるように、連続した表スキャンが必要です。 オブジェクトが部分的に移入されている場合、表スキャンではインメモリーとExadataスマート・スキャンの両方を使用できます。
インメモリー列ストアのサイズ設定
Autonomous Databaseインスタンスに16以上のECPUがある場合、データベース・インメモリー機能がデフォルトで有効になり、インメモリーで最大50%のSGAを使用できます。
インメモリー領域のメモリーは事前に予約されておらず、インメモリー領域の初期サイズは0です。 インメモリー領域は、インメモリー移入に必要な領域が不足するたびに徐々に増加します。
インメモリー列ストア内のオブジェクトは、自動インメモリー(AIM)によって動的に管理されます。 自動インメモリーは、Autonomous Databaseに対してデフォルトで有効になっています。
AIMは内部統計を使用して、インメモリー・オブジェクトおよび列にアクセスする頻度を決定します。 インメモリー列ストアが一杯で、より頻繁にアクセスされる他のセグメントがインメモリー列ストアへの移入の恩恵を受ける場合、インメモリー列ストアは非アクティブなセグメントを削除します。
作業データ・セットが常に移入されるように、AIMはコールド(頻繁にアクセスされない)セグメントを自動的に除去します。 詳細については、「インメモリー・オブジェクトの管理の自動化」を参照してください。
-
Autonomous DatabaseのECPU数を変更します。
-
DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE
プロシージャを使用して、最大インメモリー・サイズを変更します。 0から70の範囲の値を指定できます。 0 (ゼロ)の値を指定すると、データベース・インメモリーが無効になります。 たとえば:
この例では、SGAサイズの最大インメモリー・サイズを60%に変更します。BEGIN DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60); END; /
詳細については、「SET_SGA_PERCENTAGEプロシージャ」を参照してください。
V$INMEMORY_AREA
ビューを問い合せて、インメモリー領域内の領域割当てに関する情報を取得します。 たとえば:
SELECT * FROM V$INMEMORY_AREA;
詳細については、V$INMEMORY_AREAを参照してください。
インメモリー列ストアの無効化
Autonomous Databaseのインメモリー列ストアを無効にするには、最大インメモリー・サイズを0に変更します。
たとえば:
BEGIN
DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/
この例では、最大インメモリー・サイズ値をゼロ(0)に変更し、インスタンスのデータベース・インメモリーを無効にします。
詳細については、「SET_SGA_PERCENTAGEプロシージャ」を参照してください。