マテリアライズ照会表(MQT) (ついでに DB2 for z との互換性)

「マテリアライズ照会表」という機能が i5/OS V5R3 からサポートされるようになりました。

基本的な機能や、特にどういう時に役に立つのか、といったようなことはまだまとめきれていないので、またそのうちに、と思っています。
この機能自体は 他プラットフォームの DB2 の最新バージョンでもサポートされている機能です。たとえばこちらののような DB2 for z/OS の記事の中に簡単なこの機能についての紹介があったりしますし、もちろん同一の機能なので理解の一助とすることができるでしょう。(DB2/400 ではわざわざそんなことをしなくてもいい「余計なこと」が書いてあったりしますのであくまで「一助」ということになりますね。かえって混乱してしまうと問題ですね ...... [と書いたのですが、2007年5月現在上記の DB2 for z/OS n MQT に関する記事は該当リンクにありません。どこにあるのかはもう探せない状態です。こうしてせっかく世に出た情報の糸口が切れていってしまっているわけなのですが、IBM のサイト管理者っていうのは何を考えているんでしょうねぇ ...... DB2 の知識なんか別にインターネットを見るような人には知っていてもらわなくてもいい、と、そんなかんじなんでしょうか ....... ])

今回、上の記事での紹介例 (DB2 for z/OS での作成です) をそのまま実行してみることで DB2 間で互換性のある機能だということを見ると同時に、まずはどうやって作るか、作ってみることで「あー、こういうかんじの機能なんだ」ということがわかればいいかな、と思ってこれを書いてみました。


実行例

まず最初に対話型 SQL での実行画面で見ていきましょう。

DB2 for z/OS での紹介例が DB2 の "SAMPLE" データベースを元にしていますので、まずそれを作成します。
作成の仕方はこちらを見てみてください。

「データウェアハウス環境には特に便利なMQTは、共通副照会の事前計算済みのマテリアライズ結果を格納する機能を提供します。これらの結果は、基礎表の代わりに、または組み合わせて使用して、アクセス時間を改善できます。

「マテリアライズ」について理解するために、次の簡単な例を考えて見ます。この例では、ビューを作成して先頭行のフェッチを1回行います。」

とあるのをまず実行してみたのが以下の画面ショットです。

「WORKDEPTに対する索引があると仮定して、SAL1ビューからは、カーソル位置からの1回のフェッチによって、1行が読み取られて返されます。

2番目のビューSAL2を使用する場合、先頭行を取得するにはSUM列関数とGROUP BY文節には、完全な結果セットが作成されることが必要です。」

「バージョン8 (DB2 for z/OS のこと) では、次のような定義を使用して、SAL2ビューをMQTとして定義できます。

SAL2ビューなどの照会用に結果セットを作成するために、DB2は基礎表からデータを読み取る代わりにMQTを使用することを選ぶ場合があります。」

SAL2 というビューに指定されているのとまったく同じ SELECT 文が MATEMP に対しても指定されているのがわかります。
つまり SAL2 を使用してデータを取得する時に、オプティマイザーは MQT を暗黙に使用することがある、ということを言っています。

「通常のINSERT、UPDATE、およびDELETE操作を通して基礎表が変更されても、MQTデータは自動的には更新されません。MQTデータを更新するには、REFRESH TABLEステートメントを使用する必要があります。」

MQT は作成しただけではデータを見ることができません。
作成したばかりの MQT に対して SELECT すると、データがありません、と返ってきます。

REFRESH TABLE 文を使うとデータが入ってくるようになっています。

GUI インターフェイス

iSeries ナビゲーターで新しく追加されたマテリアライズ照会表を作成するための GUI インターフェイスもあります。

上のようにメニュー項目をたどって「マテリアライズ照会表」を選択すると、以下のような画面になります。

「マテリアライズ照会」タブで「マテリアライズ」させたい「照会」を定義します。

「SQL アシスト」でウィザードというか F4 プロンプトでのように SQL を組み立てる、また直に「完全選択ステートメント」に SQL を入力して「構文の検査」でチェックする、「結果のプレビュー」で一度結果を見てみる、などいろいろな機能があります。

「照会最適化を使用可能にする」は "ENABLE QUERY OPTIMIZATION" (上の対話型 SQL の例ではデフォルトのため省略されています)、

作成されたマテリアライズ照会表は「テーブル」ビューの中ではちょっとだけアイコンのデザインが違います。

その他

ファイル記述を見てみると、「SQL ファイル・タイプ」という属性があって、そのタイプとして「MATERIALIZED QUERY TABLE」となっています。

「MATERIALIZED QUERY TABLE」の項には、作成時に指定した SELECT 文等が記述されています。
たとえば「保守者 ユーザー」というのは"MAINTAINED BY USER"の指定ですし、「QUERY 最適化が使用可能」は"ENABLE QUERY OPTIMIZATION"の指定を反映しています。

実際に最初に紹介した DB2 for z/OS のマテリアライズ照会表についての記事のような、パフォーマンスに関係する記述については Information Center の Materialized query table optimization に載っています。(現在翻訳が間に合っていないようで、英語版にしか記述がありません)

また、マテリアライズ照会表のサポートに伴って QAQQINI に以下の二つのオプションが増えています。

MATERIALIZED_QUERY_TABLE_USAGE
MATERIALIZED_QUERY_TABLE_REFRESH_AGE

それぞれの詳しい説明は Information Center の QAQQINI の該当部分を見てください。(こちらも現在翻訳が間に合っていないようで、英語版にしかありません)

とりあえずV5R3 の現時点では、オプティマイザーは少なくとも以下の条件が揃っていない限りは MQT を考慮して SQL の実行を最適化することはありません。

[Top Pageに戻る]

Ads by TOK2