1 Oracle Database In-Memoryの概要

Oracle Database In-Memory (Database In-Memory)は、リアルタイム分析と混合ワークロードのパフォーマンスを大幅に改善する一連の機能です。インメモリー列ストア(IM列ストア)は、Database In-Memoryの主要機能です。

ノート:

Database In-Memoryの機能には、Oracle Database In-Memoryオプションが必要となります。異なるエディションとサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照してください。

この章のトピックは、次のとおりです:

1.1 分析アプリケーションの課題

従来、分析問合せでの優れたパフォーマンスの獲得は、いくつかの要件を満たすことを意味していました。

一般的なデータ・ウェアハウスまたは多目的データベースでは、次のような要件があります。

  • ユーザー・アクセス・パターンを理解する必要があります。

  • 優れたパフォーマンスを提供する必要があります。それには、一般に、索引、マテリアライズド・ビューおよびOLAPキューブの作成が必要となります。

たとえば、OLTPアプリケーションに対して優れたパフォーマンスを提供するために、表に1つから3つまでの索引(主キーが1つと外部キー索引が2つ)を作成する場合は、分析問合せに対して優れたパフォーマンスを提供するために索引の追加作成が必要になる場合があります。

図1-1 複数の索引

図1-1の説明が続きます
「図1-1 複数の索引」

前述の要件を満たすと、管理性およびパフォーマンスに関する問題が生まれます。追加のアクセス構造は、それらを作成、管理および調整する必要があることから、パフォーマンスのオーバーヘッドをもたらします。たとえば、単一の行を表に挿入すると、この表内のすべての索引を更新する必要が生じ、応答時間が長くなります。

リアルタイム分析に対する需要は、より多くの分析問合せが混合ワークロード・データベースで実行されていることを意味します。従来のアプローチでは持ちこたえることはできません。

1.2 単一形式アプローチ

従来、リレーショナル・データベースには、行形式か列形式のどちらかでデータが格納されます。メモリーおよびディスクには、同じ形式でデータが格納されます。

Oracleデータベースでは、行はデータ・ブロック内に隣接して格納されます。たとえば、3つの行がある表の場合、Oracleデータ・ブロックには、まず1つ目の行、次に2つ目の行、次に3つ目の行が格納されます。各行には、その行のすべての列値が含まれます。行形式で格納されたデータは、トランザクション処理のために最適化されます。たとえば、少数の行ですべての列を更新すると、少数のブロックのみが変更されます。

分析問合せに関する問題に対処するために、一部のデータベース・ベンダーでは、列形式が採用されています。列データベースには、行ではなく、選択された列が隣接して格納されます。たとえば、大きなsales表では、ある列に販売IDが存在し、別の列に販売地域が存在します。

分析ワークロードでは、スキャン中に少数の列にしかアクセスしませんが、データ・セット全体をスキャンします。このため、列形式は、分析には最も効率的となります。列は別々に格納されるため、分析問合せで、必要な列のみにアクセスでき、不要なデータを読み取らずにすみます。たとえば、地域別販売額に関するレポートで、少数の列のみにアクセスしながら、多数の行を迅速に処理できます。

データベース・ベンダーは、一般に、顧客に列形式と行ベース形式のどちらかを選択することを強います。たとえば、データ形式が列の場合、データベースでは、メモリー内とディスク上の両方で列形式でデータが格納されます。一方の形式の利点を得ることは、もう一方の形式の利点を失うことを意味します。アプリケーションでは、迅速な分析または迅速なトランザクションのどちらかが実現されますが、両方ではありません。多目的データベースのパフォーマンス問題は、単一形式でのデータの格納では解決されません。

1.3 Oracle Database In-Memoryソリューション

Oracle Database In-Memory (Database In-Memory)機能セットには、インメモリー列ストア(IM列ストア)、高度な問合せ最適化、および可用性のソリューションが含まれています。

Database In-Memoryの最適化により、データ・ウェアハウスおよび多目的データベース上で、分析問合せを桁違いの速さで実行できるようになります。

この項では、次の項目について説明します。

1.3.1 Database In-Memoryとは

Database In-Memory機能セットには、IM列ストア、高度な問合せ最適化、および可用性のソリューションが含まれています。

Database In-Memory機能を組み合せることで、OLTPのパフォーマンスまたは可用性を犠牲にすることなく、分析問合せが桁違いに高速化されます。

この項では、次の項目について説明します。

関連項目:

Database In-Memoryオプションについて学習するには、Oracle Databaseライセンス情報ユーザー・マニュアルを参照

1.3.1.1 IM列ストア

IM列ストアでは、表、パーティションおよび個別の列のコピーが、高速スキャン向けに最適化された特別な圧縮列形式で保持されます。

ビデオ:

IM列ストアは、システム・グローバル領域(SGA)のオプション部分である、インメモリー領域に存在します。IM列ストアは行ベース・ストレージまたはデータベース・バッファ・キャッシュに代わるものではありませんが、それを補完します。データベースでは、データは、行ベースおよび列形式の両方でメモリー内に存在できるようになり、両方の長所が提供されます。IM列ストアにより、ディスク形式とは無関係な、トランザクションの一貫性がある、表データのコピーがさらに提供されます。

図1-2 デュアルフォーマット・データベース

図1-2の説明が続きます。
「図1-2 デュアルフォーマット・データベース」の説明

ノート:

IM列ストアに移入するオブジェクトをバッファ・キャッシュにもロードする必要はありません。

DDL文でINMEMORY句を使用して、次のレベルのいずれかで、IM列ストアを有効にします。

  • 列(非仮想または仮想)

  • 表(内部または外部)、マテリアライズド・ビューまたはパーティション

  • 表領域

INMEMORY属性が表領域レベルで指定されている場合、デフォルトで、表領域内のすべての新しい表およびマテリアライズド・ビューがIM列ストアに対して有効になります。Database In-Memoryとの関連では、移入とは、ディスク上の行ベースのデータからIM列ストア内の列データへの自動変換です。IM列ストアへの移入のためにデータベース・オブジェクトの列のすべてまたはサブセットを構成できます。同様に、パーティション化された表またはマテリアライズド・ビューの場合は、パーティションのすべてまたはサブセットを移入のために構成できます。

たとえば、IM列ストアに移入するために、shスキーマからcustomersproductsおよびsalesという3つの表を構成できます。IM列ストアでは、行ではなく列で各表のデータが格納され、各列が別々の行サブセットに分割されます。インメモリー圧縮単位(IMCU)という特別なコンテナに、表セグメント内の行のサブセットのすべての列が格納されます。

1.3.1.2 高度な問合せ最適化

Database In-Memoryには、分析問合せのためのいくつかのパフォーマンス最適化が含まれています。

最適化には、次のものがあります。

  • は、1つ以上の値、演算子、および値を解決するSQL関数(DETERMINISTICのみ)の組合せです。デフォルトでは、インメモリー式(IM式)最適化により、DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONSプロシージャでの、IM列ストア内のホットな式の特定および移入が可能になります。IM式は、非表示の仮想列としてマテリアライズされますが、非仮想列と同じ方法でアクセスされます。

  • 結合グループとは、表のセットを結合するために頻繁に使用される列のセットを指定するユーザー定義のオブジェクトです。特定の問合せで、結合グループにより、データベースで列値を解凍およびハッシュするパフォーマンス上のオーバーヘッドを排除できます。

  • 小さいディメンション表を大きいファクト表に結合する集計問合せの場合、インメモリー集計(IM集計)では、VECTOR GROUP BY操作を使用してパフォーマンスを向上させます。この最適化では、後でではなくファクト表のスキャンに、データが集計されます。

  • IM列ストアでは、再移入とは、IMCU内のデータが著しく変更された後のIMCUの自動更新です。IMCUに失効エントリがあるが失効しきい値に満たない場合、バックグラウンド・プロセスにより、IM列ストアの段階的な再移入である、トリクル再移入が引き起こされることがあります。

1.3.1.3 高可用性のサポート

可用性は、要求に応じてアプリケーション、サービスまたは機能がどの程度使用可能であるかを表しています。

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環境内のスタンバイ・データベース上でサポートされています。

関連トピック

1.3.2 分析問合せのパフォーマンスの向上

圧縮された列形式によって、高速スキャン、問合せ、結合および集計が可能になります。

この項では、次の項目について説明します。

1.3.2.1 データ・スキャンのパフォーマンスの向上

列形式では、大量のデータをスキャンするために高速なスループットが提供されます。

IM列ストアを使用すると、データをリアル・タイムで分析して、様々な可能性を探り、反復を実行できます。具体的には、IM列ストアでは、次を実行する問合せのパフォーマンスが大幅に向上します。

  • 多数の行をスキャンし、<>=およびINなどの演算子を使用するフィルタを適用する

  • 表、または100列のうちの5列にアクセスする問合せなど、多数の列を持つマテリアライズド・ビューから、わずかな列を選択する

  • SQL演算子を使用してLOB列を選択する

ビデオ:

列形式は、大部分の数値および短い文字列のデータ型で、固定幅の列を使用します。この最適化によって高速ベクター処理が可能になり、これにより、データベースでは問合せの応答が速くなります。

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

バッファ・キャッシュを使用する際、データベースでは通常、索引をスキャンして製品IDを検索し、ROWIDを使用してディスクからバッファ・キャッシュに行をフェッチしてから、不必要な列値を廃棄します。行形式でバッファ・キャッシュ内のデータをスキャンすると、多くのCPU命令が必要となり、CPU効率が最善ではなくなります。

IM列ストアを使用する場合は、データベースで、ディスク全体ではなく、リクエストされたsales列のみスキャンできます。列形式でデータをスキャンすると、必要な列のみをCPUにパイプライン処理し、効率が向上します。各CPUコアは、SIMDベクター命令を使用してローカル・インメモリー列をスキャンします。

1.3.2.2 結合のパフォーマンスの向上

ブルーム・フィルタは、セット内のメンバーシップをテストする、低メモリーのデータ構造です。IM列ストアでは、ブルーム・フィルタを利用して、結合のパフォーマンスを向上させます。

ブルーム・フィルタは、小さなディメンション表上の述語を大規模なファクト表上のフィルタに変換して、結合を高速化します。この最適化は、1つの大きなファクト表で複数ディメンションの結合を実行する場合に有効です。ファクト表のディメンション・キーには、繰返しの値が数多くあります。スキャンのパフォーマンスと繰返し値の最適化により、結合の速度は桁違いに向上します。

1.3.2.3 集計のパフォーマンスの向上

分析の重要な側面は、データの集計によって、パターンと傾向を判断することです。データがIM列ストアに格納されていると、集計と複合的なSQL問合せはより高速に実行されます。

Oracle Databaseでは、一般に、集計にはGROUP BY句が関係します。従来は、データベースではSORTおよびHASH操作が使用されていました。Oracle Database 12cリリース1 (12.1)以降、データベースでは、効率的な配列ベースのインメモリー集計を可能にするために、VECTOR GROUP BY変換を提供していました。

ファクト表のスキャン中に、データベースにより、集計値がインメモリー配列に蓄積され、効率的なアルゴリズムを使用して集計が実行されます。主キーと外部キーの関係に基づく結合が、スター・スキーマとスノーフレーク・スキーマの両方に対して最適化されます。

関連項目:

1.3.3 混合ワークロードのパフォーマンスの向上

OLTPアプリケーションには、IM列ストア内のデータへのアクセスによる恩恵はありませんが、デュアルメモリー形式により、間接的にOLTPパフォーマンスを改善できます。

すべてのデータが行に格納されている場合、分析問合せのパフォーマンスの改善には、アクセス構造の作成が必要になります。標準的なアプローチは、分析索引、マテリアライズド・ビューおよびOLAPキューブの作成です。たとえば、ある表で、OLTPアプリケーションのパフォーマンスを改善するために3つの索引(主キー1つと外部キー索引2つ)が必要となり、分析問合せのパフォーマンスを改善するために10個から20個の索引がさらに必要となるとします。この方法では、分析問合せのパフォーマンスを改善できますが、OLTPのパフォーマンスが低下します。表に1行挿入するには、その表のすべての索引を変更する必要があります。索引の数が増えると、挿入速度が低下します。

データをIM列ストアに移入する場合は、分析アクセス構造を使用しないようにすることができます。この方法では、必要な索引、マテリアライズド・ビューおよびOLAPキューブが少なくなるため、記憶域領域および処理のオーバーヘッドが減少します。たとえば、1回の挿入では、11から23個ではなく、1から3個の索引が変更されます。

IM列ストアにより、ビジネス・アプリケーションにおける分析問合せのパフォーマンスを大幅に向上させることができる一方で、索引参照を使用して短いトランザクションを実行するその場かぎりの分析問合せ、およびデータ・ウェアハウスのワークロード、純粋なOLTPデータベースには、利益が少なくなります。次のタイプの問合せの場合、IM列ストアによってパフォーマンスは向上しません。

  • 述語が複雑な問合せ

  • 多数の列を選択する問合せ

  • 多数の行を返す問合せ

関連項目:

物理的なデータ・ウェアハウス設計についてさらに学習するには、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

1.3.4 Exadataフラッシュ・キャッシュのインメモリー・サポート

INMEMORYとマークされたすべてのオブジェクトが同時にDRAMメモリーに収まるわけではありません。Oracle Exadata Storage Serverソフトウェアを使用する場合は、Exadataスマート・フラッシュ・キャッシュを補足メモリーとして使用できます。

IM列ストアが有効になっている場合、Exadataスマート・フラッシュ・キャッシュは、自動的にインメモリー列形式にデータを再フォーマットします。以前のExadataリリースでは、ハイブリッド列圧縮データのみがIM列形式のフラッシュ記憶域の対象でした。Oracle Exadataシステム・ソフトウェア18c (18.1.0)以降、再フォーマットは圧縮(OLTP圧縮を含む)と非圧縮の表の両方で発生します。

この形式では、結合や集計など、Database In-Memoryのほとんどのパフォーマンス拡張機能がSmart Scanでサポートされています。また、非圧縮およびOLTP圧縮のデータ・ブロックをIM列形式に再フォーマットすると、必要なフラッシュ・メモリーの量を大幅に削減できます。

Exadataスマート・フラッシュ・キャッシュは、次の段階でデータを変換します。

  1. Oracle Exadataは、データがすぐに利用できるように、対象のスキャンから従来の列形式でデータをキャッシュします。この形式は列形式ですが、IM列ストアで使用する形式と同じではありません。

  2. バックグラウンドでは、Oracle Exadataはデータをより低い優先度で純粋なIM列ストア形式に再フォーマットします。バックグラウンドの書込みは、メイン・ワークロードへの干渉を防止します。

データベースがOLTPワークロードを実行していない場合、データ・ウェアハウス・ワークロードがフラッシュ・キャッシュの100%を消費する可能性があります。ただし、OLTPワークロードでは、データ・ウェアハウスのワークロードがフラッシュ・キャッシュの50%以下に制限されます。この最適化により、分析スキャンでOLTPワークロードのパフォーマンスが犠牲になることはありません。

デフォルトでは、Exadataスマート・フラッシュ・キャッシュは、レベルMEMCOMPRESS FOR CAPACITY LOWを使用してデータを圧縮します。圧縮レベルを変更するか、列形式を完全に無効にするには、ALTER TABLE ... NO CELLMEMORY文を使用します。

1.3.5 高可用性のサポート

IM列ストアは、Oracle Databaseに十分に組み込まれています。すべての高可用性機能がサポートされています。

列形式によって、Oracleデータベースのディスク・ストレージ形式が変更されることはありません。したがって、バッファ・キャッシュの変更およびREDOロギング機能も同様です。RMAN、Oracle Data GuardおよびOracle ASMなどの機能は、十分にサポートされています。

Oracle Real Application Clusters (Oracle RAC)環境では、デフォルトで、各ノードに固有のIM列ストアがあります。要件に応じて、様々な方法でオブジェクトを移入できます。

  • 様々な表がすべてのノードに移入されます。たとえば、あるノード上にsalesファクト表があるのに対して、別のノード上にはproductsディメンション表があるなどです。

  • 単一の表が様々なノード間で分散されます。たとえば、ハッシュパーティション化された同じ表の様々なパーティションが様々なノード上にある場合や、パーティション化されていない単一の表の様々なROWID範囲が様々なノード上にある場合などがあります。

  • 一部のオブジェクトは、すべてのノード上のIM列ストア内に存在します。たとえば、productsディメンション表はすべてのノードに移入するが、salesファクト表のパーティションは様々なノードにわたり分散するなどです。

関連項目:

高可用性とIM列ストア

1.3.6 導入の容易性

Database In-Memoryは実装が単純であり、アプリケーション変更は必要になりません。

Database In-Memoryの導入の重要側面を次に示します。

  • デプロイの容易性

    ユーザーの管理によるデータ移行は必要ありません。データベースでは、ディスク上に行形式でデータが格納され、IM列ストアの移入時に、自動的に行データが列形式に変換されます。

  • 既存のアプリケーションとの互換性

    アプリケーションの変更は不要です。オプティマイザにより、自動的に列形式が利用されます。ご使用のアプリケーションで、データベースに接続してSQLを発行する場合、それにはDatabase In-Memoryの機能が役立ちます。

  • 完全なSQL互換性

    Database In-Memoryでは、SQLに関して制限はありません。分析問合せには、Oracleの分析機能を使用するか、カスタマイズされたPL/SQLコードを使用するかに関係なく、利点があります。

  • 使いやすさ

    複雑な設定は必要ありません。INMEMORY_SIZE初期化パラメータで、IM列ストアで使用するために予約するメモリーの量が指定されます。DDL文におけるINMEMORY句は、オブジェクトまたは列をIM列ストアに移入することを指定します。IM列ストアを構成すると、既存の分析ワークロードと非定型問合せのパフォーマンスがただちに向上します。

関連項目:

1.4 Database In-Memoryの前提条件

Oracle Database In-Memoryオプションは、すべてのDatabase In-Memory機能に必要となります。IM列ストアには、特別なハードウェアは必要ありません。

前提条件は、次のとおりです。

  • IM列ストアには、最小で100 MBのメモリーが必要となります。ストア・サイズは、MEMORY_TARGETに含まれています。

  • Oracle RACデータベースの場合、DUPLICATEおよびDUPLICATE ALLオプションには、Oracle Engineered Systemsが必要になります。

1.5 Database In-Memoryのための主要な作業

IM列ストアによる利益を得られる問合せの場合、必要なタスクは、IM列ストアのサイズの設定、および移入のためのオブジェクトの指定のみです。問合せの最適化および可用性の機能には、さらに構成が必要となります。

IM列ストアの構成のための主要な作業

次の表には、主要構成タスクが示されます。

表1-1 構成タスク

タスク ノート さらに学習するには

サイズを指定することで、IM列ストアを有効にします。

COMPATIBLE初期化パラメータは12.1.0以上に設定されている必要があります。

「データベースに対するIM列ストアの有効化」

IM列ストアに移入するための表(内部または外部)、列(非仮想列または仮想列)、表領域またはマテリアライズド・ビューを指定します。

INMEMORY句は、IM列ストアのオブジェクトを有効にしますが、即座に移入はしません。

「インメモリー移入に対するオブジェクトの有効化」

必要な場合は、自動データ最適化(ADO)ポリシーを作成して、IM列ストア内のオブジェクトに対してINMEMORY属性を設定します。

たとえば、ポリシーにより、10日間アクセスがなかった場合にIM列ストアからsales表を除去できます。インメモリーADO機能では、HEAT_MAP=ONONに設定し、INMEMORY_SIZEをゼロ以外の値に設定する必要があります。

IM列ストアに対するADOの有効化

オプションで、自動インメモリーを構成してコールド・セグメントを除去し、作業データ・セットが常に移入されるようにします。

たとえば、移入ジョブは表パーティションの半分のみロードします。IM列ストアがほぼ最大容量であるため、自動インメモリーがトリガーされてコールド・セグメントが除去されるためです。新しいパーティションの次の移入ジョブで、完全に移入されます。インメモリーADO機能では、AUTOMATIC_INMEMORY_LEVELLOWに、またはMEDIUMおよびINMEMORY_SIZEをゼロ以外の値に設定する必要があります。

自動インメモリーの構成

インメモリー問合せの最適化のための主要な作業

インメモリー問合せの最適化は、IM列ストアを機能させるために必要なわけではありません。次の最適化作業はオプションです。

表1-2 問合せ最適化タスク

タスク ノート さらに学習するには

DBMS_INMEMORY_ADMINパッケージを使用することで、IM列ストア内のIM式の自動検出を管理します。

たとえば、IME_CAPTURE_EXPRESSIONSプロシージャを呼び出して、データベースでのホットな式を特定できる期間を定義してから、それらを段階的に移入します。INMEMORY_EXPRESSIONS_USAGE初期化パラメータは、データベースでの移入可能なIM式のタイプ(静的、動的、またはそれら両方)を制御します。

INMEMORY_EXPRESSIONS_USAGE

CREATE INMEMORY JOIN GROUP文を使用して結合グループを定義します。

候補は、ファクト表およびディメンション表を結合する列など、結合述語で頻繁に組み合せられる列です。

結合グループの作成

問合せブロックに必要な場合は、VECTOR_TRANSFORMヒントを指定してインメモリー集計を有効にするか、NO_VECTOR_TRANSFORMで無効にします。

インメモリー集計は、初期化パラメータやDDLで制御できない、自動的に有効になる機能です。

「IM集計の制御」

初期化パラメータINMEMORY_TRICKLE_REPOPULATE_SERVERS_PERCENTを設定することで、2分間にトリクル再移入によって更新されるIMCUの数を制限します。

この初期化パラメータを0に設定すると、トリクル再移入を無効にできます。

「しきい値ベース再移入とトリクル再移入」

可用性管理のための主要作業

次の表に、主要タスクを示します。

表1-3 可用性タスク

タスク ノート さらに学習するには

DBMS_INMEMORY_ADMIN.ENABLE_FASTSTARTプロシージャを使用してインメモリー・ファスト・スタート(IMファスト・スタート)表領域を指定します。

IMファスト・スタートでは、データベースの再起動時にIM列ストアへのデータベース・オブジェクトの移入が最適化されます。IMファスト・スタートは、高速にIM列ストアの移入を行うために、ディスク上に情報を格納します。

IM列ストアに対するIMファスト・スタートの有効化

オブジェクトまたは表領域の場合は、DDL文でINMEMORYDISTRIBUTEまたはDUPLICATEキーワードとともに指定してOracle RACでのデータの分散を制御します。

デフォルトでは、各インメモリー・オブジェクトは、Oracle RACインスタンス間で分散され、IM列ストアのシェアード・ナッシング・アーキテクチャが効率的に使用されます。

Oracle RACでのIM列ストアのデプロイ

Oracle Data Guard環境では、プライマリまたはスタンバイ・データベース上で同じDatabase In-Memory初期化パラメータおよび文を使用できます。

たとえば、INMEMORY_SIZEを設定することで、プライマリおよびスタンバイ・データベースの両方で、IM列ストアを有効にできます。必要な場合は、DDLでINMEMORY DISTRIBUTE FOR SERVICE句を使用して、プライマリ・データベースおよびスタンバイ・データベース上でIM列ストアに異なるデータ・セットを移入します。

インメモリー移入について

1.6 IM列ストアのためのツール

IM列ストアまたはその他のDatabase In-Memory機能の管理には、特別なツールやユーティリティは必要ありません。SQL*Plus、SQL DeveloperおよびOracle Enterprise Manager (Enterprise Manager)などの管理ツールが十分にサポートされています。

この項では、特定のDatabase In-Memory機能でサポートされているツールについて説明します。

1.6.1 インメモリー・アドバイザ

インメモリー・アドバイザは、データベース内の分析処理ワークロードを分析する、ダウンロード可能なPL/SQLパッケージです。

インメモリー・アドバイザでは、SQL計画のカーディナリティ、アクティブ・セッション履歴(ASH)、パラレル問合せの使用、およびその他の統計に基づいて、分析処理が他のデータベース・アクティビティと区別されます。インメモリー・アドバイザでは、統計およびヒューリスティックな圧縮要因に基づいて、IM列ストア内のオブジェクトのサイズが推定されます。

アドバイザでは、次の内容に基づいて、分析処理のパフォーマンスの向上要因が推定されます。

  • ユーザーのI/Oの待機、クラスタの転送の待機、およびバッファ・キャッシュのラッチの待機などの待機イベントの推定

  • 特定の圧縮タイプに関連する、問合せ処理の利点

  • 特定の圧縮タイプに対する、解凍コストの経験則

  • SQL計画のカーディナリティ、結果セット内の列の数など

出力は、インメモリー移入による利益を得られる、IM列ストアのサイズ、およびオブジェクトのリストをお薦めするレポートです。アドバイザでは、推奨されたオブジェクトをINMEMORY句で変更するSQL*Plusスクリプトも生成されます。

インメモリー・アドバイザは、ストアドPL/SQLパッケージには含まれません。Oracle Supportからパッケージをダウンロードする必要があります。

関連項目:

インメモリー・アドバイザについてさらに学習するには、My Oracle Supportのノート1965343.1を参照

https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1965343.1

1.6.2 IM列ストア用のCloud Controlページ

Enterprise Manager Cloud Control (Cloud Control)では、インメモリー列ストア中央ホーム・ページが用意されています。このページでは、IM列ストアへのダッシュボード・インタフェースが提供されます。

このページを使用して、表、索引、パーティション、表領域などのデータベース・オブジェクトに対するインメモリー・サポートを監視します。オブジェクトに対するインメモリー機能を表示し、インメモリーの使用状況統計を監視できます。特に指定のないかぎり、このマニュアルでは、Database In-Memoryの機能へのコマンドライン・インタフェースについて説明します。

関連項目:

Cloud ControlでのIM列ストアの使用では、Cloud Controlを使用してIM列ストアを管理する方法について説明します。

1.6.3 Oracle Compression Advisor

Oracle Compression AdvisorではMEMCOMPRESS句を使用してユーザーが実感できる圧縮率を推定します。アドバイザはDBMS_COMPRESSIONインタフェースを使用します。

関連項目:

1.6.4 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ユーティリティ』を参照してください。