コンテンツにスキップ

15.7 ROLLUP の問題

ROLLUP の結果が遅れたり元データと異なったりする場合は、処理遅延と集計の意味の違いを区別します。 例の名前を実際の対象テーブル・ジョブへ置き換え、最初の対策として削除・再作成を行わないでください。

1. 状態と範囲の確認

SELECT ROLLUP_NAME, ROLLUP_TABLE, ROOT_TABLE, EXT_TYPE,
       INTERVAL_TIME, WAKEUP_INTERVAL, ENABLED, RUN_STATE, LAST_ELAPSED_MSEC
  FROM V$ROLLUP ORDER BY ROLLUP_NAME;
SHOW ROLLUPGAP;

SHOW ROLLUPGAP は machsql コマンドであり、SDK の SQL API へ送信しません。gap は RID の処理差で、 時間遅延や元データ補正の完了を直接表す値ではありません。各階層・Cluster ノードの状態、 サーバービルド、データベース、所有者を併せて記録します。

2. 同じデータセットを比較

症状確認事項
一部サンプルがない条件付き ROLLUP 候補と元データのフィルターが一致するか
FIRST/LAST エラー選択された候補が EXTENSION か
月・日クエリに候補がない保存間隔の選択規則とクエリバケットを混同していないか
平均が異なるNULL、有効件数、部分平均の再集計、タグ単位が同じか
元データ修正後も値が変わらないFORCE で過去に戻そうとしていないか、REBUILD の対象か
JSON 件数が異なる元文書、SQL NULL、パス別件数、文書集計件数を区別したか

元データは DATE_TRUNC/DATE_BIN と GROUP BY、保存集計は rollup() で取得し、比較します。 タグ、時刻、origin、終了境界、集計関数を固定します。対応 ROLLUP がない場合に、 rollup() が元データのスキャンへ自動で切り替わるとは考えないでください。

3. 新しい入力への追従

対象ジョブが有効か確認し、必要なジョブを名前で指定します。

ALTER ROLLUP rollup_name FORCE;
SHOW ROLLUPGAP;

WAKEUP は起床させるだけで、FORCE は処理範囲に追いつくまで待ちます。停止中のジョブは状態を確認して START し、複数階層は下位から処理します。ALTER SYSTEM FLUSH ROLLUP は非サポートなので 診断コマンドとして使用しないでください。

4. 過去データの補正と再構築

Standard Edition でも、すべての ROLLUP 構成が REBUILD 対象ではありません。完全な自動階層か、 Custom 間隔・バケットが対応するか、元データが残っているかを先に確認します。時間引数には 対応する定数文字列または TO_DATE を使います。指定時刻を含むバケット全体が再計算されます。

関連ジョブの停止・再起動と部分失敗を考慮します。成功・失敗の後も結果と実際の有効状態を確認し、 REBUILD 演習引数の仕様に従います。

5. サポート依頼の資料

  • サーバービルド、Edition、クライアント、接続先
  • TAG スキーマ、ROLLUP 定義、条件、依存関係
  • 状態・gap と観測時刻
  • 比較した元データ/ROLLUP SQL、タイムゾーン・origin、期待値・実測値
  • 最初のエラーと直近の元データ補正・削除・大量入力・設定変更
最終更新日