パーティションのストレージ モードおよび処理
パーティションのストレージ モードは、クエリと処理のパフォーマンス、ストレージの要件、パーティションおよびその親メジャー グループと親キューブのストレージ場所に影響します。 また、ストレージ モードの選択内容は、処理の選択内容にも影響します。
パーティションでは、次の 3 つの基本的なストレージ モードのうちいずれかを使用できます。
多次元 OLAP (MOLAP)
リレーショナル OLAP (ROLAP)
ハイブリッド OLAP (HOLAP)
Microsoft SQL Server Analysis Services では、3 つの基本的なストレージ モードがすべてサポートされています。 また、ROLAP ストレージと MOLAP ストレージの特性を組み合わせてデータの即時性とクエリのパフォーマンスを向上させることができるプロアクティブ キャッシュもサポートされています。 詳細については、「 プロアクティブ キャッシュ (パーティション)」を参照してください。
[MOLAP]
MOLAP ストレージ モードでは、パーティションの集計とそのソース データのコピーが、パーティションの処理時に Analysis Services の多次元構造に格納されます。 この MOLAP 構造は、クエリのパフォーマンスを最大限に高めるために高度に最適化されています。 保存場所は、パーティションが定義されているコンピューター上、または Analysis Services を実行している別のコンピューター上に置くことができます。 ソース データのコピーは多次元構造に存在するため、パーティションのソース データにアクセスしないでクエリを解決できます。 集計を使用すればクエリの応答時間を大幅に削減できます。 パーティションの MOLAP 構造の現在のデータは、最新のパーティションの処理によって決まります。
ソース データの変更に伴い、MOLAP ストレージ内のオブジェクトを定期的に処理して、その変更内容を組み込み、ユーザーが使用できるようにする必要があります。 処理することで、MOLAP 構造のデータは完全または段階的に更新されます。 ある処理から次の処理までの間に待機時間が発生し、その間は OLAP オブジェクトのデータがソース データと一致しない場合があります。 MOLAP ストレージのオブジェクトは、パーティションまたはキューブをオフラインにすることなく、段階的または完全に更新できます。 ただし、キューブをオフラインにして、OLAP オブジェクトへの特定の構造の変更を処理する必要がある場合があります。 MOLAP ストレージの更新に必要なダウンタイムを最小限に抑えるには、ステージング サーバーでキューブの更新と処理を行い、データベースの同期化を使用して、処理したオブジェクトを実稼働サーバーにコピーします。 また、プロアクティブ キャッシュを使用して、MOLAP ストレージのパフォーマンス面の利点を維持しながら、待機時間を最小限に抑えて可用性を最大限に高めることもできます。 詳細については、「 プロアクティブ キャッシュ (パーティション)」、 Analysis Services データベースの同期、および 多次元モデル オブジェクト処理に関するページを参照してください。
[ROLAP]
ROLAP ストレージ モードでは、パーティションの集計はパーティションのデータ ソース内で指定されたリレーショナル データベースのインデックス付きビューに格納されます。 MOLAP ストレージ モードとは異なり、ROLAP では、ソース データのコピーが Analysis Services データ フォルダーに格納されることはありません。 代わりに、クエリ キャッシュから結果を取得できない場合は、クエリに応答するためにデータ ソースのインデックス付きビューへのアクセスが行われます。 通常、ROLAP ストレージ モードでは、MOLAP または HOLAP ストレージ モードよりもクエリ応答が遅くなります。 一般的に処理時間も遅くなります。 しかし、ROLAP によってユーザーはリアルタイムでデータを表示し、履歴だけのデータなど、クエリの頻度が低い大きなデータセットを使用して作業するときにストレージ領域を節約することができます。
注意
ROLAP を使用する場合、結合が GROUP BY 句と組み合わされた場合、Analysis Services は不明なメンバーに関連する正しくない情報を返す可能性があります。 Analysis Services は、不明なメンバー値を返す代わりに、リレーショナル整合性エラーを排除します。
パーティションで ROLAP ストレージ モードが使用され、そのソース データが SQL Server データベース エンジンに格納されている場合、Analysis Services はパーティションの集計を含むインデックス付きビューの作成を試みます。 Analysis Services でインデックス付きビューを作成できない場合、集計テーブルは作成されません。 Analysis Services は、SQL Server データベース エンジンでインデックス付きビューを作成するためのセッション要件を処理しますが、Analysis Services が集計用のインデックス付きビューを作成するには、ROLAP パーティションとそのスキーマ内のテーブルで次の条件を満たす必要があります。
パーティションには、
Min
またはMax
集計関数を使用するメジャーを含めることはできません。ROLAP パーティションのスキーマ内の各テーブルは、一度しか使用できません。 たとえば、スキーマに [dbo].[address] AS "Customer Address" と [dbo].[address] AS "SalesRep Address" を含めることはできません。
各テーブルは、ビューではなく、テーブルでなければなりません。
パーティションのスキーマ内のすべてのテーブル名は、[dbo].[customer] のように、所有者名で修飾する必要があります。
パーティションのスキーマ内のすべてのテーブルの所有者が同じである必要があります。たとえば、テーブル [tk].[customer]、[john].[store]、および [dave].[sales_fact_2004] を参照する FROM 句は指定できません。
パーティションのメジャーのソース列に NULL 値は許可できません。
ビューに使用されるすべてのテーブルは、次のオプションを ON に設定して作成する必要があります。
ANSI_NULLS
QUOTED_IDENTIFIER
SQL Server データベース エンジンのインデックス キーの合計サイズは、900 バイトを超えることはできません。 SQL Serverデータベース エンジンは、CREATE INDEX ステートメントが処理されるときに、固定長キー列に基づいてこの条件をアサートします。 ただし、インデックス キーに可変長列がある場合、データベース エンジンSQL Serverベース テーブルに対する更新ごとにこの条件もアサートされます。 ビュー定義は集計ごとに異なるため、インデックス付きビューを使用する ROLAP 処理の成否は、集計デザインによって決まります。
インデックス付きビューを作成するセッションでは、ARITHABORT、CONCAT_NULL_YEILDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING、および ANSI_WARNING オプションを ON に設定する必要があります。 この設定は、SQL Server Management Studioで行うことができます。
インデックス付きビューを作成するセッションでは、NUMERIC_ROUNDABORT オプションを OFF に設定する必要があります。 この設定は、SQL Server Management Studioで行うことができます。
HOLAP
HOLAP ストレージ モードは、MOLAP と ROLAP の属性を組み合わせたものです。 MOLAP と同様に、HOLAP を使用すると、パーティションの集計がSQL Server Analysis Services インスタンスの多次元構造に格納されます。 ソース データのコピーは格納されません。 パーティションの集計に含まれる要約データにのみアクセスするクエリの場合、HOLAP の応答時間は MOLAP と同程度です。 たとえば、集計データがないアトミック キューブ セルにドリルダウンする場合など、ソース データにアクセスするクエリは、リレーショナル データベースからデータを取得する必要があり、ソース データが MOLAP 構造に格納されている場合ほど高速ではありません。 HOLAP ストレージ モードでは通常、クエリがキャッシュまたは集計から解決されたか、またはソース データ自体から解決されたかに応じてクエリ時間に大きな差が生じます。
HOLAP として格納されたパーティションのサイズは、ソース データを含まないため、同程度の MOLAP パーティションより小さく、要約データにアクセスするクエリの応答時間は ROLAP パーティションより高速です。 一般的に、要約データが大量のソース データで構成され、クエリに高速な応答が要求されるキューブのパーティションには、HOLAP ストレージ モードが適しています。 ただし、中央値の計算のようにリーフ レベル データを処理する必要のあるクエリをユーザーが生成する場合は、MOLAP の方が適しています。
参照
プロアクティブ キャッシュ (パーティション)
Analysis Services データベースの同期
パーティション (Analysis Services - 多次元データ)