1 Oracle Database In-Memoryの概要
Oracle Database In-Memory (Database In-Memory)は、リアルタイム分析と混合ワークロードのパフォーマンスを大幅に改善する一連の機能です。インメモリー列ストア(IM列ストア)は、Database In-Memoryの主要機能です。
ノート:
Database In-Memoryの機能には、Oracle Database In-Memoryオプションが必要となります。Database In-Memoryベース・レベルの場合、IM列ストアのサイズはCDBレベルで16 GBに制限されます。異なるエディションとサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照してください。
分析アプリケーションの課題
従来、分析問合せでの優れたパフォーマンスの獲得は、いくつかの要件を満たすことを意味していました。
一般的なデータ・ウェアハウスまたは多目的データベースでは、次のような要件があります。
-
ユーザー・アクセス・パターンを理解する必要があります。
-
高いパフォーマンスを提供する必要があります。それには、通常は、索引およびマテリアライズド・ビューの作成が必要です。
たとえば、OLTPアプリケーションに対して優れたパフォーマンスを提供するために、表に1つから3つまでの索引(主キーが1つと外部キー索引が2つ)を作成する場合は、分析問合せに対して優れたパフォーマンスを提供するために索引の追加作成が必要になる場合があります。
前述の要件を満たすと、管理性およびパフォーマンスに関する問題が生まれます。追加のアクセス構造は、それらを作成、管理および調整する必要があることから、パフォーマンスのオーバーヘッドをもたらします。たとえば、単一の行を表に挿入すると、この表内のすべての索引を更新する必要が生じ、応答時間が長くなります。
リアルタイム分析に対する需要は、より多くの分析問合せが混合ワークロード・データベースで実行されていることを意味します。従来のアプローチでは持ちこたえることはできません。
単一形式アプローチ
従来、リレーショナル・データベースには、行形式か列形式のどちらかでデータが格納されます。メモリーおよびディスクには、同じ形式でデータが格納されます。
Oracleデータベースでは、行はデータ・ブロック内に隣接して格納されます。たとえば、3つの行がある表の場合、Oracleデータ・ブロックには、まず1つ目の行、次に2つ目の行、次に3つ目の行が格納されます。各行には、その行のすべての列値が含まれます。行形式で格納されたデータは、トランザクション処理のために最適化されます。たとえば、少数の行ですべての列を更新すると、少数のブロックのみが変更されます。
分析問合せに関する問題に対処するために、一部のデータベース・ベンダーでは、列形式が採用されています。列データベースには、行ではなく、選択された列が隣接して格納されます。たとえば、大きなsales表では、ある列に販売IDが存在し、別の列に販売地域が存在します。
分析ワークロードでは、スキャン中に少数の列にしかアクセスしませんが、データ・セット全体をスキャンします。このため、列形式は、分析には最も効率的となります。列は別々に格納されるため、分析問合せで、必要な列のみにアクセスでき、不要なデータを読み取らずにすみます。たとえば、地域別販売額に関するレポートで、少数の列のみにアクセスしながら、多数の行を迅速に処理できます。
データベース・ベンダーは、一般に、顧客に列形式と行ベース形式のどちらかを選択することを強います。たとえば、データ形式が列の場合、データベースでは、メモリー内とディスク上の両方で列形式でデータが格納されます。一方の形式の利点を得ることは、もう一方の形式の利点を失うことを意味します。アプリケーションでは、迅速な分析または迅速なトランザクションのどちらかが実現されますが、両方ではありません。多目的データベースのパフォーマンス問題は、単一形式でのデータの格納では解決されません。
Oracle Database In-Memoryソリューション
Oracle Database In-Memory (Database In-Memory)機能セットには、インメモリー列ストア(IM列ストア)、高度な問合せ最適化、および可用性のソリューションが含まれています。
Database In-Memoryの最適化により、データ・ウェアハウスおよび多目的データベース上で、分析問合せを桁違いの速さで実行できるようになります。
Database In-Memoryとは
Database In-Memory機能セットには、IM列ストア、高度な問合せ最適化、および可用性のソリューションが含まれています。
Database In-Memory機能を組み合せることで、OLTPのパフォーマンスまたは可用性を犠牲にすることなく、分析問合せが桁違いに高速化されます。
関連項目:
Database In-Memoryオプションについて学習するには、Oracle Databaseライセンス情報ユーザー・マニュアルを参照
IM列ストア
IM列ストアでは、表、パーティションおよび個別の列のコピーが、高速スキャン向けに最適化された圧縮列形式で保持されます。
IM列ストアでは、各表またはビューのデータが行ではなく列ごとに格納されます。各列は、個別の行サブセットに分割されます。インメモリー圧縮単位(IMCU)というコンテナに、表セグメント内の行のサブセットのすべての列が格納されます。
ビデオ:
SGAの記憶域
IM列ストアは、システム・グローバル領域(SGA)のオプション部分である、インメモリー領域に存在します。IM列ストアは行ベース・ストレージまたはデータベース・バッファ・キャッシュに代わるものではありませんが、それを補完します。データベースでは、データは、行ベースおよび列形式の両方でメモリー内に存在できるようになり、両方の長所が提供されます。IM列ストアにより、ディスク形式とは無関係な、トランザクションの一貫性がある、表データのコピーがさらに提供されます。
ノート:
IM列ストアに移入するオブジェクトをバッファ・キャッシュにもロードする必要はありません。
IM列ストアへのオブジェクトの移入
インメモリー移入は、ディスク上の行ベースのデータからIM列ストア内の列データへの自動変換です。INMEMORY_AUTOMATIC_LEVEL
初期化パラメータがHIGH
に設定されると、データベースは自動的に最適なセグメントと列を決定してIM列ストアに移入し、アクセス頻度の低いセグメントを削除します。ユーザーの意思決定は必要ありません。
あるいは、IM列ストアを手動で管理し、オブジェクトまたは列レベルでINMEMORY
句を指定し、オブジェクトを移入する時期を選択することもできます。INMEMORY
句は、次のいずれかのレベル(リストされた最下位レベルから最上位レベルまで)で指定できます。
-
列(非仮想または仮想)
-
表パーティション(内部または外部)
-
表(内部または外部)またはマテリアライズド・ビュー
-
表領域
任意のオブジェクトに対して、その列のすべてまたはサブセットを移入用に構成できます。同様に、パーティション化された表またはマテリアライズド・ビューの場合は、パーティションのすべてまたはサブセットを移入のために構成できます。
関連項目:
-
INMEMORY
句の詳細は、『Oracle Database SQL言語リファレンス』を参照
高度な問合せ最適化
Database In-Memoryには、分析問合せのためのいくつかのパフォーマンス最適化が含まれています。
最適化には、次のものがあります。
-
式は、1つ以上の値、演算子、および値を解決するSQL関数(
DETERMINISTIC
のみ)の組合せです。デフォルトでは、インメモリー式(IM式)最適化により、DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS
プロシージャでの、IM列ストア内のホットな式の特定および移入が可能になります。IM式は、非表示の仮想列としてマテリアライズされますが、非仮想列と同じ方法でアクセスされます。IM式では、
NUMBER
、CHAR
、VARCHAR2
、DATE
、TIMESTAMP
、TIMESTAMP WITH TIME ZONE
、BINARY_FLOAT
、BINARY_DOUBLE
およびRAW
データ型の仮想列の格納がサポートされています。NCHAR
やNVARCHAR2
など、文字セットに依存するデータ型の仮想列は格納されません。NLS依存のデータ型もサポートされていません。 -
結合グループとは、表のセットを結合するために頻繁に使用される列のセットを指定するユーザー定義のオブジェクトです。特定の問合せで、結合グループにより、データベースで列値を解凍およびハッシュするパフォーマンス上のオーバーヘッドを排除できます。
-
小さいディメンション表を大きいファクト表に結合する集計問合せの場合、インメモリー集計(IM集計)では、
VECTOR GROUP BY
操作を使用してパフォーマンスを向上させます。この最適化では、後でではなくファクト表のスキャン中に、データが集計されます。 -
IM列ストアでは、再移入とは、IMCU内のデータが著しく変更された後のIMCUの自動更新です。IMCUに失効エントリがあるが失効しきい値に満たない場合、バックグラウンド・プロセスにより、IM列ストアの段階的な再移入である、トリクル再移入が引き起こされることがあります。
関連トピック
高可用性のサポート
可用性は、要求に応じてアプリケーション、サービスまたは機能がどの程度使用可能であるかを表しています。
Database In-Memoryでは、次の可用性機能がサポートされています。
-
インメモリー・ファスト・スタート(IMファスト・スタート)では、データベース・インスタンス再起動時のIM列ストアへのデータ移入時間が短縮されます。IMファスト・スタートは、IM列ストアに現在移入されているデータのコピーを、ディスク上に圧縮された列形式で定期的に保存することによって、移入時間を削減します。
-
Oracle Real Application Clusters (Oracle RAC)環境の各ノードには、独自のIM列ストアがあります。完全に異なるオブジェクトを各ノードに移入させることや、大きなオブジェクトをクラスタ内のすべてのIM列ストア間で分散させることが可能です。Engineered Systemsでは、同じオブジェクトを各ノードのIM列ストアに存在させることも可能です。
-
Oracle Database 12cリリース2 (12.2)以降、IM列ストアは、Active Data Guard環境内のスタンバイ・データベース上でサポートされています。
関連トピック
分析問合せのパフォーマンスの向上
圧縮された列形式によって、高速スキャン、問合せ、結合および集計が可能になります。
データ・スキャンのパフォーマンスの向上
列形式では、大量のデータをスキャンするために高速なスループットが提供されます。
IM列ストアを使用すると、データをリアル・タイムで分析して、様々な可能性を探り、反復を実行できます。具体的には、IM列ストアでは、次を実行する問合せのパフォーマンスが大幅に向上します。
-
多数の行をスキャンし、
<
、>
、=
およびIN
などの演算子を使用するフィルタを適用する -
表、または100列のうちの5列にアクセスする問合せなど、多数の列を持つマテリアライズド・ビューから、わずかな列を選択する
-
問合せで
CONTAINS()
またはJSON_TEXTCONTAINS()
演算子が指定されている場合は、テキスト、XMLまたはJSONドキュメントの高速インメモリー検索が有効になります。
ノート:
「IM全文列」
純粋なインメモリー・スキャン
純粋なインメモリー・スキャンでは、すべてのデータがIM列ストアからアクセスされます。
IM列ストアのスキャンは、次の理由から、行ベースのデータのスキャンよりも高速になります。
-
バッファ・キャッシュのオーバーヘッドの排除
IM列ストアには、純粋なインメモリー列形式でデータが格納されます。データは、データ・ファイル内に存在し続けたり、REDOを生成することはありません。そのため、データベースにより、ディスクからバッファ・キャッシュへのデータの読取りのオーバーヘッドがなくなります。
-
データ・プルーニング
データベースでは、データの行全体ではなく、問合せに必要な列のみがスキャンされます。また、データベースでは、記憶域索引および内部ディクショナリを使用して、特定の問合せのための必要なIMCUのみが読み取られます。たとえば、問合せで、店舗IDが8未満の店舗のすべての売上高がリクエストされた場合、データベースでは、IMCUプルーニングを使用して、この値を含まないIMCUを除外できます。
-
圧縮
従来は、圧縮の目的は領域の節約です。IM列ストアでは、圧縮の目的はスキャンの高速化です。データベースは、圧縮された形式に対して
WHERE
句の述部が適用されるアルゴリズムを使用して、自動的に列データを圧縮します。Oracle Databaseでは、適用された圧縮のタイプによっては、データを最初に解凍することなく、その圧縮された形式でスキャンできます。したがって、データベースで、IM列ストア内でスキャンする必要があるデータの量は、データベース・バッファ・キャッシュ内の対応する量より少なくなります。 -
ベクター処理
各CPUコアにより、ローカルのインメモリー列がスキャンされます。データを配列として処理するために、スキャンはSIMD (単一命令、複数データ)ベクター命令を使用します。たとえば、問合せでは、値を1つずつ読み取るのではなく、単一のCPU命令で一連の値を読み取ることができます。CPUコアによるベクター・スキャンは、行スキャンよりも桁違いに高速です。
たとえば、次の非定型の問合せを実行するとします。
SELECT cust_id, time_id, channel_id
FROM sales
WHERE prod_id BETWEEN 14 and 29
ORDER BY 1, 2, 3;
バッファ・キャッシュを使用する際、データベースでは通常、索引をスキャンして製品IDを検索し、ROWIDを使用してディスクからバッファ・キャッシュに行をフェッチしてから、不必要な列値を廃棄します。行形式でバッファ・キャッシュ内のデータをスキャンすると、多くのCPU命令が必要となり、CPU効率が最善ではなくなります。
IM列ストアを使用する場合は、データベースで、ディスク全体ではなく、リクエストされたsales
列のみスキャンできます。列形式でデータをスキャンすると、必要な列のみをCPUにパイプライン処理し、効率が向上します。各CPUコアは、SIMDベクター命令を使用してローカル・インメモリー列をスキャンします。
ビデオ:
インメモリー・ハイブリッド・スキャン
インメモリー・ハイブリッド・スキャンでは、行がIM列ストアと行ストアの両方から取得されます。
選択列機能を使用して、インメモリー・アクセス用のオブジェクトの列のサブセットを有効にできます。たとえば、アプリケーション問合せで指定されたsales
列がprod_id
、cust_id
およびamount_sold
のみの場合、これらの列にのみINMEMORY
属性を適用することでメモリーを節約することもできます。ただし、次の非定型の問合せを発行する場合があります。
SELECT prod_id, time_id FROM sales WHERE cust_id IN (100,200,300);
time_id
はNO INMEMORY
列であるため、問合せでは、パフォーマンスが低下する可能性がある行ストアからデータを取得する必要があります。ただし、次の条件が満たされるため、オプティマイザはインメモリー・ハイブリッド・スキャンを考慮できます。
-
述語のすべての列が
INMEMORY
です。この例では、cust_id
が唯一の述語列で、INMEMORY
です。 -
SELECT
リストには、NO INMEMORY
列とINMEMORY
列の任意の組合せが含まれていること。この例では、prod_id
はINMEMORY
ですが、time_id
はNO INMEMORY
です。
sales
の単一の表スキャン内で、インメモリー・ハイブリッド・スキャンはIM列ストア内のデータをフィルタし、行ストアからデータを投影します。このように、インメモリー・ハイブリッド・スキャンによって応答時間が桁違いに向上する可能性があります。
ノート:
結合のパフォーマンスの向上
ブルーム・フィルタは、セット内のメンバーシップをテストする、低メモリーのデータ構造です。IM列ストアでは、ブルーム・フィルタを利用して、結合のパフォーマンスを向上させます。
ブルーム・フィルタは、小さなディメンション表上の述語を大規模なファクト表上のフィルタに変換して、結合を高速化します。この最適化は、1つの大きなファクト表で複数ディメンションの結合を実行する場合に有効です。ファクト表のディメンション・キーには、繰返しの値が数多くあります。スキャンのパフォーマンスと繰返し値の最適化により、結合の速度は桁違いに向上します。
関連トピック
関連項目:
集計のパフォーマンスの向上
分析の重要な側面は、データの集計によって、パターンと傾向を判断することです。データがIM列ストアに格納されていると、集計と複合的なSQL問合せはより高速に実行されます。
Oracle Databaseでは、一般に、集計にはGROUP BY
句が関係します。従来は、データベースではSORT
およびHASH
操作が使用されていました。Oracle Database 12cリリース1 (12.1)以降、データベースでは、効率的な配列ベースのインメモリー集計を可能にするために、VECTOR GROUP BY
変換を提供していました。
ファクト表のスキャン中に、データベースにより、集計値がインメモリー配列に蓄積され、効率的なアルゴリズムを使用して集計が実行されます。主キーと外部キーの関係に基づく結合が、スター・スキーマとスノーフレーク・スキーマの両方に対して最適化されます。
関連項目:
-
SQL集計についてさらに学習するには、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照
混合ワークロードのパフォーマンスの向上
OLTPアプリケーションには、IM列ストア内のデータへのアクセスによる恩恵はありませんが、デュアルメモリー形式により、間接的にOLTPパフォーマンスを改善できます。
すべてのデータが行に格納されている場合、分析問合せのパフォーマンスの改善には、アクセス構造の作成が必要になります。標準的な手法は、分析索引およびマテリアライズド・ビューの作成です。たとえば、ある表で、OLTPアプリケーションのパフォーマンスを改善するために3つの索引(主キー1つと外部キー索引2つ)が必要となり、分析問合せのパフォーマンスを改善するために10個から20個の索引がさらに必要となるとします。この方法では、分析問合せのパフォーマンスを改善できますが、OLTPのパフォーマンスが低下します。表に1行挿入するには、その表のすべての索引を変更する必要があります。索引の数が増えると、挿入速度が低下します。
データをIM列ストアに移入する場合は、分析アクセス構造を使用しないようにすることができます。この手法では、必要な索引およびマテリアライズド・ビューが少なくなるため、記憶域領域および処理のオーバーヘッドが減少します。たとえば、1回の挿入では、11から23個ではなく、1から3個の索引が変更されます。
IM列ストアにより、ビジネス・アプリケーションにおける分析問合せのパフォーマンスを大幅に向上させることができる一方で、索引参照を使用して短いトランザクションを実行するその場かぎりの分析問合せ、およびデータ・ウェアハウスのワークロード、純粋なOLTPデータベースには、利益が少なくなります。次のタイプの問合せの場合、IM列ストアによってパフォーマンスは向上しません。
-
述語が複雑な問合せ
-
多数の列を選択する問合せ
-
多数の行を返す問合せ
関連項目:
物理的なデータ・ウェアハウス設計についてさらに学習するには、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
Exadataフラッシュ・キャッシュのインメモリー・サポート
INMEMORY
とマークされたすべてのオブジェクトが同時にDRAMメモリーに収まるわけではありません。Oracle Exadata Storage Serverソフトウェアを使用する場合は、Exadataスマート・フラッシュ・キャッシュを補足メモリーとして使用できます。
IM列ストアが有効になっている場合、Exadataスマート・フラッシュ・キャッシュは、自動的にインメモリー列形式にデータを再フォーマットします。以前のExadataリリースでは、ハイブリッド列圧縮データのみがIM列形式のフラッシュ記憶域の対象でした。再フォーマットは、圧縮された表(OLTP圧縮を含む)と圧縮されていない表の両方で行われます。
ノート:
Database In-Memoryベース・レベルが有効な場合、CELLMEMORY機能はOracle Exadataに対して無効になります。
この形式では、結合や集計など、Database In-Memoryのほとんどのパフォーマンス拡張機能がSmart Scanでサポートされています。また、非圧縮およびOLTP圧縮のデータ・ブロックをIM列形式に再フォーマットすると、必要なフラッシュ・メモリーの量を大幅に削減できます。
Exadataスマート・フラッシュ・キャッシュは、次の段階でデータを変換します。
-
Oracle Exadataは、データがすぐに利用できるように、対象のスキャンから従来の列形式でデータをキャッシュします。この形式は列形式ですが、IM列ストアで使用する形式と同じではありません。
-
バックグラウンドでは、Oracle Exadataはデータをより低い優先度で純粋なIM列ストア形式に再フォーマットします。バックグラウンドの書込みは、メイン・ワークロードへの干渉を防止します。
データベースがOLTPワークロードを実行していない場合、データ・ウェアハウス・ワークロードがフラッシュ・キャッシュの100%を消費する可能性があります。ただし、OLTPワークロードでは、データ・ウェアハウスのワークロードがフラッシュ・キャッシュの50%以下に制限されます。この最適化により、分析スキャンでOLTPワークロードのパフォーマンスが犠牲になることはありません。
デフォルトでは、Exadataスマート・フラッシュ・キャッシュは、レベルMEMCOMPRESS FOR CAPACITY LOW
を使用してデータを圧縮します。圧縮レベルを変更するか、列形式を完全に無効にするには、ALTER TABLE ... NO CELLMEMORY
文を使用します。
関連項目:
-
CELLMEMORY
属性についてさらに学習するには、Oracle Exadata Database Machineシステム概要を参照してください -
各種エディションおよびサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照
高可用性のサポート
IM列ストアは、Oracle Databaseに十分に組み込まれています。すべての高可用性機能がサポートされています。
列形式によって、Oracleデータベースのディスク・ストレージ形式が変更されることはありません。したがって、バッファ・キャッシュの変更およびREDOロギング機能も同様です。RMAN、Oracle Data GuardおよびOracle ASMなどの機能は、十分にサポートされています。
Oracle Real Application Clusters (Oracle RAC)環境では、デフォルトで、各ノードに固有のIM列ストアがあります。要件に応じて、様々な方法でオブジェクトを移入できます。
-
様々な表がすべてのノードに移入されます。たとえば、あるノード上に
sales
ファクト表があるのに対して、別のノード上にはproducts
ディメンション表があるなどです。 -
単一の表が様々なノード間で分散されます。たとえば、ハッシュパーティション化された同じ表の様々なパーティションが様々なノード上にある場合や、パーティション化されていない単一の表の様々なROWID範囲が様々なノード上にある場合などがあります。
-
一部のオブジェクトは、すべてのノード上のIM列ストア内に存在します。たとえば、
products
ディメンション表はすべてのノードに移入するが、sales
ファクト表のパーティションは様々なノードにわたり分散するなどです。
関連項目:
導入の容易性
Database In-Memoryは実装が単純であり、アプリケーション変更は必要になりません。
Database In-Memoryの導入の重要側面を次に示します。
-
デプロイの容易性
ユーザーの管理によるデータ移行は必要ありません。データベースでは、ディスク上に行形式でデータが格納され、IM列ストアの移入時に、自動的に行データが列形式に変換されます。
-
既存のアプリケーションとの互換性
アプリケーションの変更は不要です。オプティマイザにより、自動的に列形式が利用されます。ご使用のアプリケーションで、データベースに接続してSQLを発行する場合、それにはDatabase In-Memoryの機能が役立ちます。
-
完全なSQL互換性
Database In-Memoryでは、SQLに関して制限はありません。分析問合せには、Oracleの分析機能を使用するか、カスタマイズされたPL/SQLコードを使用するかに関係なく、利点があります。
-
設定が容易
複雑な設定は必要ありません。
INMEMORY_SIZE
初期化パラメータで、IM列ストアで使用するために予約するメモリーの量が指定されます。IM列ストアを構成すると、既存の分析ワークロードと非定型問合せのパフォーマンスがただちに向上します。 -
オブジェクトの管理が容易
自動インメモリーは、アクセス・トラッキングと列統計を使用して、IM列ストア内のオブジェクトを管理します。
INMEMORY_AUTOMATIC_LEVEL
初期化パラメータがHIGH
に設定されると、データベースは自動的に最適なセグメントと列を決定してIM列ストアに保持し、コールド(アクセス頻度が低い)・セグメントを削除します。ユーザーの意思決定は必要ありません。ノート:
INMEMORY_FORCE
初期化パラメータにBASE_LEVEL
が設定されている場合は、INMEMORY_AUTOMATIC_LEVEL
が設定されていても自動インメモリーは無効になります。表の圧縮レベルがAUTO
の場合でも、自動インメモリー・バックグラウンド操作は実行されません。 -
インメモリー・オブジェクトと列の任意のファイングレイン制御
INMEMORY_AUTOMATIC_LEVEL
がHIGH
に設定されていない場合、DDL文のINMEMORY
句ではIM列ストアに移入するオブジェクトまたは列を指定します。特定のオブジェクトまたは特定の列のみがインメモリー移入の対象となるように指定できます。
関連項目:
-
IM列ストアを有効化する方法を学習するには、「IM列ストアの有効化およびサイズ設定」を参照
-
INMEMORY_SIZE
、INMEMORY_FORCE
およびINMEMORY_AUTOMATIC_LEVEL
初期化パラメータについて学習するには、『Oracle Databaseリファレンス』を参照してください。
Database In-Memoryの要件
Oracle Database In-Memoryオプションは、すべてのDatabase In-Memory機能に必要となります。Database In-Memoryベース・レベルは、16 GB以下のIM列ストアに使用できます。
要件を次に示します。
-
Database In-Memoryベース・レベルを使用するには、CDBレベルの初期化パラメータ・ファイルで、
INMEMORY_FORCE
初期化パラメータにBASE_LEVEL
を設定する必要があります。このパラメータは動的に設定できず、PDBレベルで設定することもできません。BASE_LEVEL
を設定すると、次のような動作になります。-
すべての
INMEMORY
オブジェクトおよび列の圧縮レベルにQUERY LOW
が自動的かつ透過的に使用されます。 -
自動インメモリーが無効になります。
-
-
IM列ストアの作成によるオーバーヘッドを発生させることなくCellMemory機能を使用するには、このパラメータを
CELLMEMORY_LEVEL
に設定します。INMEMORY_SIZE
の値が0
より大きい場合、INMEMORY_FORCE=CELLMEMORY_LEVEL
設定は、INMEMORY_FORCE=DEFAULT
設定と同等であることに注意してください。この場合、CellMemoryのみを使用している場合でも、Database In-Memoryオプションは有効です。 -
ベース・レベルの場合は、IM列ストアのサイズが16 GBを超えないようにする必要があります。
-
IM列ストアには、最小で100 MBのメモリーが必要となります。ストア・サイズは、
MEMORY_TARGET
に含まれています。 -
Oracle RACデータベースでは、
INMEMORY_FORCE
初期化パラメータがBASE_LEVEL
に設定されている場合、各データベースの列ストア・サイズは16 GBに制限されます。
IM列ストアには、特別なハードウェアは必要ありません。
関連項目:
-
Database In-Memoryのライセンス関連のすべての情報は、Oracle Databaseライセンス情報ユーザー・マニュアルを参照してください
Database In-Memoryのための主要な作業
IM列ストアの利点を得るための問合せに必要なタスクは、IM列ストアのサイズ変更のみです。問合せの最適化および可用性の機能には、さらに構成が必要となります。
IM列ストアの構成のための主要な作業
次の表には、主要構成タスクが示されます。
表1-1 構成タスク
タスク | ノート | 必要な場合 | さらに学習するには |
---|---|---|---|
サイズを指定することで、IM列ストアを有効にします。 |
データベース・インメモリー・ベース・レベルの場合のみ、任意のCDBまたはOracle RACデータベースの任意のインスタンスに最大16GBを割り当てることができます。
|
すべてのDatabase In-Memory機能に必要 |
|
Database In-Memoryベース・レベルの場合は、追加の構成を実行します。 |
Database In-Memoryベース・レベルのみの場合、CDBレベルで |
Database In-Memoryベース・レベルの場合にのみ必要 |
|
自動インメモリーを構成してコールド・セグメントを有効化、移入および削除し、作業データ・セットが常に移入されるようにします。 |
ノート: |
Database In-Memoryオブジェクトの完全自動管理に必要 |
|
IM列ストアへの移入のために、列、パーティション、表またはマテリアライズド・ビュー、表領域を有効にします。 |
ノート: |
|
|
オブジェクトをIM列ストアに手動で移入します。 |
インメモリー・アクセス用にオブジェクトを有効化することとオブジェクトを移入することは、別のステップになります。
|
|
|
自動データ最適化(ADO)ポリシーを作成して、IM列ストア内のオブジェクトに対して |
たとえば、ポリシーにより、10日間アクセスがなかった場合にIM列ストアから |
オプション |
インメモリー問合せの最適化のための主要な作業
インメモリー問合せの最適化は、IM列ストアを機能させるために必要なわけではありません。次の最適化作業はオプションです。
表1-2 問合せ最適化タスク
タスク | ノート | さらに学習するには |
---|---|---|
|
たとえば、 |
|
|
候補は、ファクト表およびディメンション表を結合する列など、結合述語で頻繁に組み合せられる列です。 |
|
問合せブロックに必要な場合は、 |
インメモリー集計は、初期化パラメータやDDLで制御できない、自動的に有効になる機能です。 |
|
初期化パラメータ |
この初期化パラメータを |
可用性管理のための主要作業
次の表に、主要タスクを示します。
表1-3 可用性タスク
タスク | ノート | さらに学習するには |
---|---|---|
|
IMファスト・スタートでは、データベースの再起動時にIM列ストアへのデータベース・オブジェクトの移入が最適化されます。IMファスト・スタートは、高速にIM列ストアの移入を行うために、ディスク上に情報を格納します。 |
|
オブジェクトまたは表領域の場合は、DDL文で |
デフォルトでは、各インメモリー・オブジェクトは、Oracle RACインスタンス間で分散され、IM列ストアのシェアード・ナッシング・アーキテクチャが効率的に使用されます。 |
|
Oracle Data Guard環境では、プライマリまたはスタンバイ・データベース上で同じDatabase In-Memory初期化パラメータおよび文を使用できます。 |
たとえば、 |
IM列ストアのためのツール
IM列ストアまたはその他のDatabase In-Memory機能の管理には、特別なツールやユーティリティは必要ありません。SQL*Plus、SQL DeveloperおよびOracle Enterprise Manager (Enterprise Manager)などの管理ツールが十分にサポートされています。
この項では、特定のデータベース・インメモリー機能でサポートされているツールについて説明します。
インメモリー適格性テスト
インメモリー適格性テストは、データベース・ワークロードについて、データベース・インメモリー機能を使用する効果があるかどうかを判別するのに役立ちます。
多くのワークロードにはデータベース・インメモリーが有効ですが、そうでないワークロードもあります。インメモリー適格性テストは、指定のワークロードに対してデータベース・インメモリー機能の効果があるかどうかを判別し、この機能の使用について、その適格性を評価します。適格性は、ワークロードにおける分析アクティビティの割合で判別されます。データベース・インメモリーを実装する予定の場合は、このツールを使用すると、分析アクティビティが少なくデータベース・インメモリーを使用しても実質的なメリットを見込めない不適格なデータベースを迅速に特定し除外できます。それにより、ワークロードに強力な分析アクティビティがより多く含まれているため効果が大きいデータベースを、データベース・インメモリー導入の対象にできます。ワークロードにおける分析アクティビティの割合が大きければ大きいほど、データベース・インメモリーによって得られる効果が高くなります。
インメモリー適格性テストは、PL/SQLパッケージDBMS_INMEMORY_ADVISE
内のIS_INMEMORY_ELIGIBLE
プロシージャです。このパッケージはOracle Databaseに組み込まれています。それをダウンロードしインストールする必要はありません。
インメモリー適格性テストの実行は、データベース・インメモリーを有効にすることを検討しているデータベースでインメモリー・アドバイザを実行する前に必要な準備手順です。これによって時間を節約できます。これは、インメモリー・アドバイザ(時間がかかる)を実行する前に、インメモリー適格性テストで迅速な分析を実行して、指定のワークロードにデータベース・インメモリーが適切かどうかを把握しておくことができるためです。データベース・インメモリーの効果を保証するには分析アクティビティのレベルが不十分であるとインメモリー適格性テストで示されたワークロードに対しては、インメモリー・アドバイザの実行をスキップする必要があります。
- 候補となるデータベース・ワークロードに対してインメモリー適格性テストを実行して、データベース・インメモリーを効果的に使用できるワークロードとそうでないワークロードを特定します。
- インメモリー適格性テストで不適格と判別されたワークロードを除き、すべてのワークロードに対してインメモリー・アドバイザを実行します。
次に、DBMS_INMEMORY_ADVISE.IS_INMEMORY_ELIGIBLE
の使用方法の例を示します。確認するAWRスナップショットを選択するためのオプションは3つあります。これにより、スナップショットIDを使用してスナップショットの範囲を指定します。@im
により、コンテキストをデータベース・インメモリーIM列ストアに設定します。このプロシージャの構文の詳細は、下のDatabase PL/SQLパッケージおよびタイプ・リファレンスのリンクを参照してください。
例1-1 DBMS_INMEMORY_ADVISE.IS_INMEMORY_ELIGIBLEのコール
SQL> variable inmem_eligible BOOLEAN
SQL> variable analysis_summary VARCHAR2(4000)
SQL>
SQL> pause
SQL>
SQL> exec dbms_inmemory_advise.is_inmemory_eligible(26, 30, :inmem_eligible, :analysis_summary);
PL/SQL procedure successfully completed.
SQL>
SQL> pause
SQL>
SQL> print inmem_eligible
INMEM_ELIGIBLE
-----------
TRUE
SQL> print analysis_summary
ANALYSIS_SUMMARY
-----------------------------------------------------------------------------------------------------
Observed Analytic Workload Percentage is 40% is greater than target Analytic Workload Percentage 20%
関連項目:
- 『Database PL/SQLパッケージおよびタイプ・リファレンス』では、データベース・インメモリーについて適格性をテストするための
IS_INMEMORY_ELIGIBLE
プロシージャを含む、DBMS_INMEMORY_ADVISEパッケージについて説明しています。 - AWRスナップショット・データのエクスポート方法については、『Databaseパフォーマンス・チューニング・ガイド』のAWRデータのエクスポートを参照してください。
- 「インメモリー・アドバイザ」では、このツールの使用方法について説明しています。
インメモリー・アドバイザ
インメモリー・アドバイザでは、データベース・インメモリーによってデータベースにどのような効果があるかの定量分析が提供されます。
これによって生成されるアドバイスでは、様々な列ストア・サイズに関する推奨事項が示され、サイズごとに、推奨されるオブジェクトのセットがリストされます。ご使用のデータベースにデータベース・インメモリーを導入することを検討している場合は、このアドバイザを実行してください。
インメモリー・アドバイザの仕組み
インメモリー・アドバイザでは、SQL計画のカーディナリティ、アクティブ・セッション履歴(ASH)、パラレル問合せの使用、およびその他の統計に基づいて、分析処理が他のデータベース・アクティビティと区別されます。インメモリー・アドバイザでは、統計およびヒューリスティックな圧縮要因に基づいて、IM列ストア内のオブジェクトのサイズが推定されます。
このアドバイザでは、AWR、ASHおよびヒート・マップ統計からのデータに基づいて、分析処理のパフォーマンス向上要因が推定されます。
インメモリー・アドバイザの使用
PL/SQLパッケージDBMS_INMEMORY_ADVISE
には、従う必要がある手順のためのAPIが含まれています。
- ヒート・マップを有効にします。
DBMS_INMEMORY_ADVISE
を使用するには、これが必要です。ALTER SYSTEM SET HEAT_MAP = ON
DBMS_INMEMORY_ADVISE.START_TRACKING
を使用して、インメモリー・アドバイザのトラッキング・タスクを作成します。- 最後に作成したインメモリー・アドバイザ・トラッキング・タスクについて、ワークロード統計のトラッキングを停止します。
DBMS_INMEMORY_ADVISE.STOP_TRACKING;
アドバイスを生成する前に、トラッキングを停止する必要があります。
DBMS_INMEMORY_ADVISE.GENERATE_ADVISE
を実行します。アドバイザにより、ワークロード統計が調査され、その分析が実行されてから、アドバイスが生成されます。
- アドバイスをリストします。
DBMS_INMEMORY_ADVISE.LIST_ADVISE(TASK_ID,IN_MEMORY_SIZE);
この関数では、レコードINMEMORY_ADVISOR_RECOMMENDATION
としてアドバイスが返されます。複数のレコードが含まれている可能性があります。ここに示すようにレコードを出力できます。ここでのOwner
は、表およびパーティションのスキーマ名を示しています。object_name
ではtable_name
が参照され、これがパーティション表である場合、subobject_name
ではそのパーティション名が参照されます。begin v_im_adv_res := dbms_inmemory_advise.list_advise(v_task_id, 10000); v_tab_im_adv_res := v_im_adv_res.recommended_obj_list; dbms_output.put_line('List of recommended objects '); dbms_output.put_line('v_tab_im_adv_res.count : ' || v_tab_im_adv_res.count); for i in 1..v_tab_im_adv_res.count loop dbms_output.put_line('Owner : ' || v_tab_im_adv_res(i).owner); dbms_output.put_line('Table : ' || v_tab_im_adv_res(i).object_name); dbms_output.put_line('Partition : ' || v_tab_im_adv_res(i).subobject_name); end loop; end; / List of recommended objects v_tab_im_adv_res.count : 2 Owner : tpch Table. : Lineorder Partition : SYS_P258 Owner : tpch Table : Lineorder Partition : SYS_P234
INMEMORY_ADVISOR_RECOMMENDATION
の正式な定義を次に示しますtype Inmemory_Advisor_Recommendation is Record ( inmemory_size number, db_time_baseline number, /* DB time for IM size = 0 */ db_time_baseline_analytics number, /* Estimated analytics time for IM size = 0 */ db_time_high number, /* High end of estimated DB time */ db_time_low number, /* Low end of estimated DB time */ db_time_analytics_high number, /* High end of estimated analytics db time */ db_time_analytics_low number, /* Low end of estimated analytics db time */ recommended_obj_list Inmemory_Adv_Obj_Tab /* List of objects recommended * for the simulated IM size */ );
推奨されるオブジェクトのリストは、データ構造
INMEMORY_ADV_OBJ_TAB
であり、次のように定義されています。タイプINMEMORY_ADV_OBJ_TAB
は、INMEMORY_ADV_OBJECT
の表です。type Inmemory_Adv_Object is record ( Owner Varchar2(Ora_Max_Name_Len), Object_Name Varchar2(Ora_Max_Name_Len), Subobject_Name Varchar2(Ora_Max_Name_Len) );
ノート:
ビューDBA_INMEMORY_ADVISOR_RECOMMENDATION
で最後のアドバイスを確認することもできます。
このプロシージャでは、指定されたINMEMORY_SIZE
制約について、推奨オブジェクトの最適なリストが返されます。アドバイスで推奨されている構成は、全体または一部を実装することも、無視することもできます。データベースにインメモリーを導入する場合は、推奨事項にすべて従うことをお薦めします。
インメモリー・アドバイザでアドバイスを生成する手順を次に示します。最初にインメモリー適格性テストを実行する必要があることに注意してください。このテストはこの例には含まれていません。それについては、このトピックの最後にあるリンクを参照してください。
例1-2 インメモリー・アドバイザの実行の手順
1. HEAT_MAP
をオンにしてトラッキングを開始します。これにより、インメモリー・アドバイザの分析処理が開始されます。
SQL> alter system set heat_map=on;
System altered.
SQL> @start_track
SQL>
SQL> variable taskid NUMBER;
SQL>
SQL> exec dbms_inmemory_advise.start_tracking(:taskid);
PL/SQL procedure successfully completed.
SQL>
SQL> print taskid
TASKID
----------
1
2. トラッキングを停止します。これは、アドバイスを生成する前に実行してください。
SQL> exec dbms_inmemory_advise.stop_tracking;
PL/SQL procedure successfully completed.
3. これで、アドバイスを生成できるようになりました。
SQL> exec dbms_inmemory_advise.generate_advise;
PL/SQL procedure successfully completed.
この場合に返される結果は、次のとおりです。インメモリー・アドバイザでは、様々なOracle Database In-Memoryサイズがシミュレートされ、サイズごとに、参照ワークロードのデータベース時間が推定されます。
INMEMORY_SIZE_MB ESTIMATED_DB_TIME_MINUTES RECOMMENDED_OBJECTS
---------------- ------------------------- --------------------------------------------------------------------------------
0 8.6197877
74.1 8.27409783 Owner: SCOTT Table: ANA_5 ;Owner: SCOTT Table: ANA_4 ;
296.4 5.57368015 Owner: SCOTT Table: ANA_5 ;Owner: SCOTT Table: ANA_4 ;Owner: SCOTT Table: ANA_1
518.7 4.22347132 Owner: SCOTT Table: ANA_5 ;Owner: SCOTT Table: ANA_4 ;Owner: SCOTT Table: ANA_1
741 2.87326248 Owner: SCOTT Table: ANA_5 ;Owner: SCOTT Table: ANA_4 ;Owner: SCOTT Table: ANA_1
ビューDBA_INMEMORY_ADVISOR_RECOMMENDATION
を使用して、書式設定されたレイアウトで結果を表示することもできます。
インメモリー・アドバイザとインメモリー適格性テスト
データベース・インメモリーの導入を準備するためのお薦めの方法は、まずデータベースに対してインメモリー適格性テストを実行してから、インメモリー・アドバイザを実行することです。
インメモリー適格性テストはインメモリー・アドバイザの仲間です。このツールを使用すると、インメモリー・テクノロジが役立たないワークロードを特定できるため、データベース・インメモリーの取組みを効果のあるワークロードに集中させることができます。先にインメモリー適格性テストでワークロードがデータベース・インメモリーの適切な候補であることを特定したデータベースにのみ、インメモリー・アドバイザを実行します。
インメモリー・アドバイザとインメモリー適格テストは両方ともPL/SQLパッケージDBMS_INMEMORY_ADVISE
にバンドルされています。このパッケージはOracle Databaseとともに含まれています。それをダウンロードしインストールする必要はありません。
関連項目:
- インメモリー適格性テスト。インメモリー・アドバイザを使用してワークロードを分析する前に、このツールを実行してワークロードの初期評価を取得します。
- Database PL/SQLパッケージおよびタイプ・リファレンスで、DBMS_INMEMORY_ADVISEパッケージについて説明しています。
- AWRスナップショット・データのエクスポート方法については、『Databaseパフォーマンス・チューニング・ガイド』のAWRデータのエクスポートを参照してください。
- 『Oracle Databaseリファレンス』で、ビューDBA_INMEMORY_ADVISOR_RECOMMENDATIONについて説明しています。
IM列ストア用のCloud Controlページ
Enterprise Manager Cloud Control (Cloud Control)では、インメモリー列ストア中央ホーム・ページが用意されています。このページでは、IM列ストアへのダッシュボード・インタフェースが提供されます。
このページを使用して、表、索引、パーティション、表領域などのデータベース・オブジェクトに対するインメモリー・サポートを監視します。オブジェクトに対するインメモリー機能を表示し、インメモリーの使用状況統計を監視できます。特に指定のないかぎり、このマニュアルでは、Database In-Memoryの機能へのコマンドライン・インタフェースについて説明します。
関連トピック
関連項目:
「Cloud ControlでのIM列ストアの使用」では、Cloud Controlを使用してIM列ストアを管理する方法について説明します。
Oracle Compression Advisor
Oracle Compression AdvisorではMEMCOMPRESS
句を使用してユーザーが実感できる圧縮率を推定します。アドバイザはDBMS_COMPRESSION
インタフェースを使用します。
関連項目:
-
DBMS_COMPRESSION
についてさらに学習するには、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
Oracle Data PumpとIM列ストア
impdp
コマンドのTRANSFORM=INMEMORY:y
オプションを使用して、IM列ストアに対して有効になっているデータベース・オブジェクトをインポートできます。
このオプションを使用すると、Oracle Data Pumpにより、IM列ストア句が設定されたすべてのオブジェクトについて、その句が維持されます。TRANSFORM=INMEMORY:n
オプションを指定すると、データ・ポンプは、IM列ストア句が設定されたすべてのオブジェクトからその句を削除します。
また、TRANSFORM=INMEMORY_CLAUSE:
string
オプションを使用して、インポート時にダンプ・ファイルのデータベース・オブジェクトに対するIM列ストアを上書きできます。たとえば、このオプションを使用して、インポートされたデータベース・オブジェクトについて、IM列ストアの圧縮を変更できます。
ビデオ:
関連項目:
TRANSFORM impdb
パラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。