CHECK GLOBAL INDEX は、ベーステーブルとそのグローバルセカンダリインデックス(GSI)テーブル間のデータ整合性を検証し、検出された不整合を修復します。
仕組み
この文は、インデックスエントリが存在するか、正しく配置されているか、およびベーステーブルのデータと一致するかをチェックします。検出された相違点は、以下の 4 種類のエラー型のいずれかに分類されます:MISSING、ORPHAN、CONFLICT、または ERROR_SHARD。
構文
CHECK GLOBAL INDEX gsi_name [ON tbl_name] [extra_cmd]パラメーター
| パラメーター | 説明 |
|---|---|
gsi_name | 確認対象の GSI の名前です。 |
tbl_name | 省略可能。ベーステーブルの名前です。指定した場合、GSI テーブルとベーステーブル間のインデックス関係も検証されます。 |
extra_cmd | 省略可能。操作モードを制御します。下記の表をご参照ください。 |
extra_cmd のオプション
| 値 | 機能 | 使用タイミング |
|---|---|---|
| (なし) | GSI をチェックし、検出された不整合を返します。 | まずこのコマンドを実行して、エラーを特定します。 |
SHOW | 指定された GSI に対する直近の検証または修復の結果を表示します。 | 修復後に、修復レポートを確認する際に使用します。 |
CORRECTION_BASED_ON_PRIMARY | ベーステーブルのデータに基づいて GSI テーブルを修復します。 | デフォルトのチェックでエラーを特定した後に使用します。 |
注意事項
検証および修復操作はシステムリソースを消費します。ほとんどの場合、これは、修復操作中にベーステーブルまたはインデックステーブル内のデータがロックされ、バッチ単位で修復されるためです。これらの操作は、非ピーク時間帯に実行してください。
大規模なテーブルでは、検証に多大な時間がかかる場合があります。ブロッキングを回避して実行するには、HINT を使用して
PURE_ASYNC_DDL_MODEを有効化し、DDL 文を純粋な非同期モードで実行します。1 行に複数の種類のエラーが存在する場合、結果セットには、同一のプライマリキーに対して異なる
ERROR_TYPE値を持つ複数の行が返されます。結果セットの最終行は常に
SUMMARY行です。まずこの行を確認し、エラーが検出されたかどうかを判断してください。
GSIs について詳しくは、「GSI」をご参照ください。
結果の列
| 列 | 説明 |
|---|---|
GSI_TABLE | GSI の名前です。 |
ERROR_TYPE | エラーの種類です。有効な値: MISSING(欠落しているインデックスエントリ)、ORPHAN(対応するベーステーブル行がない孤立したインデックスエントリ)、CONFLICT(インデックスデータがベーステーブルと一致しない)、ERROR_SHARD(データシャードの位置が誤っている)、SUMMARY(全体の結果)。 |
STATUS | エントリの状態です。FOUND はエラーが検出されたことを示します。REPAIRED はエラーが修復されたことを示します。-- は SUMMARY 行に使用されます。 |
PRIMARY_KEY | 影響を受ける行のプライマリキーです。 |
DETAILS | エラーの詳細です。 |
例
以下の例では、検証から修復までの完全なワークフローを示します。
不整合の確認
GSI g_i_check を確認するには、次の文を実行します:
CHECK GLOBAL INDEX `g_i_check`;エラーが見つからない場合、結果には SUMMARY 行のみが含まれます:
+-------------+------------+--------+-------------+-----------------------------+
| GSI_TABLE | ERROR_TYPE | STATUS | PRIMARY_KEY | DETAILS |
+-------------+------------+--------+-------------+-----------------------------+
| `g_i_check` | SUMMARY | -- | -- | OK (7025/7025 rows checked) |
+-------------+------------+--------+-------------+-----------------------------+
1 row in set (1.40 sec)エラーが見つかった場合、各エラーごとに 1 行が返され、その後に SUMMARY 行が続きます:
+-------------+------------+--------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GSI_TABLE | ERROR_TYPE | STATUS | PRIMARY_KEY | DETAILS |
+-------------+------------+--------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| `g_i_check` | ORPHAN | FOUND | (100722) | {"GSI":{"id":100722,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_binary":"OTkAAAAAAAAAAA==","c_int_32":271}} |
| `g_i_check` | CONFLICT | FOUND | (108710) | {"Primary":{"id":108710,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_year":"2000","c_int_32":255},"GSI":{"c_int_32_un":123456,"id":108710,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_year":"2000","c_int_32":255}} |
| `g_i_check` | MISSING | FOUND | (100090) | {"Primary":{"id":100090,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_blob_tiny":"YeS4reWbvWE=","c_int_32":280}} |
| `g_i_check` | SUMMARY | -- | -- | 3 error found (7025/7025 rows checked) |
+-------------+------------+--------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4 rows in set (1.92 sec)不整合の修復
エラーを特定した後、ベーステーブルに基づいて GSI を修復するには、次の文を実行します:
CHECK GLOBAL INDEX g_i_check CORRECTION_BASED_ON_PRIMARY;次の結果が返されます:
+-------------+------------+--------+-------------+------------------------------------------------------------------------+
| GSI_TABLE | ERROR_TYPE | STATUS | PRIMARY_KEY | DETAILS |
+-------------+------------+--------+-------------+------------------------------------------------------------------------+
| `g_i_check` | SUMMARY | -- | -- | Done. Use SQL: { CHECK GLOBAL INDEX `g_i_check` SHOW; } to get result. |
+-------------+------------+--------+-------------+------------------------------------------------------------------------+
1 row in set (1.40 sec)修復レポートの表示
直近の検証または修復の結果を表示するには、次の文を実行します:
CHECK GLOBAL INDEX `g_i_check` SHOW;修復済みの各エラーは、STATUS が REPAIRED に設定された行として表示されます:
+-------------+------------+----------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GSI_TABLE | ERROR_TYPE | STATUS | PRIMARY_KEY | DETAILS |
+-------------+------------+----------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| `g_i_check` | MISSING | REPAIRED | (100090) | {"Primary":{"id":100090,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_blob_tiny":"YeS4reWbvWE=","c_int_32":280}} |
| `g_i_check` | CONFLICT | REPAIRED | (108710) | {"Primary":{"id":108710,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_year":"2000","c_int_32":255},"GSI":{"c_int_32_un":123456,"id":108710,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_year":"2000","c_int_32":255}} |
| `g_i_check` | ORPHAN | REPAIRED | (100722) | {"GSI":{"id":100722,"c_timestamp_6":"2000-01-01 00:00:00.000000","c_timestamp_3":"2000-01-01 00:00:00.000","c_timestamp_1":"2000-01-01 00:00:00.0","c_binary":"OTkAAAAAAAAAAA==","c_int_32":271}} |
| `g_i_check` | SUMMARY | -- | -- | 3 error found (7025/7026 rows checked.) Finish time: 2020-01-13 14:41:51.0 |
+-------------+------------+----------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4 rows in set (0.02 sec)