このリリース チェックリストには、Spanner で本番環境アプリケーションを起動する前に検討すべき考慮事項の一覧を記載しています。これはすべてを網羅するものではありませんが、本番環境のパフォーマンスに大きな影響を与える可能性のある領域を重点的に示したものです。
適切なインスタンス構成を選択する
要件を満たすインスタンス構成(リージョンとマルチリージョン)を選択します。
マルチリージョンのインスタンス タイプを選択する場合、Cloud Spanner にアクセスするアプリケーションはリーダー リージョンの近くに配置する必要があります。詳細については、インスタンスをご覧ください。
大規模なパフォーマンスを考慮してスキーマを設計する
Spanner のリレーショナル データスキーマは、従来のリレーショナル データベースと似ていますが、考慮すべき点がいくつかあります。
- 外部キー関係の代わりに、インターリーブされたテーブルを使用します(該当する場合)。
- ホットスポットを防ぐ主キーを選択します。
- セカンダリ インデックスによってホットスポットが作成されないようにします(主キーのホットスポットと同様)。
- セカンダリ インデックスを作成し、必要に応じて関連する列を保存します。
- 行のサイズを制限します。
パフォーマンスの要因を把握する
自動シャーディングを実施した後、スプリットに格納すると、ターゲットを絞り込むことによってクエリのパフォーマンスが向上します。単一のインターリーブされた親とそのすべての子に絞り込むと、複数の行に影響を及ぼすクエリまたはオペレーションと比較して優れたパフォーマンスが得られます。
リリース前に問題やボトルネックを把握できるよう、ベンチマークとテストを大規模に実施することを強くおすすめします。Spanner を使用すると、スキーマ設計時にテーブルで使用できるクエリ実行プランを使用して、クエリ実行の可能性を把握できます。
考慮すべきその他のパフォーマンス要因:
- データを書き込まない場合は、より高コストな読み取り/書き込みトランザクションよりも読み取り専用トランザクションを優先します。
- トランザクションのスプリット参加者数を最小限に抑えるようにアプリケーションを設計します。Spanner は、さまざまなサーバー上の行にまたがるトランザクションを実行できます。ただし、経験則として、同じ場所に配置された多くの行に関わるトランザクションは、データベース全体または大きなテーブル全体に散在する多くの行に関わるトランザクションよりも高速かつ低コストです。
- 文字列リテラルではなくクエリ パラメータを使用して、クエリのパフォーマンスと統計情報のモニタリングを改善します。
上限と割り当てについて
アーキテクチャ上の理由と、パフォーマンスと冗長性を維持する目的のため、Spanner にはアプリケーション設計で考慮すべき特定の割り当てと上限があります。割り当てはリードタイムで増やすことができます。
たとえば、commit ごとに 80,000 のミューテーションがあり、クエリごとに最大 15 個の結合があるとします。
これらの制限とスキーマ設計、ホットスポット防止は一括読み込みに影響するため、一括読み込みのベスト プラクティスに従ってください。
モニタリングを実施していることを確認する
上限に近づいたときに通知を受け取るように Cloud Monitoring を設定します。
Spanner インスタンスの線形スケーリングのパフォーマンス指標に到達した場合は、コンピューティング容量を増やします。CPU 使用率は、リージョン固有のインスタンスでは 65% 未満に、マルチリージョン インスタンスでは 45% 未満に保つことをおすすめします。
データベースの [クエリ] ページで [クエリ テンプレート] を使用して、クエリの統計情報の表内のクエリ統計情報をモニタリングします。
データ移行計画を用意する(必要な場合)
Spanner へのデータの一括読み込みでは、パフォーマンスを維持するために分散アーキテクチャを考慮する必要があります。
- 主キーによるパーティション データ
- プッシュバックの回避と CPU 使用率のモニタリング
- データの読み込み後にセカンダリ インデックスを作成する方が一般的に高速です
このブログ投稿は、高スループットの書き込みを実装する際の良い例です。
セキュリティ構成を実施済みであることを確認する
データベースとインスタンス レベルでセキュリティを管理するために、関連する IAM ロールを設定します。テーブルレベルのセキュリティはアプリケーション内で管理する必要があります。
サポート オプションについて
サポートを受けるための計画を策定済みであることを確認します。