TUNE TABLE (SQL)
構文
TUNE TABLE tablename [ tune_options ]
説明
TUNE TABLE コマンドは、テーブル内の現在のデータに基づいて既存のテーブルの統計を収集します。このデータは、テーブルが完全に生成されたときに予想されるデータの代表である必要があります。
TUNE TABLE は、テーブルの BlockCount とエクステント・サイズ、およびそれぞれのフィールドの選択性を、代表的なデータに基づいて計算し、設定します。通常、TUNE TABLE はこれらの値を 1 つ以上設定し、これらの新しい値をクエリが使用するように、その永続クラス (テーブル) を使用するクエリ・キャッシュをすべて削除します。ただし、TUNE TABLE がこれらのいずれの値も変更しない場合 (TUNE TABLE がそのテーブルに対して最後に実行されてからデータが変更されていない場合など)、クエリ・キャッシュは削除されず、テーブルのクラス定義にリコンパイルのフラグは設定されません。
TUNE TABLE は、SQL テーブル定義を更新します (そのため、テーブル定義を変更する特権が必要です)。一般に、TUNE TABLE は対応する永続クラス定義も更新します。これにより、クラスのコンパイルを必要とせずに、クエリ・オプティマイザで収集された統計を使用することができます。ただし、クラスが導入済みの場合、TUNE TABLE は SQL テーブル定義のみを更新します。クエリ・オプティマイザは、収集した統計をテーブル定義から間接的に使用します。
成功した場合、TUNE TABLE は SQLCODE = 0 を設定します。指定した tablename が存在しない場合、TUNE TABLE は SQLCODE -30 エラーを発行します。
特権
TUNE TABLE コマンドは特権を必要とする操作です。TUNE TABLE を実行するには、ユーザは %ALTER_TABLE 管理特権を持っている必要があります。持っていない場合、SQLCODE –99 エラーが発生し、%msg が "ユーザ 'name' は %ALTER_TABLE 特権を持っていません" に設定されます。適切な付与特権を持っていれば、GRANT コマンドを使用して、ユーザまたはロールに %ALTER_TABLE 特権を割り当てることができます。管理特権はネームスペース固有のものです。詳細は、"特権" を参照してください。
ユーザは、指定されたテーブルに対する %ALTER 特権を持っている必要があります。ユーザがテーブルの所有者 (作成者) である場合、ユーザにはそのテーブルに対する %ALTER 特権が自動的に付与されます。そうでない場合は、ユーザにテーブルに対する %ALTER 特権を付与する必要があります。持っていない場合、SQLCODE –99 エラーが発生し、%msg が "ユーザ 'name' は操作に対する特権を持っていません" に設定されます。%CHECKPRIV コマンドを呼び出すことにより、現在のユーザが %ALTER 特権を持っているかどうかを確認できます。GRANT コマンドを使用して、指定したテーブルに %ALTER 特権を割り当てることができます。詳細は、"特権" を参照してください。
TUNE TABLE のオプション
-
%CLEAR_VALUES : 指定した場合、SELECTIVITY、EXTENTSIZE などの既存の値がクラス定義とテーブル定義からクリアされます。このオプションを指定しない場合、既定のテーブル・チューニング動作が提供されます。
-
%SAMPLE_PERCENT percentage : テーブルのチューニング・ユーティリティでデータのサンプリングに使用されるテーブルの行の割合を指定します。この percentage は、'.##' または '##%' として指定できます。例えば、'.12' または '12%' を指定すると、このコマンドは、データをサンプリングするときにテーブル内の行の 12% を使用します。0 より大きく、100% 以下の値を使用して percentage を指定してください。この範囲外の値を指定すると、SQLCODE -1 エラーが発行されます。
通常、この値を指定する必要はありません。この値は、フィールドの潜在的な異常値がテーブル全体の行に均等に分散していない場合にのみ指定します。エクステント・サイズが 1000 行未満のテーブルについては、%SAMPLE_PERCENT の値に関係なく、エクステント全体がテーブルのチューニングで使用されます。
-
%RECOMPILE_CQ : 指定した場合、チューニングされたテーブルについて単にクエリ・キャッシュを削除するのではなく、テーブルのチューニングは、新しいテーブル・チューニング統計を使用してクエリ・キャッシュ・クラスをリコンパイルします。このオプションを指定しない場合、既定のテーブル・チューニング動作が提供されます。
指定した tune_options 値が存在しない場合、TUNE TABLE は SQLCODE -25 エラーを発行します。同じ tune_options 値を 2 回指定した場合、TUNE TABLE は SQLCODE -326 エラーを発行します。
クエリ・キャッシュ
TUNE TABLE を実行すると、クエリ・キャッシュが作成されます。[プラン表示] の表示は、クエリ・プランが作成されないことを示します。SQL 文は作成されません。クエリ・キャッシュはネームスペースに対して一般的です。特定のテーブルについてはリストされません。クエリ・キャッシュを使用して、同じ TUNE TABLE 文を再実行できます。
TUNE TABLE を実行すると、TUNE TABLE の前回の実行のクエリ・キャッシュを含め、指定したテーブルの既存のクエリ・キャッシュがすべて削除されます。オプションで、TUNE TABLE が新しいテーブル・チューニング値を使用してこれらのクエリ・キャッシュすべてをリコンパイルするように指定することもできます。
TUNE TABLE を実行してもテーブル・チューニング値が変更されない場合、クエリ・キャッシュは削除されません。
他の方法によるテーブル・チューニングの実行
テーブル・チューニングを実行するためのインタフェースが他にも 2 つあります。
-
管理ポータルの SQL インタフェースの [アクション] ドロップダウン・リストを使用します。テーブルのチューニングを 1 つのテーブルに対して実行することもスキーマ内のすべてのテーブルに対して実行することもできます。
-
1 つのテーブル、または現在のネームスペース内のすべてのテーブルに対して、$SYSTEM.SQL.Stats.Table.GatherTableStats()Opens in a new tab メソッドを呼び出します。
詳細は、"テーブルのチューニング" を参照してください。
引数
tablename
統計を収集する既存のテーブルの名前。テーブル名は修飾 (schema.table)、未修飾 (table) のどちらでもかまいません。テーブル名が未修飾の場合は、既定のスキーマ名が使用されます。
tune_options
指定する場合、1 つまたは複数の TUNE TABLE オプションをスペースで区切って任意の順序で指定します。これらの tune_options は、大文字と小文字を区別しません。
例
以下の例では、Sample.MyTest table の 30% をサンプリングすることにより、テーブル統計を収集します。
TUNE TABLE Sample.MyTest %SAMPLE_PERCENT '30%'
以下の例では、テーブル統計を収集し、新たに収集された統計に基づいてクエリ・キャッシュ・クラスをリコンパイルします。
TUNE TABLE Sample.MyTest %RECOMPILE_CQ
以下の例では、テーブルの 40% のサンプルからテーブル統計を収集します。
TUNE TABLE Sample.MyTest %SAMPLE_PERCENT '40%'