フラット キューブ適用による SAP BW のパフォーマンス向上

執筆者: Martin Merdes

このポストは、2018 年 1 月 4 日に投稿された Improve SAP BW Performance by Applying the Flat Cube の翻訳です。

 

概要

2 年ほど前に、SAPは列ストアに最適化されたフラット キューブをリリースしました。今回の記事では、フラット キューブを適用するメリットを簡単にご紹介します。多くのお客様にお役立ていただけますと幸いです。

フラット キューブには、BW のクエリ パフォーマンスの向上やキューブへのデータ転送プロセス (DTP) の高速化など、さまざまなメリットがあります。また、改良された BW のクエリ ジェネレーター (FEMS プッシュダウン) を使用する際の必須条件となっています。フラット キューブを使用する前に、各キューブをフラット キューブに変換しておく必要があります。ここでは、新しい RSDU_IC_STARFLAT_MASSCONV レポートを使用して、すべてのキューブをすばやく変換する方法をご紹介します。このレポートは、以下の SAP Note の修正指示で取得可能です。

フラット キューブのメリット

フラット キューブの概要については、こちらのブログ記事 (英語) でお読みいただけます。SQL Server のフラット キューブは、BW on HANA でこれまで利用されてきたテーブル設計と同じものを使用します。フラット キューブには、以下のようなメリットがあります。

  • 高速の DTP
    フラット キューブにはディメンション テーブルが含まれないため、DTP スピードが非常に速くなります。キューブへのデータロード時に、時間のかかる DIMID 生成を行う必要がありません。フラットキューブではBW キューブの圧縮処理が非常に速く、ほとんどの場合、処理自体も不要となります。ただし、在庫キューブの場合は BW キューブの圧縮処理を行うすることをお勧めします。
  • BW のクエリ パフォーマンス
    フラット キューブでは BW のクエリ パフォーマンスがはるかに改善します。ファクト テーブルは 1 つのみで、ほとんどすべての次元テーブルがなくなるため、 (P ディメンションを除く)、ファクト テーブルに次元 テーブルを結合する必要がなく、シンプルな SQL クエリを生成することができます。以下のブログ記事では、標準的なパフォーマンス値を確認することができます。
    https://blogs.msdn.microsoft.com/saponsqlserver/2017/05/08/performance-evolution-of-sap-bw-on-sql-server (英語)
  • FEMS プッシュダウン
    複雑な BW クエリを高速化する FEMS プッシュダウンのためには、フラット キューブが必須の条件です。詳しくは以下の記事を参照してください。
    https://blogs.msdn.microsoft.com/saponsqlserver/2017/06/30/customer-experience-with-sap-bw-fems-pushdown (英語)
  • 集約が不要
    基本的に集約を行う必要がないため、フラット キューブには BW 集約を作成する機能自体がありません。特定のキューブで集約が必要な場合、非フラット キューブ構造に戻す必要があります。

前提条件

フラット キューブは SQL Server 2014 以降のバージョンに対応していますが、SQL Server 2016 以降での使用を推奨します。詳しくは以下の SAP Note を参照してください。

BW マルチプロバイダのキューブは、個別にフラット キューブ設計に変換することができます。フラット キューブ設計では、意味的に分割されたオブジェクト (SPO) を作成することができますが、現時点では SPO をフラット キューブ設計に変換する変換レポートはありません。変換レポートがリリースされるまでは、フラット キューブとして新規に SPO を作成して、DTP を使用して古い SPO からデータを転送する必要があります。

以前は、リアルタイム キューブにはフラット キューブ設計を使用することはできませんでしたが、現在、この問題は修正されています。

フラット キューブへの変換

SAP では、非フラット キューブからフラット キューブへの変換とその逆方向の変換に、再分割フレームワークを使用します。ここでは、フラット キューブへの変換を説明します (おそらくこの方向の変換だけで十分です。)。

インデックスを作成したりデータをコピーしたりするだけでは、フラット キューブに変換することはできません。条件によっては、フラット キューブへの変換中に元の E ファクト テーブルの行が圧縮される場合があります。このため、フラット キューブのファクト テーブルの行数が、元の F ファクト テーブルと E ファクト テーブルの合計行数よりも少なくなることがあります。

フラット キューブの P ディメンション内の DIMID 0、1、2 は、特別に予約されており、あらかじめデータベースを分割 (4 分割) して、パフォーマンスを最適化することができます。初めて圧縮するキューブには DIMID 2 を使用します。この際、フラット キューブ変換の前提条件チェックでエラーが発生します。変換前に、特定の BW 要求 (DIMID 2 の特定の要求番号) を圧縮するように求められます。

フラット キューブでは、トランザクション履歴の在庫キューブへの読み込みを最適化するアプローチが使用されています (在庫管理の詳細についてはこちらのドキュメント (英語) を参照)。変換前に、トランザクション履歴などのすべての BW 要求について BW キューブ圧縮を実行する必要があります。

SAP レポート RSDU_REPART_UI は、フラット キューブへの変換用に拡張されています。

[Non-Flat to Flat] を選択してからキューブ名を入力し、[Initialize] をクリックします。変換前に、データベース全体のバックアップを実行することを確認するポップアップ ウィンドウが表示されます。

次の画面では、バッチ ジョブをスケジュールします。変換処理はバッチ ジョブとして実行されます (ジョブ名: RSDU_IC_FLATCUBE/<キューブ名>)。RSDU_REPART_UI は、バッチ ジョブのスケジュールと監視のみに使用されます。RSDU_REPART_UI 自体はバッチ ジョブとして設定しないでください。

フラット キューブ変換では、大量のトランザクション ログを記録する容量が必要になります。このため、SQL Server のトランザクション ログのサイズを増やし、ログのバックアップ頻度を上げる必要があります。トランザクション ログのサイズを抑えるために、キューブはチャンク単位でコピーされ (F ファクト テーブルの個々の要求と E ファクト テーブルの各回の DIMID は、別にコピーされます)、各チャンクは、RFC で並列処理されます。既定では、同時に処理できるチャンクは 3 つまでですが、RSADMIN パラメーターの RSDU_REPART_PARALLEL_DEGREE でチャンクの並列実行数を増やして、処理を高速化することも可能です。ただし、このパラメーターは RSADMIN パラメーターの QUERY_MAX_WP_DIAG により上書きされます (明示的に設定されている場合)。

RSDU_REPART_UI で [Monitor] をクリックすると、変換の進捗状況を追跡することができます。処理が失敗した場合の対応については、この後の「失敗した変換のトラブルシューティング」のセクションを参照してください。

フラット キューブの大量変換

先日、SAP は RSDU_IC_STARFLAT_MASSCONV レポートをリリースしました (必要なコード変更については「SAP Note 2116639 – SQL Server Columnstore documentation) 」をご確認ください)。このレポートでは、大量の BW キューブの一括変換をスケジュールすることができます。初めて RSDU_IC_STARFLAT_MASSCONV レポートを実行する際には、[Generate Work List] をクリックして、すべての非フラット キューブの情報を収集するバッチ ジョブを開始します。[Refresh Display of Work List] をクリックすると、非フラット キューブは 3 つのタブのいずれかに表示されます。

1 つ目のタブには変換できないキューブが表示されます。これらは、この時点でフラット キューブへの変換条件を満たしていないものです。必要な条件をすべて満たしたら、作業リストのバッチ ジョブを再実行する必要があります。

2 つ目のタブでは、変換するキューブを選択することができます。[Start] アイコンをクリックすると、SAP のバッチ ジョブのスケジュール ウィンドウが表示されるので、最初のキューブ変換の開始時刻を指定します。選択した他のキューブの変換スケジュールはこれに連動しており、1 つのバッチ ジョブが完了したら、次のバッチ ジョブが開始するように設定されます。

このバッチ スケジュール設定では、同時に変換できるキューブは 3 つに制限されています。この数は、メイン画面の RSDU_IC_STARFLAT_MASSCONV で変更することができます。さらに、同時に変換できる行数も制限されています。これは、ワークロードを抑制してデータベース ログがいっぱいにならないようにするための措置です (「単純」復旧モデルで実行する場合)。

運用システムには、「完全」または「一括ログ」の SQL Server 復旧モデルを推奨しています。その場合、キューブ変換のトランザクション ログのサイズを増やし、トランザクション ログのバックアップ頻度を上げておきます。これにより、変換が逐次処理か並列処理かにかかわらず、トランザクション ログがいっぱいになるのを防ぐことができます。念のため、特に大規模なキューブの変換は個別に行うことをお勧めします。変換を開始する直前に、トランザクション ログのバックアップを実行してください。

RSDU_IC_STARFLAT_MASSCONV の 3 つ目のタブには、キューブ変換のジョブがすべて (スケジュール済み、実行中、失敗など) 表示されます。ジョブを選択すると、変換ログ画面 (RSDU_REPART_UI の監視画面と同様) に移動します。

失敗した変換のトラブルシューティング

フラット キューブへの変換は、いくつかのステップで進められます。このステップは、RSDU_REPART_UI レポートの監視画面で見ることができます。コード変換の最初のステップで cube conversion lock をかけ、さらに、SET_READ_LOCK のステップでは read lock をかけます。SET_READ_LOCK が実行されるまでは、元のキューブのデータや構造は変更されません。

SET_READ_LOCK のステップ開始前に変換が失敗しも特に問題はありません。cube conversion lock を解除するだけで、元のキューブとして使用することができます。RSDU_REPART_UI レポートで [UNLOCK] ボタンをクリックすると、ロック (read lock および cube conversion lock) を解除することができます (「SAP Note 2580730 – Unlock failed Flat Cube Conversion」を参照してください)。

以下の例では、COPY_TO_SHD_EFACT のステップで Conversion to Flat が失敗しています。このステップをクリックすると、トランザクション ログがいっぱいであるという意味の SQL エラー 9002 を確認することができます。対応としては、まずトランザクション ログのバックアップを実行します。

RSDU_REPART_UI レポートでは、以下の 2 回のクリックで変換処理を再開することができます。

  1. 「Conversion to Flat」のステップをクリックして選択します。
  2. [Restart Request] ボタンをクリックします。
    バッチ ジョブのスケジュール設定を行うポップアップ ウィンドウが表示されます。

RSDU_IC_STARFLAT_MASSCONV レポートでは、失敗した要求を個別に再開する必要があります。大量変換を再開する機能は、新しいバージョンのレポートに実装される予定です。現時点で RSDU_IC_STARFLAT_MASSCONV を使用する場合は、トランザクション ログのサイズとバックアップを考慮する必要があります

 

まとめ

フラット キューブを適用することで、SAP BW のパフォーマンスが向上します。単一のキューブ変換には RSDU_REPART_UI レポート、複数キューブの一括変換には RSDU_IC_STARFLAT_MASSCONV レポートを使用することができます。現在、変換に対応していない SPO キューブと、状況によってフラット キューブへの変換メリットが大きく異なるリアルタイム キューブの 2 種類を除き、すべてのキューブをフラット キューブに変換することをお勧めします。