インデックスのバックフィル オペレーションの進捗状況を Cloud Spanner で追跡
Google Cloud Japan Team
※この投稿は米国時間 2021 年 4 月 16 日に、Google Cloud blog に投稿されたものの抄訳です。
水平方向にスケールできるリレーショナル データベースである Google Cloud Spanner の優れた点の一つは、オンラインでスキーマの更新ができることです。スキーマの更新オペレーションによってデータベースがダウンすることはありません。Cloud Spanner は、スキーマの更新中もデータを提供し続けます。
たとえば、アプリケーションが Cloud Spanner データベースの大きなテーブルからデータをクエリしているときに、セカンダリ インデックスを列に追加してデータをより効率的に検索できるようにしたい場合があります。Cloud Spanner は、インデックスのバックフィル(または入力)を自動的に開始して、インデックス登録しているデータの最新状態を反映させます。インデックスのバックフィルに要する時間は、データセットのサイズやインスタンスの負荷などに応じて、数分で完了する場合もあれば、数時間を要する場合もあります。データベースがトラフィックを継続して処理している間に、インデックスのバックフィルの進捗状況を確認して、バックフィルが完了した後で新しいインデックスの影響を受けるアプリケーションの変更をデプロイする計画を立てたいこともあります。
そこで良いお知らせです。インデックスのバックフィルの進捗状況を Cloud Spanner で追跡できるようになりました。インデックスのバックフィルの進捗状況に関するレポート機能の使い方について、詳しくご説明します。
インデックスの作成
サンプルの Singers テーブルに対するクエリを高速化する場合は、クエリに FirstName と LastName の両方も指定することが一般的です。Singers テーブルのスキーマは次のようになります。
この問題は、FirstName と LastName をインデックス キーの一部として含むセカンダリ インデックスを作成することで解決できます。たとえば、SingersByFirstLastNames というインデックスに対して、次のインデックス作成ステートメントを GCP Console から発行するとします。
このステートメントは、インターリーブされていないインデックスに対するインデックスのバックフィル オペレーションをトリガーします。これで、セカンダリ インデックスの主キーに SingerId、FirstName、LastName が含まれるようになります。スキーマの更新オペレーションが開始された後で [インデックス] タブに戻ると、SingerByFirstLastNames インデックスの横に回転しているホイールが表示されます。
数分が経過しても、SingerByFirstLastNames インデックスがいつクエリで利用できるようになるのかわかりません。セカンダリ インデックスの作成の進捗状況を把握するには、どうすればよいでしょうか?
インデックスのバックフィルの進捗状況を追跡する
インデックスのバックフィルの進捗状況は、gcloud コマンドライン ツール、REST API、RPC API を使用してモニタリングできます。Google Cloud では、このフィールドのサポートも追加しているところです。
次に、インデックスのバックフィルの進捗状況をモニタリングします。この例では、gcloud コマンドを使って行います。インデックスのバックフィルの進捗状況は、OPERATION_ID を使用して確認できます。OPERATION_ID がない場合は、gcloud spanner operations list を利用して検索します。
「operations list」コマンドの出力:
セカンダリ インデックスのバックフィル オペレーションの進捗状況を追跡するには、gcloud spanner operations describe を使用します。
インデックスのバックフィルが完了していない場合の「operations describe」コマンドの出力:
ここでは、インデックス作成ステートメントによってトリガーされたインデックスのバックフィル プロセスの進捗状況が 64% であることがわかります。プロセスが完了すると、「operations describe」コマンドの出力は以下のように進捗状況 100% を示します。
「progress」配列には、インデックスのバックフィル オペレーションの進捗状況に関する情報が表示されます。各スキーマの変更ステートメントで使用可能な場合は、「startTime」、「progressPercent」、「endTime」が含まれます。この例では、わかりやすくするために 1 つのインデックス作成ステートメントのみを示していますが、スキーマ更新オペレーションごとに複数のスキーマ変更ステートメントが存在することもあります。複数ステートメントのスキーマ変更オペレーションにおけるインデックスのバックフィルの進捗状況の解釈について詳しくは、公式ドキュメントをご覧ください。
セカンダリ インデックスのバックフィル オペレーションが完了するまで、「gcloud spanner operations describe」コマンドを実行して、オペレーションの進捗状況を定期的に追跡できます。
概要
新しいイントロスペクション機能の「インデックスのバックフィルの進捗状況レポート」は、インデックスのバックフィルの長時間実行オペレーションの進捗状況を可視化するのに役立ちます。同様に、バックアップ操作と復元操作の進捗状況も可視化できます。詳しくは、公式ドキュメントをご覧ください。
関連情報
- Software Engineer, Cloud Spanner, Shirdon Gorse