ttOptEstimateStats

ttOptEstimateStatsプロシージャは、指定した表の統計を更新します。このプロシージャは、指定した表内の行をランダムにサンプリングすることによって統計を推定します。サンプルのサイズは、指定した行の数(sampleStrの形式が'n ROWS'の場合)または、行の総数の割合(sampleStrの形式が'p PERCENT'の場合)です。

tblNameが指定されていない場合、このプロシージャは現在のユーザーが所有するすべての表に対して処理されます。ユーザーがインスタンス管理者である場合、インスタンス管理者が所有する表のみが更新されます。表がユーザーによって所有されていない場合、ユーザーは自分のユーザー名で表名を修飾して、現在のユーザーの統計を更新できます。

統計が更新されたかどうかを判断するには、この操作を実行する前と後で、システム表SYS.COL_STATSおよびSYS.TBL_STATSを確認します。

必要な権限

ユーザーが表の所有者である場合またはtblNameが指定されていない場合、このプロシージャに権限は不要です。ユーザーが表の所有者でない場合、このプロシージャにはALTER ANY TABLE権限が必要です。

TimesTen ScaleoutおよびTimesTen Classicでの使用

このプロシージャは、TimesTen Classicでサポートされています。

TimesTen Scaleoutアプリケーションでこの組込みプロシージャをコールできます。

TimesTen Scaleoutでは、このプロシージャはグリッド内のすべての要素に対して実行されます。

関連ビュー

このプロシージャには、次の関連ビューがあります。

SYS.GV$OPT_COL_STATS

SYS.V$OPT_COL_STATS

構文

ttOptEstimateStats(['tblName'], [invalidate], 'sampleStr')

パラメータ

ttOptEstimateStatsには、次のパラメータがあります。

パラメータ 説明

tblName

TT_CHAR(61)

アプリケーション表の名前。表の所有者を含めることができます。tblNameが空の文字列の場合、データベース内の現在のユーザーが所有するすべての表で統計が推定されます。

表名の指定にシノニムは使用できません。

invalidate

TT_INTEGER

0 (no)または1 (yes)。invalidateが1の場合、他のユーザーが準備したコマンドを含む、影響を受ける表を参照するすべてのコマンドは、再実行時に自動的に再準備されます。invalidateが0の場合、統計は変更されたとはみなされず、既存のコマンドは再準備されません。

invalidateパラメータはオプションで、デフォルトは0です。

sampleStr

TT_VARCHAR(255) NOT NULL

n ROWSという形式の文字列(nは0 (ゼロ)より大きい整数)、またはp PERCENTという形式の文字列(pは0.0から100.0の間の浮動小数点)。

結果セット

ttOptEstimateStatsは結果を返しません。

CALL ttOptEstimateStats ( 'ACCTS', 1, '5 PERCENT' );

CALL ttOptEstimateStats ( 'ACCTS', 1, '75 ROWS' );

ノート

  • TimesTenの統計には、各表の行数、各列の一意の値の数、各列の最大値および最小値が含まれます。TimesTenでは、列の値の配分は均一であると想定しています。

  • このプロシージャは、表の行の50%より少ないサンプルで実行した場合にのみ、ttOptUpdateStatsよりも高速で実行されます。

  • 2,048バイトを超える列の場合、推定は行われず、これらの列の統計は更新されません。2,048バイトを超える列の統計を更新するには、ttOptUpdateStats組込みプロシージャを使用します。可変長列の場合、このプロシージャによって更新されるのは、列の最大長が2,048バイト以下である場合の統計のみです。

  • sampleStrパラメータに非常に小さな値を選択した場合、このプロシージャは高速に実行されますが、実行計画は最適にはならない可能性があります。計画の正確性を低下させることなく、統計の計算を高速に実行し、適切なデータ分布を得るには、10%程度の選択が適しています。指定した行の数が大きいか、または対象となる表が小さい場合、TimesTenはパフォーマンスを向上させるために、長さが2,048バイト以下のすべての列に対して、正確な統計を計算します。たとえば、次の2つの相違点として、

    ttOptEstimateStats ('ACCTS', 1, '100 PERCENT' )

    および

    ttOptUpdateStats( 'ACCTS', 1 )

    前者が長い列の統計を計算しないということのみです。

  • 統計は、システム表TBL_STATSおよびCOL_STATSに格納されます。

  • パフォーマンス上の理由から、ttOptEstimateStatsでは、統計が計算される際に表または行のロックは保持されません。ただし、TimesTenシステム表に対するロックは保持されます。統計の計算をそのように行った場合でも、パフォーマンスが低下する可能性があります。統計は、正確に計算するよりも推定した方が一般にパフォーマンスは向上します。

  • システム表を更新する権限がある場合、空の表リストを指定して統計を見積もり、または更新すると、システム表の統計も更新されます。