コンテンツに移動
デベロッパー

インデックスのバックフィル オペレーションの進捗状況を Cloud Spanner で追跡

2021年4月30日
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 テーブルのスキーマは次のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image1_5xZ4PON.max-900x900.max-900x900.png

この問題は、FirstName と LastName をインデックス キーの一部として含むセカンダリ インデックスを作成することで解決できます。たとえば、SingersByFirstLastNames というインデックスに対して、次のインデックス作成ステートメントを GCP Console から発行するとします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image3_sj8jruQ.max-1000x1000.max-900x900.png

このステートメントは、インターリーブされていないインデックスに対するインデックスのバックフィル オペレーションをトリガーします。これで、セカンダリ インデックスの主キーに SingerId、FirstName、LastName が含まれるようになります。スキーマの更新オペレーションが開始された後で [インデックス] タブに戻ると、SingerByFirstLastNames インデックスの横に回転しているホイールが表示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image2_ELdwmdU.max-800x800.max-800x800.png

数分が経過しても、SingerByFirstLastNames インデックスがいつクエリで利用できるようになるのかわかりません。セカンダリ インデックスの作成の進捗状況を把握するには、どうすればよいでしょうか?

インデックスのバックフィルの進捗状況を追跡する

インデックスのバックフィルの進捗状況は、gcloud コマンドライン ツールREST APIRPC API を使用してモニタリングできます。Google Cloud では、このフィールドのサポートも追加しているところです。

次に、インデックスのバックフィルの進捗状況をモニタリングします。この例では、gcloud コマンドを使って行います。インデックスのバックフィルの進捗状況は、OPERATION_ID を使用して確認できます。OPERATION_ID がない場合は、gcloud spanner operations list を利用して検索します。

読み込んでいます...

「operations list」コマンドの出力:

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-04-16_at_10.33.00_AM.max-11.max-500x500.png

セカンダリ インデックスのバックフィル オペレーションの進捗状況を追跡するには、gcloud spanner operations describe を使用します。

読み込んでいます...

インデックスのバックフィルが完了していない場合の「operations describe」コマンドの出力:

https://storage.googleapis.com/gweb-cloudblog-publish/images/image5_SvbwMup.max-700x700.png

ここでは、インデックス作成ステートメントによってトリガーされたインデックスのバックフィル プロセスの進捗状況が 64% であることがわかります。プロセスが完了すると、「operations describe」コマンドの出力は以下のように進捗状況 100% を示します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image1_RLZICGw.max-800x800.max-800x800.png

「progress」配列には、インデックスのバックフィル オペレーションの進捗状況に関する情報が表示されます。各スキーマの変更ステートメントで使用可能な場合は、「startTime」、「progressPercent」、「endTime」が含まれます。この例では、わかりやすくするために 1 つのインデックス作成ステートメントのみを示していますが、スキーマ更新オペレーションごとに複数のスキーマ変更ステートメントが存在することもあります。複数ステートメントのスキーマ変更オペレーションにおけるインデックスのバックフィルの進捗状況の解釈について詳しくは、公式ドキュメントをご覧ください。

セカンダリ インデックスのバックフィル オペレーションが完了するまで、「gcloud spanner operations describe」コマンドを実行して、オペレーションの進捗状況を定期的に追跡できます。

概要

新しいイントロスペクション機能の「インデックスのバックフィルの進捗状況レポート」は、インデックスのバックフィルの長時間実行オペレーションの進捗状況を可視化するのに役立ちます。同様に、バックアップ操作と復元操作の進捗状況も可視化できます。詳しくは、公式ドキュメントをご覧ください。

関連情報

長時間実行オペレーションの管理

セカンダリ インデックスのドキュメント


- Software Engineer, Cloud Spanner, Shirdon Gorse
投稿先