セカンダリ レプリカのクエリ ストア
SQL Server 2022 (16.x)
セカンダリ レプリカのクエリ ストア機能により、プライマリ レプリカで使用できるセカンダリ レプリカ ワークロードで同じクエリ ストア機能が有効になります。 セカンダリ レプリカのクエリ ストアが有効になっている場合、レプリカにより、通常はクエリ ストアに格納されるクエリ実行情報がプライマリ レプリカに送信されます。 その後、プライマリ レプリカにより、独自のクエリ ストア内のディスクにデータが保持されます。 本質的には、プライマリおよびすべてのセカンダリ レプリカの間で共有されるクエリ ストアは 1 つです。 クエリ ストアはプライマリ レプリカに存在し、すべてのレプリカのデータが一緒に格納されます。 現在、セカンダリ レプリカのクエリ ストアは、可用性グループで構成された SQL Server 2022 (16.x) インスタンスで使用できます。
重要
セカンダリ レプリカのクエリ ストアは プレビュー 機能です。 生産環境での使用は意図していません。 SQL Server 2022 (16.0) リリース ノートを参照してください。
セカンダリ レプリカのクエリ ストアを有効にする前に、トレース フラグ 12606 を有効にする必要があります。 これらの トレース フラグを有効にするには:
- Windowsで、SQL Server 構成マネージャーを起動します。
- SQL Server サービスのリストでSQL Server 2022 (16.x) インスタンスの SQL Server インスタンス サービスを右クリックします。 [プロパティ] を選択します。
- [開始パラメーター] タブを選択します。[スタートアップ パラメーターの指定: ] フィールドに値:
-T12606
を追加し、[追加] を選択します。 - 変更を有効にするには、SQL Server インスタンス サービスを再起動する必要があります。
セカンダリ レプリカのクエリ ストアを有効にする
セカンダリ レプリカのクエリ ストアを使用する前に、SQL Server インスタンスに、Always On 可用性グループを設定して構成する必要があります。 その次に、ALTER DATABASE SET オプション (Transact-SQL) を使用して、セカンダリ レプリカのクエリ ストアを有効にします。
クエリ ストアがまだ有効ではなく、プライマリ レプリカで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 | desired_state_desc | actual_state | actual_state_desc | readonly_reason |
---|---|---|---|---|
4 | READ_CAPTURE_SECONDARY | 4 | READ_CAPTURE_SECONDARY | 8 |
有効にすると、sys.query_store_replicasを使用して、セカンダリ レプリカ上のクエリ ストアの正常性を確認できます。
セカンダリ レプリカのクエリ ストアを無効にするには、プライマリ レプリカ上のデータベースに接続し、次のコードを実行します。
ALTER DATABASE CURRENT
FOR SECONDARY SET QUERY_STORE = OFF;
GO
レプリカ セット
現在、セカンダリ レプリカのクエリ ストアが有効になっている場合は、すべてのセカンダリ レプリカに対して有効になります。
A レプリカ セット は、ロール (プライマリ、セカンダリ、地域 セカンダリ、地域 プライマリ) を共有するすべての名前のないレプリカ、または個々の名前付きレプリカとして定義されます。 クエリに関して格納されるデータは、レプリカ セット ベースでワークロードとして分析できます。 レプリカのクエリ ストアでは、セカンダリ レプリカに対して実行される可能性がある一意の読み取り専用ワークロードのパフォーマンスを監視および調整できます。
セカンダリ レプリカのクエリ ストアのパフォーマンスに関する考慮事項
セカンダリ レプリカによってクエリ情報をプライマリ レプリカに送信するために使用されるチャネルは、セカンダリ レプリカを最新の状態に保つために使用されるチャネルと同じです。 データは、プライマリ レプリカで実行されるクエリにクエリ ストアによって使用されるプライマリ レプリカ上の同じテーブルに格納されるため、クエリ ストアのサイズが大きくなります。
したがって、システムに大きな負荷がかかっている場合は、チャネルが過負荷になっているため、速度が低下する可能性があります。 さらに、現在クエリ ストアに存在する同じアドホック クエリ キャプチャの問題は、セカンダリ レプリカで実行されるワークロードで引き続き発生します。 詳細については、「最も重要なデータをクエリ ストアに保存する」を参照してください。
関連項目
- 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)