カラム統計の自動取得と統計/索引アドバイザー

V5R2 の SQE と呼ばれる新しいデータベースエンジンから、カラムの統計データを参照するようになりました。

もともと DB2/400 の場合、DSPFD/DSPFFD コマンドなどで見ることができるように、テーブルというオブジェクト (OS から見て、一般的な「ファイル」ではなく、「カラム」や「データ件数」、「どんなインデックスがついているか」などといった「属性」をもち、テーブルとして相応しい「手続き」しか許されない「テーブル(物理ファイル)」という「オブジェクト」になっているわけです。これってかなり凄いことですよ) に一般的なデータベースで言う「統計」のようなものは持っているわけです。
ただし、個別のカラムについての偏りなどについての統計データは、明らかにわかるようなかたちでは持っていませんでした。

V5R2 でデータベースエンジンをまったく新しい設計 (オブジェクト指向!!) のものを登場させるにあたって、キーや選択、グルーピングで選択に使われるカラムについてキー値の分布や件数についての統計データを参照してオプティマイザーの予測の精度をより上げるようにしました。
この統計データはやはり「テーブル (物理ファイル)の属性として格納されます。

もちろん、選択にほとんど使われることのないカラムの統計データを取ってもしかたないですよね。
そこで、SQL でアクセスされる時にデータベースエンジンが統計データを必要だと判断したカラムについては自動的に取得することにするようになっています。
また、それに伴って、索引 (インデックス) を作成してあればより効率のよいやり方でデータアクセスができるものには、それをアドバイスする「索引アドバイザー」というものもサポートされるようになりました。

もちろん「統計アドバイザー」もあわせてあります。
統計データの取得されるのは、そのカラムを選択するためにアクセスする SQL が実行された時にバックグラウンドで「統計をとっておく」という指令がだされて、なので、SQL を解析するオプティマイザーにとって常に最新であるとは限りません。
また、わかっていれば、システムに見つけてもらう前にユーザーが手動で統計を取ることを決め、最新にしておいてもいいわけです。そのために iSeries ナビゲーターには「テーブル」オブジェクトについて表示できる属性として「統計データ」という項目を追加し、その中でそうしたことを可能しているわけです。

統計データは統計マネージャーというコンポーネントで維持されています。


以下の SQL を例にして見てみましょう。 (こちらで紹介した自習用資料からのものです)
今回は V5R3 のマシンで実行しているので、V5R2 のマシンではおそらく結果が違ってくると思いますが、まさしくそれが V5R3 のデータベースエンジンの「進化」なのですね。

SELECT year, month, supplier, orderkey, quantity, revenue_wo_tax
FROM item_fact i, supp_dim s
WHERE i.suppkey = s.suppkey
AND quantity = 2
AND supplier = 'Supplier#000000010'
ORDER BY year, month, orderkey;

この SQL でアクセスされる ITEM_FACT と SUPP_DIM というテーブルについて、iSeries ナビゲーターの「データベース」から、たどっていくと「テーブル」というペインで表示されるそれぞれの「統計データ」を見てみましょう。
SQL の実行前は、以下のように空になっています。

これを「SQL スクリプトの実行」で、実行するか、EXPLAIN (実行つきでもそうでなくても) してみます。

もう一度、それぞれのテーブルの「統計データ」を見てみましょう。

もうすでにキーと選択に使われたカラムの統計は自動的に取得されています。

Visual Explain で「索引アドバイザー」と「統計アドバイザー」という機能があります。
「アクション」メニューから「アドバイザー」を選択します。

こんな画面が出てきます。

こちらのタブが「索引アドバイザー」で、以下の三つの索引が薦められているわけですね。

右下に「作成」ボタンがあります。

これを押すと、以下のような索引の作成画面が出てきます。

統計アドバイザー」はこんな画面です。
テストした限りではもうすでに自動で統計は取られている状態でしたが、仕様が変わるかもしれませんし、統計自体ほとんど負荷のかかるものではありませんし、そういう意味では処理がダブってもほとんど影響はないのでこのお勧めには乗って、左にチェックを入れてしまっていいでしょう。

[Top Pageに戻る]

Ads by TOK2