SQL Server 2022 (16.x)
読み取り可能なセカンダリのクエリ ストア機能を使用すると、プライマリ レプリカで使用できるセカンダリ レプリカ ワークロードに対して同じクエリ ストア機能を使用できます。 セカンダリ レプリカのクエリ ストアが有効になっている場合、レプリカは通常クエリ ストアに格納されるクエリ実行情報をプライマリ レプリカに送信します。 その後、プライマリ レプリカは、データを独自のクエリ ストア内のディスクに保持します。 基本的には、プライマリ レプリカとすべてのセカンダリ レプリカの間で共有されるクエリ ストアが 1 つあります。 クエリ ストアはプライマリ レプリカに存在し、すべてのレプリカのデータを一緒に格納します。 現在、セカンダリ レプリカのクエリ ストアは、可用性グループで構成された SQL Server 2022 (16.x) インスタンスで使用できます。
注釈
読み取り可能なセカンダリのクエリ ストアは プレビュー 機能です。 本番環境へのデプロイを目的としたものではありません。 詳細については、 SQL Server 2022 リリース ノートを参照してください。
読み取り可能なセカンダリに対してクエリ ストアを有効にするには、トレース フラグ 12606 を有効にする必要があります。 トレース フラグを有効にするには:
Windows で、 SQL Server 構成マネージャーを起動します。
SQL Server サービスの一覧で、SQL Server 2022 (16.x) インスタンスの SQL Server インスタンス サービスを右クリックします。 [プロパティ] を選択します。
[ 開始パラメーター] タブを選択します。[ スタートアップ パラメーターの指定: ] フィールドで、
-T12606
値を追加し、[追加] を選択 します。変更を有効にするには、SQL Server インスタンス サービスを再起動する必要があります。
注
SQL Server 2025 (17.x) プレビュー以降、読み取り可能なセカンダリのクエリ ストアはプレビュー段階ではなく、既定で有効になっています。 読み取り可能なセカンダリ機能にクエリ ストアを使用するためにトレース フラグ 12606 が不要になりました。 SQL Server 2025 (17.x) プレビューでトレース フラグ 12606 を有効にすると、読み取り可能なセカンダリ機能のクエリ ストアが無効になります。
読み取り可能なセカンダリのクエリ ストアを有効にする
SQL Server インスタンスで読み取り可能なセカンダリにクエリ ストアを使用する前に、 Always On 可用性グループが必要です。 次に、 ALTER DATABASE SET オプションを使用して、読み取り可能なセカンダリに対してクエリ ストアを有効にします。
プライマリ レプリカでクエリ ストアがまだ有効になっておらず、READ_WRITE
モードの場合、先に進む前に有効にする必要があります。 プライマリ レプリカ上の目的のデータベースごとに次を実行します。
ALTER DATABASE [Database_Name] SET QUERY_STORE = ON;
GO
ALTER DATABASE [Database_Name] SET QUERY_STORE
( OPERATION_MODE = READ_WRITE );
すべての読み取り可能なセカンダリでクエリ ストアを有効にするには、プライマリ レプリカに接続し、目的のデータベースごとに次を実行します。 現在、読み取り可能なセカンダリのクエリ ストアが有効になっている場合、すべてのセカンダリ レプリカに対して有効になります。
ALTER DATABASE [Database_Name]
FOR SECONDARY SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE );
GO
すべてのセカンダリ レプリカでクエリ ストアを無効にするには、プライマリ レプリカに接続し、目的のデータベースごとに次を実行します。
ALTER DATABASE [Database_Name]
FOR SECONDARY SET QUERY_STORE = OFF;
GO
セカンダリ レプリカ上のデータベースに接続し、次を実行することで、セカンダリ レプリカでクエリ ストアが有効になっていることを検証できます。
SELECT desired_state,
desired_state_desc,
actual_state,
actual_state_desc,
readonly_reason
FROM sys.database_query_store_options;
GO
クエリ sys.database_query_store_options の次のサンプル結果は、クエリ ストアがセカンダリのREAD_CAPTURE_SECONDARY状態であることを示しています。
readonly_reason
の8
は、セカンダリ レプリカに対してクエリが実行されたことを示します。 これらの結果は、セカンダリ レプリカでクエリ ストアが正常に有効になっていることを示します。
希望状態 | desired_state_desc | 実際の状態 | 実際の状態記述 | 読み取り専用の理由 |
---|---|---|---|---|
4 | セカンダリーキャプチャを読む | 4 | セカンダリーキャプチャを読む | 8 |
有効にすると、 sys.query_store_replicas を使用して、セカンダリ レプリカ上のクエリ ストアの正常性を確認できます。
読み取り可能なセカンダリのクエリ ストアを無効にするには、プライマリ レプリカ上のデータベースに接続し、次のコードを実行します。
ALTER DATABASE CURRENT
FOR SECONDARY SET QUERY_STORE = OFF;
GO
レプリカ セット
現在、読み取り可能なセカンダリのクエリ ストアが有効になっている場合、すべてのセカンダリ レプリカに対して有効になります。
レプリカセットは、プライマリ、セカンダリ、ジオセカンダリ、ジオプライマリなどの役割を共有するすべての名前なしのレプリカ、または個々の名前付きレプリカとして定義されます。 クエリに関して格納されたデータは、レプリカ セットごとにワークロードとして分析できます。 レプリカのクエリ ストアでは、セカンダリ レプリカに対して実行される可能性がある一意の読み取り専用ワークロードのパフォーマンスを監視および調整できます。
読み取り可能なセカンダリのクエリ ストアのパフォーマンスに関する考慮事項
セカンダリ レプリカがクエリ情報をプライマリ レプリカに送信するために使用するチャネルは、セカンダリ レプリカを最新の状態に保つために使用されるのと同じチャネルです。 データは、プライマリ レプリカで実行されるクエリにクエリ ストアが使用するプライマリ レプリカ上の同じテーブルに格納されるため、クエリ ストアのサイズが大きくなります。
したがって、システムの負荷が大きい場合は、チャネルが過負荷になっているため、多少の速度低下に気付く可能性があります。 さらに、現在クエリ ストアに存在する同じアドホック クエリ キャプチャの問題は、セカンダリ レプリカで実行されるワークロードに対して継続されます。 クエリ ストアで最も関連性の高いデータを保持する方法について説明します。
関連コンテンツ
- ALTER DATABASE SET オプション (Transact-SQL)
- sys.database_query_store_options (Transact-SQL)
- sys.query_store_replicas
- sys.query_store_plan_forcing_locations (Transact-SQL)
- sys.sp_query_store_force_plan (Transact-SQL)
- Always On 可用性グループとは
- クエリ ストアを使用してワークロードを監視するためのベスト プラクティス
- クエリ ストアを管理するためのベスト プラクティス
- クエリ ストアを使用してパフォーマンスを調整する
- クエリ ストアのヒント
- クエリ ストアの使用シナリオ
- SQL Server Management Studio (SSMS) でアクティビティ モニターを開く