3 IM列ストアの有効化およびサイズ設定
IM列ストアを有効化または無効化するには、INMEMORY_SIZE
初期化パラメータの値を指定します。
3.1 IM列ストアの有効化の概要
IM列ストアのサイズを有効にするには、INMEMORY_SIZE
初期化パラメータを設定します。
デフォルトでは、INMEMORY_SIZE
は0
に設定されており、これは、IM列ストアが無効になっていることを意味します。IM列ストアを有効にするには、データベース・インスタンスを再起動する前に、初期化パラメータINMEMORY_SIZE
をゼロより大きい値に設定します。ALTER SYSTEM
文を使用することで、INMEMORY_SIZE
サイズ設定を動的に増加させることができます。
データベース・インメモリー・ベース・レベルの場合のみ、任意のCDBまたはOracle RACデータベースの任意のインスタンスに最大16GBを割り当てることができます。
デフォルトでは、表、表領域またはマテリアライズド・ビューに対してCREATE
またはALTER
文のINMEMORY
句を使用して、IM列ストアに移入するための候補を指定する必要があります。
関連項目:
-
INMEMORY_SIZE
初期化パラメータについてさらに学習するには、『Oracle Databaseリファレンス』を参照 -
INMEMORY
句の詳細は、『Oracle Database SQL言語リファレンス』を参照 -
各種エディションおよびサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照
3.2 IM列ストアの必須サイズの推定
要件に基づいてIM列ストアのサイズを推定してから、それらの要件に合わせてIM列ストアのサイズを変更します。圧縮の適用により、メモリー・サイズを削減できます。
IM列ストアで必要なメモリー量は、それに格納するデータベース・オブジェクト、および各オブジェクトに適用する圧縮方法によって異なります。INMEMORY
オブジェクトに対する圧縮方法を選択する際には、使用可能なメモリー量に対するパフォーマンス利益のバランスを取ります。
-
メモリー・サイズを最大限に削減するには、
FOR CAPACITY HIGH
またはFOR CAPACITY LOW
圧縮方法を選択します。ただし、これらのオプションでは、データを解凍するための問合せ実行中にさらにCPUが必要となります。 -
最善の問合せパフォーマンスを得るには、
FOR QUERY HIGH
またはFOR QUERY LOW
圧縮方法を選択します。ただし、これらのオプションでは、より多くのメモリーが消費されます。
IM列ストアのサイズ設定時には、次のガイドラインを考慮してください。
-
IM列ストアに移入するすべてのオブジェクトについて、消費するメモリー量を推定します。
Oracle Compression Advisorでは
MEMCOMPRESS
句を使用してユーザーが実感できる圧縮率を推定します。アドバイザはDBMS_COMPRESSION
インタフェースを使用します。 -
個々の容量を加算します。
ノート:
移入後は、
V$IM_SEGMENTS
によって、ディスク上のそれらのオブジェクトの実サイズ、およびIM列ストアでのそれらのサイズが示されます。この情報を使用して、移入したオブジェクトの圧縮率を計算できます。ただし、オブジェクトがディスク上で圧縮された場合、この問合せでは正しい圧縮率は示されません。 -
In-Memory最適化算術を構成し、インメモリー表が
FOR QUERY LOW
圧縮を使用する場合は、NUMBER
列の二重記憶を考慮して約15%を追加します。 -
データベース・オブジェクトの拡大を考慮するため、およびDML操作後に行の最新版を格納するために、領域を追加します。
動的サイズ変更の最小容量は1グラニュルです。
関連項目:
-
圧縮アドバイザを使用した圧縮率の推定方法を学習するには、『Oracle Database管理者ガイド』を参照
-
V$IM_SEGMENTS
について学習するには、『Oracle Databaseリファレンス』を参照
3.3 CDBまたはPDBに対するIM列ストアの有効化
IM列ストアに表またはマテリアライズド・ビューを移入する前に、IM列ストアを有効にする必要があります。
CDBでは、IM列ストアの全体のサイズがCDBルートのINMEMORY_SIZE
設定によって決まります。デフォルトでは、すべてのPDBがIM列ストアにアクセスできます。
ノート:
Database In-Memoryベース・レベルの場合、CDBレベルのINMEMORY_SIZE
のサイズは16G
以下である必要があります。
個々のPDB内では、INMEMORY_SIZE
を別の値に設定することで、共有インメモリー領域へのアクセスを制限できます。たとえば、PDBが100個のCDBでは、CDBレベルでINMEMORY_SIZE
を16G
に設定し、あるPDBではINMEMORY_SIZE
を10G
に設定し、2番目のPDBでは6G
に、残りのPDBでは0
に設定できます。
前提条件
この作業では、次のことを想定しています。
-
CDBがオープンしている。
-
COMPATIBLE
初期化パラメータが12.1.0
以上に設定されています。 -
INMEMORY_SIZE
初期化パラメータが0
(デフォルト)に設定されています。 -
Database In-Memoryベース・レベルを使用する。
IM列ストアを有効にするには:
-
SQL*PlusまたはSQL Developerで、管理者権限を持つユーザーとしてCDBルートにログインします。
-
INMEMORY_SIZE
初期化パラメータをゼロ以外の値に設定します。ALTER SYSTEM
文を使用してサーバー・パラメータ・ファイル(SPFILE)でこの初期化パラメータを設定する場合、SCOPE=SPFILE
を指定する必要があります。たとえば、次の文では、インメモリー領域サイズを16 GBに設定します。
ALTER SYSTEM SET INMEMORY_SIZE = 16G SCOPE=SPFILE;
-
Database In-Memoryベース・レベルの場合は、
INMEMORY_FORCE
初期化パラメータにBASE_LEVEL
を設定します。たとえば、次の文はベース・レベルを指定しています。
ALTER SYSTEM SET INMEMORY_FORCE=BASE_LEVEL SCOPE=SPFILE;
PDBレベルでは、
INMEMORY_FORCE=BASE_LEVEL
を設定できません。また、このパラメータを動的に設定することはできません。 -
CDBを停止して、再度オープンします。
CDBを再度オープンしてSGA内のIM列ストアを初期化する必要があります。
-
必要な場合は、IM列ストアに現在割り当てられているメモリーの量を確認します。
SHOW PARAMETER INMEMORY_SIZE
ノート:
IM列ストアを有効にした後は、CDBを停止して再度オープンすることなく、そのサイズを動的に増加できます。
例3-1 IM列ストアの有効化
INMEMORY_SIZE
初期化パラメータが0
に設定されていることが前提です。次のSQL*Plusの例では、INMEMORY_SIZE
を10 GBに設定し、その変更内容が有効になるよう、データベース・インスタンスを停止してからデータベースを再度開きます。
SQL> SHOW PARAMETER INMEMORY_SIZE
NAME TYPE VALUE
------------------------------------ ----------- -----
inmemory_size big integer 0
SQL> ALTER SYSTEM SET INMEMORY_SIZE=10G SCOPE=SPFILE;
System altered.
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP
ORACLE instance started.
Total System Global Area 11525947392 bytes
Fixed Size 8213456 bytes
Variable Size 754977840 bytes
Database Buffers 16777216 bytes
Redo Buffers 8560640 bytes
In-Memory Area 10737418240 bytes
Database mounted.
Database opened.
SQL> SHOW PARAMETER INMEMORY_SIZE
NAME TYPE VALUE
------------------------------------ ----------- -----
inmemory_size big integer 10G
関連項目:
-
データベースの互換性レベルの設定の詳細は、『Oracle Databaseアップグレード・ガイド』を参照
-
INMEMORY_SIZE
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照 -
各種エディションおよびサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照
3.4 インメモリー領域のサイズ設定
インメモリー領域のサイズは、INMEMORY_SIZE
初期化パラメータによって設定されます。デフォルトでは、インメモリー領域のサイズは0であり、これは、IM列ストアが無効になっていることを意味します。インメモリー領域は、自動メモリー管理を使用して、または手動でALTER SYSTEM
コマンドを使用して、動的にサイズ変更することもできます。
インメモリー領域とSGA_TARGET
インメモリー領域は、SGA_TARGET
初期化パラメータの設定から差し引かれます。たとえば、SGA_TARGET
を10 GBに設定し、INMEMORY_SIZE
を4 GBに設定した場合は、SGA_TARGET
設定の40%がインメモリー領域に割り当てられます。次の図に、この関係を示します。
INMEMORY_SIZE
パラメータは動的に変更できますが、データベースの起動時に指定された初期値より小さくすることはできません。
自動共有メモリー管理(ASMM)でのインメモリー領域のサイズ設定
インメモリー列ストアのサイズ設定は、sga_target
の値が0より大きくPDBのINMEMORY_AUTOMATIC_LEVEL
がMEDIUM
またはHIGH
に設定されている場合はASMMで管理できるようになりました。
ASMMを有効にすると、インメモリー領域のサイズが、バッファ・キャッシュや共有プールなど、SGAの他のコンポーネントとともに制御されます。ASMMは、要求とワークロードに応じて物理インメモリー列ストアのサイズを動的に変更します。インメモリー列ストアのサイズが領域不足になると、サイズを自動的に増やします。また、列ストアのサイズを自動的に縮小し、空きメモリーを他のSGAコンポーネントで使用できるようにします。データベースの再起動は必要ありません。ASMMは、ビューV$INMEMORY_SIZE_ADVICE
によって提供される統計を使用して、列ストアの最適なサイズを決定します。
INMEMORY_SIZEパラメータは、ASMMの最小IM領域サイズを指定します。
ASMMが有効でない場合のインメモリー領域のサイズ設定
ASMMが有効になっていない場合、インメモリー領域のサイズは自動メモリー管理によって制御されません。データベースでは、バッファ・キャッシュまたは共有プールでさらにメモリーが必要な場合に自動的にインメモリー領域が縮小されることや、インメモリー領域が領域不足の場合に拡大されることはありません。
ASMMが有効な場合と無効な場合のINMEMORY_SIZEの影響の違い
Oracle Database 23c以降では、ASMMの使用中(SGA_TARGET > 0
)は、CDBのINMEMORY_SIZE
パラメータにより、すべてのテナントにわたる最小合計列ストア・サイズが指定されます。自動インメモリー(AIM)も、INMEMORY_AUTOMATIC_LEVEL
パラメータがHIGH
に設定されている必要があります。これは、SGAで決定された列ストア・サイズ設定がグローバルでありすべてのPDBに適用されるためです。
INMEMORY_SIZE
初期化パラメータではインスタンスの起動時の最小サイズを設定しますが、実行時にALTER
コマンドを使用して変更することもできます。ASMMが有効になっていない場合(SGA_TARGET=0
)は、INMEMORY_SIZE
パラメータにより、インメモリー領域の実際の合計サイズが設定されます。
ノート:
Oracle Database 23cより前のリリースの場合:Oracle Database 23cより前の場合は、インメモリー領域をCDBレベルで動的に拡張でき、インスタンスの実行中にインメモリー領域をCDBレベルで動的に縮小することはできません。前のリリースではPDBレベルで拡張と縮小の両方が可能です。ただし、インメモリー領域のサイズを縮小すると、特定のPDBのインメモリー使用のための割当てが動的に縮小します。列ストアを物理的に縮小し、これらの前のリリースの他のSGAコンポーネントで空きメモリーを使用できるようにするには、インスタンスを再起動する必要があります。
ASMMが有効でINMEMORY_AUTOMATIC_LEVELがHIGHに設定されていない場合のインメモリー領域のサイズ設定
この場合、インメモリー領域は、Oracle Databaseの23cより前のリリースに関するノートで説明したのと同じ方法で管理されます。CDBでは、インメモリー領域の動的な拡張を実行できますが、動的な縮小はできません。また、前述と同じ制約がPDBに適用されます。
インメモリー領域のサイズ制約の動的設定
ALTER SYSTEM
文を使用してINMEMORY_SIZE
を動的に設定すると、ASMMが有効な場合に実行される自動サイズ変更操作の下限が設定されます。INMEMORY_SIZE
を増やすと、次の条件が満たされた場合に、データベースにより、増加したメモリーが割り当てられます。
-
SGAに空きメモリーがある。
-
INMEMORY_SIZE
の新しいサイズは、少なくとも1グラニュルです。ノート:
ALTER SYSTEM
を使用してINMEMORY_SIZE
を縮小することはできません。- インメモリーを有効にするには、CDBの
INMEMORY_SIZE
が100MB以上である必要があります。
V$INMEMORY_AREA
およびV$SGA
ビューには、即座にその変更内容が反映されます。
CDBにおけるインメモリー・リソース管理
CDBでは、IM列ストアのサイズはCDBルートのINMEMORY_SIZE
パラメータによって設定されます。デフォルトでは、IM列ストアはPDB間で共有されます。これは、使用可能なメモリーを消費することによって、PDBが他のPDBを枯渇させる可能性があることを意味します。
PDB内では、ALTER SYSTEM SET INMEMORY_SIZE
を使用してメモリー使用量を制限することができます。たとえばCDBレベルでは、INMEMORY_SIZE
を20G
に設定し、PDBを次の例のように構成します。
-
hrpdb
で、INMEMORY_SIZE
を0
に設定します -
salespdb
で、INMEMORY_SIZE
を10G
に設定します -
oepdb
で、INMEMORY_SIZE
を11G
に設定します
前述の例では、CDBレベルのINMEMORY_SIZE
が20G
のみであっても、PDBレベルのINMEMORY_SIZE
設定は21G
に追加されます。オーバーサブスクリプションは、PDBが停止または切断されている場合に、IM列ストアの貴重な領域が消費されないようにします。
自動共有メモリー管理におけるPDBおよびCDBの動作
SGA_TARGET
がゼロより大きい場合に適用されます。これは、ASMMが可能であることを意味します。ASMMを機能させるには、説明するように、PDBおよびCDBでINMEMORY_AUTOMATIC_LEVEL
の互換性を保持します。
- 自動インメモリーの
INMEMORY_AUTOMATIC_LEVEL
パラメータがCDBレベルでHIGH
に設定されている場合:PDBは、
INMEMORY_AUTOMATIC_LEVEL
のHIGH
設定を継承します。PDBレベルで、この設定をLOW
またはMEDIUM
に変更することもできます。PDBでこの設定をOFF
に変更すると、エラーが発生します。 - CDBレベルで
INMEMORY_AUTOMATIC_LEVEL
をOFF
に設定し、CDBでHIGH
に変更しようとした場合:PDBで
INMEMORY_AUTOMATIC_LEVEL
がすでに明示的にOFF
に設定されている場合、ユーザー・エラーが発生します。
関連項目:
-
自動メモリー管理についてさらに学習するには、『Oracle Database管理者ガイド』を参照
-
INMEMORY_SIZE
、V$INMEMORY_AREA
およびV$SGA
について学習するには、『Oracle Databaseリファレンス』を参照
3.4.1 IM列ストアのサイズの動的な増加
SQLを使用してINMEMORY_SIZE
をリセットすると、データベースの実行時にIM列ストアのサイズを増やすことができます。
ノート:
ASMMを有効にすると、必要に応じてIM列ストアのサイズが自動的に減少または増加します。INMEMORY_SIZE
を現在の設定より小さい値に設定する場合は、ここに示す前提条件を確認し、次に説明するようにSCOPE=SPFILE
を指定してALTER SYSTEM
文を発行します。その後、データベースを再起動して変更を有効にします。
前提条件
ALTER SYSTEM
を使用してIM列ストアのサイズを動的に増加させるには、インスタンスは次の前提条件を満たしている必要があります。
-
IM列ストアが有効になっている必要があります。
-
互換性レベルが
12.2.0
以上である必要があります。 -
データベース・インスタンスをSPFILEで起動する必要があります。
-
IM列ストアの新しいサイズは、少なくとも1グラニュルである必要があります。
手順
関連項目:
-
INMEMORY_SIZE
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照
3.5 IM列ストアの自動サイズ設定を操作するためのビュー
V$INMEMORY_SIZE_ADVICE
は、インメモリー列ストア(IM列ストア)の様々なシミュレーション・サイズの使用状況およびパフォーマンス統計を推定します。
このビューでは、CDBのインメモリー列ストアの様々なサイズについて、データベースによってユーザー・リクエストの処理に費やされる累積時間を予測します。これには、アイドル状態でないすべてのユーザー・セッションの待機時間とCPU時間が含まれます。
関連項目:
V$INMEMORY_SIZE_ADVICEについては、Oracle Databaseリファレンスを参照してください。3.6 IM列ストアの無効化
INMEMORY_SIZE
初期化パラメータをゼロに設定してからデータベースを再度開くことで、IM列ストアを無効にできます。
前提
この作業では、開いているデータベースでIM列ストアが有効になっていることを想定しています。
IM列ストアを無効にするには:
-
サーバー・パラメータ・ファイル(SPFILE)で
INMEMORY_SIZE
初期化パラメータを0
に設定します。 -
データベースを停止します。
-
データベース・インスタンスを起動してから、データベースを開きます。
関連項目:
INMEMORY_SIZE
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。