プライマリテーブルとそのグローバルセカンダリインデックス(GSI)テーブル間のデータ整合性を検証し、検出された GSI の不整合を修復します。
仕組み
CHECK GLOBAL INDEX は、プライマリテーブルの各行をスキャンし、対応する GSI エントリと比較することで不整合を検出します。CORRECTION_BASED_ON_PRIMARY を指定して実行すると、プライマリテーブルを真実のソースとして、検出されたすべてのエラーを修復します。
大規模なテーブルの場合、検証には長い時間がかかる場合があります。パフォーマンスへの影響を回避するため、業務の少ない時間帯にチェックを実行してください。スキャン自体が非常に遅いテーブルの場合、HINT を使用して PURE_ASYNC_DDL_MODE を有効化し、操作を純粋な非同期データ定義言語(DDL)文として送信します。詳細については、「DDL 実行エンジンの制御パラメーター」をご参照ください。
修復処理では、プライマリテーブルまたはインデックステーブルのデータがロックされ、バッチ単位で修復が適用されます。同時実行ワークロードへの影響を最小限に抑えるため、修復は非ピーク時間帯に実行してください。
構文
CHECK GLOBAL INDEX gsi_name [ON tbl_name] [extra_cmd]| パラメーター | 必須 | 説明 |
|---|---|---|
gsi_name | はい | 確認対象の GSI の名前です。 |
tbl_name | いいえ | GSI が存在するプライマリテーブルです。指定した場合、GSI テーブルとプライマリテーブル間のインデックス関係が正常であることも検証されます。 |
extra_cmd | いいえ | 操作モードです。以下の表をご参照ください。 |
`extra_cmd` の値
| 値 | 説明 |
|---|---|
| (なし) | GSI のみを確認します。 |
SHOW | 指定した GSI に対する直近の確認または修復の結果を表示します。 |
CORRECTION_BASED_ON_PRIMARY | プライマリテーブルを真実のソースとして、GSI テーブル内の不整合を修復します。 |
結果セットの列
すべての CHECK GLOBAL INDEX ステートメントは、以下の列を持つ結果セットを返します:
| 列 | 説明 |
|---|---|
GSI_TABLE | GSI の名前です。 |
ERROR_TYPE | エラーの種類です。有効な値については、以下の表をご参照ください。 |
STATUS | エラーの状態です:FOUND(検出済み、未修復)または REPAIRED(修復完了)です。 |
PRIMARY_KEY | 該当する行のプライマリキー値です。 |
DETAILS | 該当する行の完全データペイロード(JSON 形式)です。 |
`ERROR_TYPE` の値
| 値 | 説明 |
|---|---|
MISSING | プライマリテーブルには行が存在するが、GSI に対応するエントリがない場合です。 |
ORPHAN | GSI にはエントリが存在するが、プライマリテーブルに対応する行がない場合です。 |
CONFLICT | GSI エントリのデータが、対応するプライマリテーブルの行と異なる場合です。 |
ERROR_SHARD | データシャードが誤った位置に配置されている場合です。 |
SUMMARY | 各結果セットの末尾に追加されるまとめ行です。エラー項目ではありません。 |
1 行につき複数のエラー種別が発生する場合があります。その場合は、同一のプライマリキーに対してエラー種別ごとに 1 行ずつ結果セットに含まれます。
例
以下の例では、g_i_check という名前の GSI に対する確認および修復のワークフロー全体を示します。
不整合の確認
mysql> CHECK GLOBAL INDEX `g_i_check`;不整合が検出されなかった場合:
+-------------+------------+--------+-------------+-----------------------------+
| GSI_TABLE | ERROR_TYPE | STATUS | PRIMARY_KEY | DETAILS |
+-------------+------------+--------+-------------+-----------------------------+
| `g_i_check` | SUMMARY | -- | -- | OK (7025/7025 rows checked) |
+-------------+------------+--------+-------------+-----------------------------+
1 row in set (1.40 sec)不整合が検出された場合、該当する各行のリストの後にまとめ行が表示されます:
+-------------+------------+--------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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)不整合の修復
mysql> 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)まとめ行により、修復処理が送信されたことが確認できます。詳細な修復レポートを取得するには、SHOW を実行してください。
修復レポートの表示
mysql> CHECK GLOBAL INDEX `g_i_check` SHOW;+-------------+------------+----------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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)以前 FOUND と表示されていた 3 つのエラーが、すべて REPAIRED に変更されており、修復が成功したことが確認できます。
次のステップ
グローバルセカンダリインデックスの利用 — PolarDB for Xscale における GSI の作成および利用方法について学習します。
DDL 実行エンジンの制御パラメーター —
PURE_ASYNC_DDL_MODEおよびその他の DDL 実行パラメーターの設定方法について学習します。