Abfragespeicher für sekundäre Replikate

SQL Server 2022 (16.x)

Mit dem Abfragespeicher für sekundäre Replikate können die Abfragespeicherfunktionen, die für primäre Replikate zur Verfügung stehen, auch für Workloads sekundärer Replikate verwendet werden. Wenn der Abfragespeicher für sekundäre Replikate aktiviert ist, senden Replikate die Abfrageausführungsinformationen, die normalerweise im Abfragespeicher gespeichert werden, an das primäre Replikat zurück. Das primäre Replikat speichert die Daten dann auf dem Datenträger in seinem eigenen Abfragespeicher. Im Wesentlichen gibt es also einen einzelnen Abfragespeicher, die vom primären Replikat und von allen sekundären Replikaten gemeinsam genutzt wird. Die Abfragespeicher befindet sich im primären Replikat und speichert Daten für alle Replikate an einem Ort. Derzeit ist der Abfragespeicher für sekundäre Replikate mit SQL Server 2022 (16.x)-Instanzen verfügbar, die in Verfügbarkeitsgruppen konfiguriert sind.

Wichtig

Der Abfragespeicher für sekundäre Replikate ist ein Vorschaufeature . Sie ist nicht für Produktionsbereitstellungen vorgesehen. Siehe: Versionshinweise zu SQL Server 2022 (16.0).

Sie müssen das Ablaufverfolgungskennzeichen 12606 aktivieren, bevor Sie den Abfragespeicher für sekundäre Replikate aktivieren können. So aktivieren Sie die Ablaufverfolgungskennzeichnungen:

  1. Starten Sie in Windows SQL Server Configuration Manager.
  2. Klicken Sie in der Liste der SQL Server Services mit der rechten Maustaste auf den SQL Server-Instanzdienst für Ihre SQL Server 2022 (16.x)-Instanz. Wählen Sie Eigenschaften aus.
  3. Wählen Sie die Registerkarte "Startparameter" aus. Fügen Sie im Feld "Startparameter angeben" die Werte hinzu, -T12606 und wählen Sie "Hinzufügen" aus.
  4. Der SQL Server-Instanzdienst muss neu gestartet werden, bevor die Änderungen wirksam werden.

Aktivieren des Abfragespeichers für sekundäre Replikate

Bevor Sie den Abfragespeicher für sekundäre Replikate in einer SQL Server-Instanz verwenden, müssen Sie über eine AlwaysOn-Verfügbarkeitsgruppe verfügen. Aktivieren Sie dann den Abfragespeicher für sekundäre Replikate mit ALTER DATABASE SET-Optionen (Transact-SQL).

Wenn der Abfragespeicher noch nicht aktiviert ist und sich im modus READ_WRITE des primären Replikats befindet, müssen Sie ihn aktivieren, bevor Sie fortfahren. Führen Sie für jede gewünschte Datenbank im primären Replikat Folgendes aus:

ALTER DATABASE [Database_Name] SET QUERY_STORE = ON;
GO
ALTER DATABASE [Database_Name] SET QUERY_STORE
( OPERATION_MODE = READ_WRITE );

Um den Abfragespeicher für alle sekundären Replikate zu aktivieren, stellen Sie eine Verbindung mit dem primären Replikat her, und führen Sie folgendes für jede gewünschte Datenbank aus. Wenn der Abfragespeicher für sekundäre Replikate aktiviert ist, ist er derzeit für alle sekundären Replikate aktiviert.

ALTER DATABASE [Database_Name]
FOR SECONDARY SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE );
GO

Um den Abfragespeicher für alle sekundären Replikate zu deaktivieren, stellen Sie eine Verbindung mit dem primären Replikat her, und führen Sie für jede gewünschte Datenbank Folgendes aus:

ALTER DATABASE [Database_Name]
FOR SECONDARY SET QUERY_STORE = OFF;
GO

Sie können überprüfen, ob der Abfragespeicher für ein sekundäres Replikat aktiviert ist, indem Sie eine Verbindung mit der Datenbank im sekundären Replikat herstellen und Folgendes ausführen:

SELECT desired_state, desired_state_desc, actual_state, actual_state_desc, readonly_reason
FROM sys.database_query_store_options;
GO

Die folgenden Beispielergebnisse aus der Abfrage sys.database_query_store_options deuten darauf hin, dass sich der Abfragespeicher in einem READ_CAPTURE_SECONDARY Zustand für die sekundäre befindet. Der readonly_reason Wert gibt 8 an, dass die Abfrage für ein sekundäres Replikat ausgeführt wurde. Diese Ergebnisse zeigen, dass der Abfragespeicher erfolgreich für das sekundäre Replikat aktiviert wurde.

desired_state desired_state_desc actual_state actual_state_desc readonly_reason
4 READ_CAPTURE_SECONDARY 4 READ_CAPTURE_SECONDARY 8

Nach der Aktivierung können Sie sys.query_store_replicas verwenden, um den Status des Abfragespeichers im sekundären Replikat zu überprüfen.

Wenn Sie den Abfragespeicher für sekundäre Replikate deaktivieren möchten, können Sie eine Verbindung mit der Datenbank im primären Replikat herstellen und den folgenden Code ausführen:

ALTER DATABASE CURRENT
FOR SECONDARY SET QUERY_STORE = OFF;
GO

Replikatgruppen

Wenn der Abfragespeicher für sekundäre Replikate aktiviert ist, ist er derzeit für alle sekundären Replikate aktiviert.

Ein Replikatsatz wird als alle nicht benannten Replikate definiert, die eine Rolle (primäre, sekundäre, sekundäre, geo-primär) oder als einzelne benanntes Replikat verwenden. Die Daten, die zu Abfragen gespeichert werden, können als Workloads auf Replikatgruppenbasis analysiert werden. Der Abfragespeicher für Replikate ermöglicht die Überwachung und Anpassung der Leistung aller individuellen, schreibgeschützten Workloads, die ggf. für sekundäre Replikate ausgeführt werden.

Leistungserwägungen im Zusammenhang mit dem Abfragespeicher für sekundäre Replikate

Der Kanal, der von sekundären Replikaten verwendet wird, um Abfrageinformationen an das primäre Replikat zurückzusenden, wird auch verwendet, um sekundäre Replikate auf dem neuesten Stand zu halten. Daten werden im primären Replikat in den gleichen Tabellen gespeichert, die der Abfragespeicher auch bei Abfragen für das primäre Replikat verwendet, was zu einer Vergrößerung des Abfragespeichers führt.

Somit kann es bei starker Auslastung des Systems zu einer gewissen Verlangsamung kommen, da der Kanal überlastet ist. Darüber hinaus treten die aktuellen Ad-hoc-Abfrageerfassungsprobleme für den Abfragespeicher auch bei Workloads auf, die in sekundären Replikaten ausgeführt werden. Weitere Informationen dazu, wie Sie die relevantesten Daten im Abfragespeicher aufbewahren, finden Sie hier.

Siehe auch

Nächste Schritte