すべてのプロダクト
Search
ドキュメントセンター

PolarDB:GPP を使用してセカンダリインデックスのルックアップを高速化

最終更新日:Oct 31, 2025

MySQL の標準的なセカンダリインデックスのルックアップでは、通常 2 回の B ツリースキャンが必要となり、クエリの効率に影響を与える可能性があります。このパフォーマンスボトルネックに対処するため、PolarDB-XGuess Primary Key Page No (GPP) 機能を導入しています。GPP は、プライマリキーのデータページを直接特定することでルックアップパスを最適化し、特定のシナリオではクエリのパフォーマンスを 50% 以上向上させることができます。

前提条件

インスタンスは、次の要件を満たす必要があります。

  • インスタンスエディション: Standard Edition または Enterprise Edition

  • エンジンバージョン: MySQL 8.0

  • データノードバージョン: xcluster8.4.19-20240731 以降 (2024 年 7 月 31 日 以降にリリースされたバージョン)。

    説明

課金

GPP 機能は無料です。ただし、GPP は各セカンダリインデックスエントリに 4 バイトのオーバーヘッドを追加します。ほとんどのテーブルでは、これによりストレージが 5% 未満増加しますが、それに応じてストレージコストも増加します。

注意事項

  • インスタンスバージョン: GPP は、基盤となるストレージ構造を変更します。GPP が有効になっているインスタンスは、GPP をサポートしていない以前のバージョンにスペックダウンすることはできません。

  • 既存のインデックス: GPP を有効にしても、既存のセカンダリインデックスは自動的に GPP 機能を使用しません。GPP を有効にするには、次のようにインデックスを再構築する必要があります。

    1. 新しいインデックスを作成します: ALTER TABLE ... ADD INDEX idx_new ...;

    2. インデックスの名前を変更します: ALTER TABLE ... RENAME idx TO idx_old, RENAME idx_new TO idx;

    3. 元のインデックスを削除します: ALTER TABLE ... DROP INDEX idx_old;

  • テーブルとインデックスタイプの制限: GPP は、一時テーブル、システムテーブル、圧縮テーブル、フルテキストインデックス、または空間インデックスには適用されません。

GPP 機能を有効にする

GPP 機能は、PolarDB-X インスタンスでデフォルトで有効になっています。この機能を有効または無効にするには、PolarDB-X コンソール に移動します。ターゲットクラスターの 構成と管理 > パラメータ設定 ページで、ストレージレイヤー タブをクリックし、opt_index_format_gpp_enabled パラメーターの値を変更します。この変更は、インスタンスを再起動しなくてもすぐに有効になります。

説明
  • opt_index_format_gpp_enabled パラメーターを ON に設定すると、テーブルまたは新しいセカンダリインデックスを作成するときに、GPP 機能を備えたセカンダリインデックスがデフォルトで作成されます。

  • opt_index_format_gpp_enabled パラメーターを OFF に設定すると、テーブルまたは新しいセカンダリインデックスを作成するときに、標準のセカンダリインデックスが作成されます。これは、MySQL のコミュニティエディションと一致しています。

GPP パフォーマンステスト

Sysbench などの標準的なベンチマークツールは、通常、読み取り専用シナリオ (例: oltp_read_only) でプライマリキーによってクエリを実行しますが、これはセカンダリインデックスのルックアップをトリガーしません。GPP のパフォーマンス上の利点を正確に評価するために、テストでは、プライマリキー (id) の代わりにセカンダリインデックスキー (例: k) でクエリを実行するように変更し、現実的なルックアップシナリオをシミュレートしました。以下の表は、GPP が有効な PolarDB-X インスタンスとそうでないインスタンスの QPS (Queries Per Second) 改善率を示しています。

GPP Sysbench QPS提升率

よくある質問

古いインスタンスをスペックアップした後、既存のテーブルのセカンダリインデックスは自動的に GPP 機能で有効になりますか?

いいえ。GPP には、基盤となるストレージ構造の変更が含まれます。GPP 機能を有効にするには、既存のテーブルのセカンダリインデックスを手動で再構築する必要があります。

opt_index_format_gpp_enabled パラメーターを有効または無効にするとリスクはありますか?

いいえ。このパラメーターの有効化または無効化は、再起動を必要とせず、サービスに影響を与えない動的なインスタンスレベルの操作です。これは、新しいインデックスがデフォルトで GPP 機能を使用するかどうかを決定するだけです。

GPP を有効にすると、追加のコストが発生したり、パフォーマンスが低下したりしますか?

  • コスト: GPP は、各インデックスレコードに 4 バイトを追加することで、ストレージコストをわずかに増加させます。ほとんどのビジネステーブルでは、これによりストレージスペースが 5% 未満増加します。

  • パフォーマンス: GPP ルックアップは、主に B ツリー構造の変更が原因で失敗する可能性があります。ミス率がヒット率よりもはるかに高い場合、GPP はテーブルルックアップのパフォーマンスを低下させる可能性があります。ただし、本番環境のデータに基づくと、GPP のヒット率は通常 99% を超えています。このヒット率により、GPP はテーブルルックアップクエリのパフォーマンスを大幅に向上させることができます。

GPP はどのテーブルモードとデータベースモードをサポートしていますか?

GPP は、Standard EditionEnterprise Edition の両方でサポートされています。

Enterprise Edition では、GPP はパーティションテーブル、単一テーブル、およびブロードキャストテーブルでサポートされています。また、DRDS モードまたは AUTO モードのデータベースでもサポートされています。