SET_TABLE_STATS プロシージャは、テーブルレベルの基本的な統計情報を設定するために使用されます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
DBMS_STATS.SET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numblks NUMBER DEFAULT NULL,
avgrlen NUMBER DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| ownname | ユーザー名。ユーザー名を NULL に設定した場合、現在ログインしているユーザー名がデフォルトで使用されます。 |
| tabname | テーブルの名前。 |
| partname | 統計情報を格納するテーブルパーティションの名前。テーブルがパーティション化されており、かつ partname が NULL の場合、統計情報はグローバルなテーブルレベルに格納されます。 |
| numrows | テーブル全体の総行数。 |
| numblks | テーブル全体で使用されるブロック数。 |
| avgrlen | 列単位の平均長(バイト単位)。 |
| no_invalidate | 統計情報収集時にPlan Cacheをフラッシュするかどうか。TRUE に設定すると、統計情報収集時にPlan Cacheをフラッシュしません。 |
| force | ロック状態を無視して強制的に統計情報を収集するかどうか。デフォルトは FALSE です。TRUE に設定すると、統計情報がロックされていても収集されます。 |
異常時
| エラーコード | 説明 |
|---|---|
| OBE-20000 | オブジェクトが存在しないか、権限が不足しています。 |
| OBE-20001 | 無効または矛盾する入力値です。 |
| OBE-20005 | このオブジェクトの統計情報がロックされています。 |
使用方法
このプロシージャを呼び出すには、テーブルの所有者である必要があります。
SYSが所有するオブジェクトを使用する場合は、テーブルの所有者またはSYSDBA権限を持っている必要があります。オプティマイザーは、キャッシュされたデータを使用してインデックスまたは統計テーブルへのアクセスによりキャッシュされるブロック数を推定します。操作の総コストには、ディスクからキャッシュされていないブロックを読み取るI/Oコスト、バッファからキャッシュされたブロックを取得するCPUコスト、およびデータを処理するCPUコストが含まれます。
TRUEおよびFALSEの値を持つパラメータについては、BEGIN ... ENDブロック内でこのプロシージャを実行する必要があります。
例
ユーザー testUser01 のテーブル tbl1 の総行数を1万行に設定します。
obclient> BEGIN
DBMS_STATS.SET_TABLE_STATS('testUser01', 'tbl1', numrows=>10000, force=>FALSE, no_invalidate=>FALSE);
END;
Query OK, 0 rows affected