EXECプロシージャとROLLUPGAP
Machbaseが公開するテーブル・ROLLUP制御プロシージャと、machsqlの状態確認コマンドを説明します。
共通のEXEC形式
execute_procedure_stmt ::=
'EXEC' procedure_name [ '(' argument_list ')' ]プロシージャごとの引数の数は固定です。 名前がない場合、引数の数・型が異なる場合、対象オブジェクトが存在しない場合はエラーを返します。
TABLE_FLUSH
EXEC TABLE_FLUSH(table_name);| 項目 | 仕様 |
|---|---|
| 引数 | テーブル名1つ |
| Edition | Standard、Cluster |
| 動作 | テーブルの保留中のストレージ・入力バッファを明示的にflush |
| 戻り値 | ResultSetなしで文の成功またはエラーを返す |
| エラー | テーブルなし、アクセス不可、flush処理失敗 |
検証や運用で明示的なストレージのflushが必要な場合に使用します。 トランザクションのコミットやクエリの可視性を保証する手段ではありません。 入力行ごとに呼ぶとflushコストが増えるため、繰り返し呼び出さないでください。
INDEX_FLUSH
EXEC INDEX_FLUSH(table_name);
EXEC INDEX_FLUSH(table_name, index_name);テーブル名だけを指定すると、そのテーブルのすべてのインデックス構築が終わるまで待機します。 インデックス名も指定すると、そのインデックスだけを対象にします。 指定したインデックスがそのテーブルに属さない場合はエラーです。ResultSetは返しません。
TABLE_REFRESH
EXEC TABLE_REFRESH(lookup_table_name);| 項目 | 仕様 |
|---|---|
| 引数 | LOOKUPテーブル名1つ |
| Edition | Standard、Cluster |
| 動作 | 永続LOOKUPの内容を実行時メモリテーブルに再反映 |
| 名前の範囲 | 現在のデータベースのテーブル。owner.tableを許可 |
| 権限 | テーブル所有者または許可された管理ユーザー |
| 書き込み制限 | READ ONLYデータベースでは実行不可 |
| 戻り値 | ResultSetなしで文の成功またはエラーを返す |
| エラー | LOOKUP以外のテーブル、テーブルなし、書き込み許可判定の失敗 |
実行前に進行中のLOOKUP変更とクエリへの影響を確認し、完了後に行数と代表的なキーを再検索します。
FREEZE_TAG_INDEXとUNFREEZE_TAG_INDEX
EXEC FREEZE_TAG_INDEX(tag_table_name);
EXEC UNFREEZE_TAG_INDEX(tag_table_name);TAGテーブルのタグインデックスを凍結・解除する1引数のプロシージャです。TAG以外のテーブルには使用できません。
インデックス保守の境界を直接制御する運用コマンドのため、通常の取り込み処理で常用せず、
失敗時は必ずUNFREEZE_TAG_INDEXの実行を確認してください。
両方ともResultSetなしで文の成功またはエラーを返します。
ROLLUP_STARTとROLLUP_STOP
EXEC ROLLUP_START;
EXEC ROLLUP_START(rollup_name);
EXEC ROLLUP_STOP;
EXEC ROLLUP_STOP(rollup_name);両方のプロシージャは、0引数とROLLUP名1引数の形式に対応します。 名前を指定するとそのROLLUP、省略すると現在のユーザー範囲のROLLUPを制御します。 SYSの引数なし実行は全ユーザー範囲に適用される場合があるため、対象確認と変更承認が必要です。
存在しないROLLUP、開始済みの対象へのSTART、停止済みの対象へのSTOPはエラーです。
V$ROLLUP.RUN_STATEで変更結果を確認します。
ROLLUP_FORCE
EXEC ROLLUP_FORCE;
EXEC ROLLUP_FORCE(rollup_name);0引数形式は、現在のユーザー範囲の基本SEC→MIN→HOUR階層を処理します。 名前を指定すると、そのROLLUPソースの現在のEND_RIDに追いつくまで待機する同期処理です。 停止したROLLUPは、先にSTART状態であることを確認します。
完了後はV$ROLLUPとSHOW ROLLUPGAPで、関連するすべてのソース段階のgapを確認します。
ROLLUP_REBUILD
タグと時間範囲を受け取る、4引数のStandard専用プロシージャです。 詳細仕様の正本はROLLUP_REBUILDです。
SHOW ROLLUPGAP
SHOW ROLLUPGAP;SHOW ROLLUPGAPはサーバーSQLではなく、machsql専用のクライアントコマンドです。
JDBC、ODBC、SDKの通常のSQL実行APIに同じ文字列を送信しないでください。
Standardの出力には、ソース・ROLLUPテーブル、ソースEND_RID、ROLLUP END_RID、GAP、状態、起動時刻が含まれます。
Clusterの出力にはHOSTNAMEが加わり、ノード別の状態を表示します。
GAP = SRC_END_RID - ROLLUP_END_RIDであり、階層内のすべてのソース→ROLLUP行が0であることを確認して初めて、階層全体が追いついたと判断できます。