Aktive sekundäre Replikate: Lesbare sekundäre Replikate (AlwaysOn-Verfügbarkeitsgruppen)Active Secondaries: Readable Secondary Replicas (Always On Availability Groups)

Dieses Thema gilt für: JaSQL ServerkeineAzure SQL-DatenbankkeineAzure SQL Data Warehouse keine Parallel DatawarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Die Funktionen für aktive sekundäre Replikate in AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups umfassen Unterstützung für den schreibgeschützten Zugriff auf ein oder mehrere sekundäre Replikate (lesbare sekundäre Replikate).The AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups active secondary capabilities include support for read-only access to one or more secondary replicas (readable secondary replicas). Lesbare sekundäre Replikate lassen den schreibgeschützten Zugriff auf alle eigenen sekundären Datenbanken zu.A readable secondary replica allows read-only access to all its secondary databases. Bei lesbaren sekundären Datenbanken ist jedoch kein Schreibschutz festgelegt.However, readable secondary databases are not set to read-only. Sie sind dynamisch.They are dynamic. Eine sekundäre Datenbank wird geändert, wenn Änderungen an der zugehörigen primären Datenbank auf die sekundäre Datenbank angewendet werden.A given secondary database changes as changes on the corresponding primary database are applied to the secondary database. Bei einem typischen sekundären Replikat liegen die Daten in den sekundären Datenbanken nahezu in Echtzeit vor. Dies gilt auch für dauerhafte speicheroptimierte Tabellen.For a typical secondary replica, the data, including durable memory optimized tables, in the secondary databases is in near real time. Weiterhin werden Volltextindizes mit den sekundären Datenbanken synchronisiert.Furthermore, full-text indexes are synchronized with the secondary databases. In vielen Fällen beträgt die Datenlatenz zwischen einer primären Datenbank und der zugehörigen sekundären Datenbank nur wenige Sekunden.In many circumstances, data latency between a primary database and the corresponding secondary database is only a few seconds.

Sicherheitseinstellungen, die in den primären Datenbanken auftreten, werden in den sekundären Datenbanken beibehalten.Security settings that occur in the primary databases are persisted to the secondary databases. Dazu gehören Benutzer, Datenbankrollen und Anwendungsrollen sowie die jeweiligen zugehörigen Berechtigungen und die transparente Datenverschlüsselung (TDE), wenn diese in der primären Datenbank aktiviert ist.This includes users, database roles, and applications roles together with their respective permissions and transparent data encryption (TDE), if enabled on the primary database.

Hinweis

Sie können zwar keine Daten in sekundäre Datenbanken schreiben, aber in Datenbanken mit Lese-/Schreibzugriff auf der Serverinstanz, auf der die sekundären Replikate gehostet werden, einschließlich Benutzerdatenbanken und Systemdatenbanken, wie tempdb.Though you cannot write data to secondary databases, you can write to read-write databases on the server instance that hosts the secondary replica, including user databases and system databases such as tempdb.

AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups unterstützt auch das Umleiten von Verbindungsanforderungen für beabsichtigte Lesevorgänge an ein lesbares sekundäres Replikat (schreibgeschütztes Routing). also supports the re-routing of read-intent connection requests to a readable secondary replica (read-only routing). Weitere Informationen zum schreibgeschützten Routing finden Sie unter Verwenden eines Listeners zum Herstellen einer Verbindung mit einem schreibgeschützten sekundären Replikat (schreibgeschütztes Routing).For information about read-only routing, see Using a Listener to Connect to a Read-Only Secondary Replica (Read-Only Routing).

In diesem Thema:In this Topic:

VorteileBenefits

Die Weiterleitung schreibgeschützter Verbindungen an lesbare sekundäre Replikate bietet die folgenden Vorteile:Directing read-only connections to readable secondary replicas provides the following benefits:

  • Entlastet das primäre Replikat von sekundären schreibgeschützten Arbeitsauslastungen, wodurch dessen Ressourcen für unternehmenswichtige Arbeitsauslastungen zur Verfügung stehen.Offloads your secondary read-only workloads from your primary replica, which conserves its resources for your mission critical workloads. Unternehmenswichtige Lesearbeitsauslastungen oder Arbeitsauslastungen, die keine Latenzen tolerieren, sollten auf dem primären Replikat ausgeführt werden.If you have mission critical read-workload or the workload that cannot tolerate latency, you should run it on the primary.

  • Verbessert die Rendite von Systemen, auf denen lesbare sekundäre Replikate gehostet werden.Improves your return on investment for the systems that host readable secondary replicas.

    Außerdem bieten lesbare sekundäre Replikate folgendermaßen stabile Unterstützung für schreibgeschützte Vorgänge:In addition, readable secondaries provide robust support for read-only operations, as follows:

  • Durch automatische temporäre Statistiken für lesbare sekundäre Datenbanken werden schreibgeschützte Abfragen in datenträgerbasierten Tabellen optimiert.Automatic temporary statistics on readable secondary database optimize read-only queries on disk-based tables. Bei speicheroptimierten Tabellen werden die fehlenden Statistiken automatisch erstellt.For memory-optimized tables, the missing statistics are created automatically. Veraltete Statistiken werden jedoch nicht automatisch aktualisiert.However, there is no auto-update of stale statistics. Sie müssen die Statistiken auf dem primären Replikat manuell aktualisieren.You will need to manually update the statistics on the primary replica. Weitere Informationen finden Sie unter Statistiken für Datenbanken mit schreibgeschütztem Zugriffweiter unten in diesem Thema.For more information, see Statistics for Read-Only Access Databases, later in this topic.

  • Schreibgeschützte Arbeitsauslastungen für datenträgerbasierte Tabellen verwenden die Zeilenversionsverwaltung, um Blockierungskonflikte für sekundäre Datenbanken aufzuheben.Read-only workloads for disk-based tables use row versioning to remove blocking contention on the secondary databases. Alle Abfragen für sekundäre Datenbanken werden automatisch der Momentaufnahme-Transaktionsisolationsstufe zugeordnet, selbst wenn explizit andere Transaktionsisolationsstufen festgelegt wurden.All queries that run against the secondary databases are automatically mapped to snapshot isolation transaction level, even when other transaction isolation levels are explicitly set. Zudem werden alle Sperrhinweise ignoriert.Also, all locking hints are ignored. Dies schließt Leser-/Schreiberkonflikte aus.This eliminates reader/writer contention.

  • Schreibgeschützte Arbeitsauslastungen für dauerhafte speicheroptimierte Tabellen greifen unter Verwendung von systemeigenen gespeicherten Prozeduren oder SQL-Interoperabilität, für die hinsichtlich der Transaktionsisolationsstufen dieselben Einschränkungen gelten (siehe Isolationsstufen im Datenbankmodul), auf genau dieselbe Weise auf Daten wie in der primären Datenbank zu.Read-only workloads for memory-optimized durable tables access the data in exactly the same way it is accessed on the primary database, using native stored procedures or SQL Interoperability with the same transaction isolation level limitations (See Isolation Levels in the Database Engine). Auf dem primären Replikat ausgeführte Arbeitsauslastungen für die Berichterstellung oder schreibgeschützte Abfragen können unverändert auf dem sekundären Replikat ausgeführt werden.Reporting workload or read-only queries running on the primary replica can be run on the secondary replica without requiring any changes. Analog dazu können auf einem sekundären Replikat ausgeführte Arbeitsauslastungen für die Berichterstellung oder schreibgeschützte Abfragen unverändert auf dem primären Replikat ausgeführt werden.Similarly, a reporting workload or read-only queries running on a secondary replica can be run on the primary replica without requiring any changes. Ähnlich wie bei datenträgerbasierten Tabellen werden alle Abfragen für sekundäre Datenbanken automatisch der Momentaufnahme-Transaktionsisolationsstufe zugeordnet, selbst wenn explizit andere Transaktionsisolationsstufen festgelegt wurden.Similar to disk-based tables, all queries that run against the secondary databases are automatically mapped to snapshot isolation transaction level, even when other transaction isolation levels are explicitly set.

  • DML-Vorgänge sind für Tabellenvariablen datenträgerbasierter und speicheroptimierter Tabellentypen auf dem sekundären Replikat zulässig.DML operations are allowed on table variables both for disk-based and memory-optimized table types on the secondary replica.

Voraussetzungen für die VerfügbarkeitsgruppePrerequisites for the Availability Group

  • Lesbare sekundäre Replikate (erforderlich)Readable secondary replicas (required)

    Der Datenbankadministrator muss mindestens ein Replikat so konfigurieren, dass es bei Ausführung in der sekundären Rolle alle Verbindungen (nur für den schreibgeschützten Zugriff) oder aber nur Verbindungen für beabsichtigte Lesevorgänge zulässt.The database administrator needs to configure one or more replicas so that, when running under the secondary role, they allow either all connections (just for read-only access) or only read-intent connections.

    Hinweis

    Optional kann der Datenbankadministrator eines der Verfügbarkeitsreplikate so konfigurieren, dass schreibgeschützte Verbindungen bei Ausführung in der primären Rolle ausgeschlossen werden.Optionally, the database administrator can configure any of the availability replicas to exclude read-only connections when running under the primary role.

    Weitere Informationen finden Sie unter Informationen zum Clientverbindungszugriff auf Verfügbarkeitsreplikate (SQL Server).For more information, see About Client Connection Access to Availability Replicas (SQL Server).

  • VerfügbarkeitsgruppenlistenerAvailability group listener

    Um schreibgeschütztes Routing zu unterstützen, muss eine Verfügbarkeitsgruppe einen Verfügbarkeitsgruppenlistenerbesitzen.To support read-only routing, an availability group must possess an availability group listener. Der schreibgeschützte Client muss die eigenen Verbindungsanforderungen an diesen Listener weiterleiten, und in der Verbindungszeichenfolge des Clients muss der Anwendungszweck als "schreibgeschützt" angegeben sein.The read-only client must direct its connection requests to this listener, and the client's connection string must specify the application intent as "read-only." Es muss sich also um Verbindungsanforderungen für beabsichtigte Lesevorgängehandeln.That is, they must be read-intent connection requests.

  • Schreibgeschütztes RoutingRead only routing

    Alsschreibgeschütztes Routing wird die Fähigkeit von SQL Server bezeichnet, eingehende Verbindungsanforderungen für beabsichtigte Lesevorgänge, die an einen Verfügbarkeitsgruppenlistener gerichtet sind, an ein verfügbares lesbares sekundäres Replikat weiterzuleiten.Read-only routing refers to the ability of SQL Server to route incoming read-intent connection requests, that are directed to an availability group listener, to an available readable secondary replica. Für schreibgeschütztes Routing gelten folgende Voraussetzungen:The prerequisites for read-only routing are as follows:

    • Zur Unterstützung von schreibgeschütztem Routing muss für lesbare sekundäre Replikate eine URL für schreibgeschütztes Routing angegeben werden.To support read-only routing, a readable secondary replica requires a read-only routing URL. Diese URL wird nur wirksam, wenn das lokale Replikat unter der sekundären Rolle ausgeführt wird.This URL takes effect only when the local replica is running under the secondary role. Die URL für schreibgeschütztes Routing muss nach Bedarf replikatweise angegeben werden.The read-only routing URL must be specified on a replica-by-replica basis, as needed. Jede URL für schreibgeschütztes Routing wird zum Weiterleiten von Verbindungsanforderungen für beabsichtigte Lesevorgänge an ein bestimmtes lesbares sekundäres Replikat verwendet.Each read-only routing URL is used for routing read-intent connection requests to a specific readable secondary replica. In der Regel wird jedem lesbaren sekundären Replikat eine URL für schreibgeschütztes Routing zugewiesen.Typically, every readable secondary replica is assigned a read-only routing URL.

    • Jedes Verfügbarkeitsreplikat, das als primäres Replikat schreibgeschütztes Routing unterstützen soll, erfordert eine Liste für schreibgeschütztes Routing.Each availability replica that is to support read-only routing when it is the primary replica requires a read-only routing list. Eine Liste für schreibgeschütztes Routing wird nur wirksam, wenn das lokale Replikat unter der primären Rolle ausgeführt wird.A given read-only routing list takes effect only when the local replica is running under the primary role. Diese Liste muss nach Bedarf replikatweise angegeben werden.This list must be specified on a replica-by-replica basis, as needed. Normalerweise enthält jede Liste für schreibgeschütztes Routing jede URL für schreibgeschütztes Routing, wobei die URL des lokalen Replikats am Ende der Liste steht.Typically, each read-only routing list would contain every read-only routing URL, with the URL of the local replica at the end of the list.

      Hinweis

      Für Verbindungsanforderungen beabsichtigter Lesevorgänge kann replikateübergreifend ein Lastenausgleich ausgeführt werden.Read-intent connection requests can be load-balanced across replicas. Weitere Informationen finden Sie unter Konfigurieren von Lastenausgleich über schreibgeschützte Replikate hinweg.For more information, see Configure load-balancing across read-only replicas.

      Weitere Informationen finden Sie unter Konfigurieren des schreibgeschützten Routing für eine Verfügbarkeitsgruppe (SQL Server).For more information, see Configure Read-Only Routing for an Availability Group (SQL Server).

Hinweis

Weitere Informationen zu Verfügbarkeitsgruppenlistenern und zum schreibgeschützten Routing finden Sie unter Verfügbarkeitsgruppenlistener, Clientkonnektivität und Anwendungsfailover (SQL Server).For information about availability group listeners and more information about read-only routing, see Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server).

EinschränkungenLimitations and Restrictions

Folgende Vorgänge werden nicht vollständig unterstützt:Some operations are not fully supported, as follows:

  • Sobald für ein lesbares Replikat der Lesezugriff aktiviert ist, können Verbindungsanforderungen für die sekundären Datenbanken angenommen werden.As soon as a readable replica is enabled for read, it can start accepting connections to its secondary databases. Wenn in einer primären Datenbank jedoch aktive Transaktionen vorhanden sind, sind die Zeilenversionen in der entsprechenden sekundären Datenbank nicht vollständig verfügbar.However, if any active transactions exist on a primary database, the row versions will not be fully available on the corresponding secondary database. Für jegliche aktiven Transaktionen, die bei der Konfiguration des sekundären Replikats auf dem primären Replikat vorhanden waren, muss ein Commit oder ein Rollback durchgeführt werden.Any active transactions that existed on the primary replica when the secondary replica was configured must commit or roll back. Bis dieser Prozess abgeschlossen ist, ist die Zuordnung der Transaktionsisolationsstufe auf der sekundären Datenbank unvollständig, und Abfragen werden vorübergehend blockiert.Until this process completes, the transaction isolation level mapping on the secondary database is incomplete and queries are temporarily blocked.

    Warnung

    Die Ausführung von Transaktionen mit langer Ausführungszeit wirkt sich darauf aus, wie viele Zeilen mit Versionsangabe für datenträgerbasierte und speicheroptimierte Tabellen beibehalten werden.Running long transactions impacts the number of versioned rows kept, both for disk-based and memory-optimized tables.

  • Obwohl für speicheroptimierte Tabellen immer Zeilenversionen generiert werden, werden bei einer sekundären Datenbank mit speicheroptimierten Tabellen Abfragen blockiert, bis alle aktiven Transaktionen abgeschlossen sind, die sich im primären Replikat befanden, während der Lesezugriff für das sekundäre Replikat aktiviert wurde.On a secondary database with memory-optimized tables, even though row versions are always generated for memory-optimized tables, queries are blocked until all active transactions that existed in the primary replica when the secondary replica was enabled for read complete. Dadurch wird sichergestellt, dass der Arbeitsauslastung für die Berichterstellung und den schreibgeschützten Abfragen sowohl datenträgerbasierte als auch speicheroptimierte Tabellen gleichzeitig zur Verfügung stehen.This ensures that both disk-based and memory-optimized tables are available to the reporting workload and read-only queries at the same time.

  • Die Änderungsnachverfolgung und Change Data Capture werden nicht für sekundäre Datenbanken unterstützt, die zu einem lesbaren sekundären Replikat gehören:Change tracking and change data capture are not supported on secondary databases that belong to a readable secondary replica:

    • Die Änderungsnachverfolgung ist auf sekundären Datenbanken explizit deaktiviert.Change tracking is explicitly disabled on secondary databases.

    • Change Data Capture kann nur für eine sekundäre Replikatdatenbank aktiviert werden.Change Data Capture cannot be enabled only on a secondary replica database. Change Data Capture kann für die primäre Replikatdatenbank aktiviert werden, und die Änderungen können mithilfe der Funktionen für die sekundäre Replikatdatenbank aus den CDC-Tabellen gelesen werden.Change Data Capture can be enabled on the primary replica database and the changes can be read from the CDC tables using the functions on the secondary replica database.

  • Da Lesevorgänge der Momentaufnahme-Transaktionsisolationsstufe zugeordnet werden, kann das Cleanup von inaktiven Datensätzen auf dem primären Replikat durch Transaktionen auf einem oder mehreren sekundären Replikaten blockiert werden.Because read operations are mapped to snapshot isolation transaction level, the cleanup of ghost records on the primary replica can be blocked by transactions on one or more secondary replicas. Mit der Bereinigungsaufgabe für inaktive Datensätze werden die inaktiven Datensätze für datenträgerbasierte Tabellen auf dem primären Replikat automatisch bereinigt, wenn sie von sekundären Replikaten nicht mehr benötigt werden.The ghost record cleanup task will automatically clean up the ghost records for disk-based tables on the primary replica when they are no longer needed by any secondary replica. Dies ist analog zur Ausführung von Transaktionen auf dem primären Replikat.This is similar to what is done when you run transaction(s) on the primary replica. Im äußersten Fall müssen Sie Leseabfragen mit langer Laufzeit in der sekundären Datenbank abbrechen, die die Bereinigung der inaktiven Datensätze blockieren.In the extreme case on the secondary database, you will need to kill a long running read-query that is blocking the ghost cleanup. Hinweis: Die Bereinigung des inaktiven Elements kann blockiert werden, wenn das sekundäre Replikat getrennt oder die Datenverschiebung in der sekundären Datenbank angehalten wird.Note, the ghost clean can be blocked if the secondary replica gets disconnected or when data movement is suspended on the secondary database. Mit diesem Status wird zudem die Protokollkürzung verhindert. Wenn dieser Status weiterhin auftritt, sollten Sie demnach diese sekundäre Datenbank aus der Verfügbarkeitsgruppe entfernen.This state also prevents log truncation, so if this state persists, we recommend that you remove this secondary database from the availability group. Bei speicheroptimierten Tabellen besteht kein Problem mit dem Cleanup inaktiver Datensätze, da die Zeilenversionen im Arbeitsspeicher beibehalten werden und unabhängig von den Zeilenversionen auf dem primären Replikat sind.There is no ghost record cleanup issue with memory-optimized tables because the row versions are kept in memory and are independent of the row versions on the primary replica.

  • Beim DBCC SHRINKFILE-Vorgang für Dateien mit datenträgerbasierten Tabellen kann auf dem primären Replikat ein Fehler auftreten, wenn die Datei inaktive Datensätze enthält, die auf einem sekundären Replikat weiterhin benötigt werden.The DBCC SHRINKFILE operation on files containing disk-based tables might fail on the primary replica if the file contains ghost records that are still needed on a secondary replica.

  • Ab SQL Server 2014SQL Server 2014können lesbare sekundäre Replikate selbst dann online bleiben, wenn das primäre Replikat aufgrund einer Benutzeraktion oder eines Fehlers offline ist.Beginning in SQL Server 2014SQL Server 2014, readable secondary replicas can remain online even when the primary replica is offline due to user action or a failure. Allerdings ist in diesem Fall kein schreibgeschütztes Routing möglich, da der Verfügbarkeitsgruppenlistener ebenfalls offline ist.However, read-only routing does not work in this situation because the availability group listener is offline as well. Clients müssen bei schreibgeschützten Arbeitsauslastungen direkt eine Verbindung mit den schreibgeschützten sekundären Replikaten herstellen.Clients must connect directly to the read-only secondary replicas for read-only workloads.

Hinweis

Wenn Sie die dynamische Verwaltungssicht sys.dm_db_index_physical_stats auf einer Serverinstanz abfragen, die ein lesbares sekundäres Replikat hostet, kann ein REDO-Blockierungsproblem auftreten.If you query the sys.dm_db_index_physical_stats dynamic management view on a server instance that is hosting a readable secondary replica, you might encounter a REDO blocking issue. Dies kommt daher, dass diese dynamische Verwaltungssicht eine IS-Sperre für die angegebene Benutzertabelle oder Sicht erhält, die Anforderungen von einem REDO-Thread für eine X-Sperre dieser Benutzertabelle oder Sicht blockieren kann.This is because this dynamic management view acquires an IS lock on the specified user table or view that can block requests by a REDO thread for an X lock on that user table or view.

LeistungsaspektePerformance Considerations

In diesem Abschnitt werden mehrere Überlegungen zur Leistung für lesbare sekundäre Datenbanken erläutert.This section discusses several performance considerations for readable secondary databases

In diesem Abschnitt:In This Section:

DatenlatenzData Latency

Das Implementieren von schreibgeschütztem Zugriff auf sekundäre Replikate ist hilfreich, sofern Ihre schreibgeschützten Arbeitsauslastungen eine gewisse Datenlatenz tolerieren können.Implementing read-only access to secondary replicas is useful if your read-only workloads can tolerate some data latency. Führen Sie in Situationen mit inakzeptabler Datenlatenz ggf. schreibgeschützte Arbeitsauslastungen für das primäre Replikat aus.In situations where data latency is unacceptable, consider running read-only workloads against the primary replica.

Vom primären Replikat werden Protokolldatensätze der Änderungen in der primären Datenbank an die sekundären Replikate gesendet.The primary replica sends log records of changes on primary database to the secondary replicas. In der jeweiligen sekundären Datenbank werden die Protokolldatensätze von einem dedizierten REDO-Thread angewendet.On each secondary database, a dedicated redo thread applies the log records. In einer schreibgeschützten sekundären Datenbank erscheint eine angegebene Datenänderung erst in den Abfrageergebnissen, wenn der Protokolldatensatz, der die Änderung enthält, auf die sekundäre Datenbank angewendet und für die Transaktion in der primären Datenbank ein Commit ausgeführt wurde.On a read-access secondary database, a given data change does not appear in query results until the log record that contains the change has been applied to the secondary database and the transaction has been committed on primary database.

Dies weist auf eine gewisse Latenz zwischen den primären und sekundären Replikaten hin, wobei es sich in der Regel nur um wenige Sekunden handelt.This means that there is some latency, usually only a matter of seconds, between the primary and secondary replicas. In außergewöhnlichen Fällen, beispielsweise bei Netzwerkproblemen, die den Durchsatz reduzieren, kann die Latenz jedoch signifikant werden.In unusual cases, however, for example if network issues reduce throughput, latency can become significant. Die Latenz nimmt bei E/A-Engpässen und bei angehaltener Datenverschiebung zu.Latency increases when I/O bottlenecks occur and when data movement is suspended. Zur Überwachung einer angehaltenen Datenverschiebung können Sie das AlwaysOn-Dashboard oder die dynamische Verwaltungssicht sys.dm_hadr_database_replica_states verwenden.To monitor suspended data movement, you can use the Always On Dashboard or the sys.dm_hadr_database_replica_states dynamic management view.

Datenlatenz bei Datenbanken mit speicheroptimierten TabellenData Latency on databases with memory-optimized tables

In SQL Server 2014SQL Server 2014 galten besondere Überlegungen zur Datenlatenz für aktive sekundäre Replikate. Informationen dazu finden Sie unter SQL Server 2014SQL Server 2014Aktive sekundäre Replikate: Lesbare sekundäre Replikate.In SQL Server 2014SQL Server 2014 there were special considerations around data latency on active secondaries - see SQL Server 2014SQL Server 2014 Active Secondaries: Readable Secondary Replicas. Ab SQL Server 2016SQL Server 2016 gelten keine Besonderheiten mehr bezüglich der Datenlatenz für speicheroptimierte Tabellen.Starting SQL Server 2016SQL Server 2016 there are no special considerations around data latency for memory-optimized tables. Die erwartete Datenlatenz für speicheroptimierte Tabellen ist mit der Latenz für datenträgerbasierte Tabellen vergleichbar.The expected data latency for memory-optimized tables is comparable to the latency for disk-based tables.

Auswirkungen auf schreibgeschützte ArbeitsauslastungenRead-Only Workload Impact

Wenn Sie ein sekundäres Replikat für schreibgeschützten Zugriff konfigurieren, belegen die schreibgeschützten Arbeitsauslastungen in den sekundären Datenbanken Systemressourcen, z. B. CPU und E/A-Vorgänge (für datenträgerbasierte Tabellen) aus REDO-Threads, insbesondere wenn die schreibgeschützten Arbeitsauslastungen für datenträgerbasierte Tabellen äußerst E/A-intensiv sind.When you configure a secondary replica for read-only access, your read-only workloads on the secondary databases consume system resources, such as CPU and I/O (for disk-based tables) from redo threads, especially if the read-only workloads on disk-based tables are highly I/O-intensive. Der Zugriff auf speicheroptimierte Tabellen hat keine Auswirkungen auf die E/A-Leistung, weil alle Zeilen im Arbeitsspeicher enthalten sind.There is no IO impact when accessing memory-optimized tables because all the rows reside in memory.

Schreibgeschützte Arbeitsauslastungen auf den sekundären Replikaten können zudem Änderungen der Datendefinitionssprache (DDL) blockieren, die durch Protokolldatensätze angewendet werden.Also, read-only workloads on the secondary replicas can block data definition language (DDL) changes that are applied through log records.

  • Obwohl die Lesevorgänge wegen der Zeilenversionsverwaltung über keine gemeinsamen Sperren verfügen, basieren diese Vorgänge auf Schemastabilitätssperren (Sch-S). Dadurch werden u. U. REDO-Vorgänge blockiert, die DDL-Änderungen anwenden.Even though the read operations do not take shared locks because of row versioning, these operations take schema stability (Sch-S) locks, which can block redo operations that are applying DDL changes. DDL-Vorgänge umfassen ALTER/DROP-Tabellen und -Sichten, aber keine DROP- oder ALTER-Anweisungen gespeicherter Prozeduren.DDL operations include ALTER/DROP tables and Views but not DROP or ALTER of stored procedures. Angenommen, Sie löschen eine datenträgerbasierte oder speicheroptimierte Tabelle auf dem primären Replikat.So for example, if you drop a table disk-based or memory-optimized, on primary. Wenn der Protokolldatensatz von einem REDO-Thread verarbeitet wird, um die Tabelle zu löschen, muss er eine SCH_M-Sperre für die Tabelle abrufen und kann durch eine laufende Abfrage, die auf die Tabelle zugreift, blockiert werden.When REDO thread processes the log record to drop the table, it must acquire a SCH_M lock on the table and can get blocked by a running query accessing table. Auf dem primärem Replikat ist das Verhalten identisch, mit der Ausnahme, dass die Tabelle im Rahmen einer Benutzersitzung und nicht in einem REDO-Thread gelöscht wird.This is the same behavior on primary replica except that the drop of the table is done as part of a user session and not REDO thread.

  • Es gibt weitere Gründe für das Blockieren speicheroptimierter Tabellen.There is additional blocking Memory-Optimized Tables. Durch das Löschen einer systemeigenen gespeicherten Prozedur kann ein REDO-Thread blockiert werden, wenn die systemeigene gespeicherte Prozedur gleichzeitig auf dem sekundären Replikat ausgeführt wird.A drop of native stored procedure can cause REDO thread to block if there is a concurrent execution of the native stored procedure on the secondary replica. Auf dem primärem Replikat ist das Verhalten identisch, mit der Ausnahme, dass die gespeicherte Prozedur im Rahmen einer Benutzersitzung und nicht in einem REDO-Thread gelöscht wird.This is the same behavior on the primary replica except that the drop of the stored procedure is done as part of a user session and not REDO thread.

    Beachten Sie die bewährten Methoden zum Erstellen von Abfragen, und wenden Sie diese Methoden auf die sekundären Datenbanken an.Be aware of best practices around building queries, and exercise those best practices in the secondary databases. Planen Sie beispielsweise Abfragen mit langer Laufzeit wie Datenaggregationen in Zeiträumen mit geringer Aktivität.For example, schedule long-running queries such as aggregations of data during times of low activity.

Hinweis

Wird ein REDO-Thread von Abfragen auf dem sekundären Replikat blockiert, wird das XEvent sqlserver.lock_redo_blocked ausgelöst.If a redo thread is blocked by queries on a secondary replica, the sqlserver.lock_redo_blocked XEvent is raised.

IndizierungIndexing

Um schreibgeschützte Arbeitsauslastungen auf den lesbaren sekundären Replikaten zu optimieren, können Sie ggf. Indizes in den Tabellen der sekundären Datenbanken erstellen.To optimize read-only workloads on the readable secondary replicas, you may want to create indexes on the tables in the secondary databases. Da Sie keine Schema- oder Datenänderungen auf den sekundären Datenbanken vornehmen können, erstellen Sie Indizes in den primären Datenbanken, und lassen Sie die Übertragung der Änderungen auf die sekundäre Datenbank mittels REDO-Prozess zu.Because you cannot make schema or data changes on the secondary databases, create indexes in the primary databases and allow the changes to transfer to the secondary database through the redo process.

Zur Überwachung der Indexverwendung auf einem sekundären Replikat fragen Sie die Spalten user_seeks, user_scansund user_lookups der dynamischen Verwaltungssicht sys.dm_db_index_usage_stats ab.To monitor index usage activity on a secondary replica, query the user_seeks, user_scans, and user_lookups columns of the sys.dm_db_index_usage_stats dynamic management view.

Statistiken für Datenbanken mit schreibgeschütztem ZugriffStatistics for Read-Only Access Databases

Statistiken zu Spalten von Tabellen und indizierten Sichten werden verwendet, um Abfragepläne zu optimieren.Statistics on columns of tables and indexed views are used to optimize query plans. Bei Verfügbarkeitsgruppen werden Statistiken, die in den primären Datenbanken erstellt und verwaltet werden, automatisch in den sekundären Datenbanken beibehalten, wenn die Transaktionsprotokoll-Datensätze angewendet werden.For availability groups, statistics that are created and maintained on the primary databases are automatically persisted on the secondary databases as part of applying the transaction log records. Für die schreibgeschützte Arbeitsauslastung in den sekundären Datenbanken sind jedoch möglicherweise andere Statistiken als die erforderlich, die in den primären Datenbanken erstellt werden.However, the read-only workload on the secondary databases may need different statistics than those that are created on the primary databases. Da sekundäre Datenbanken jedoch auf schreibgeschützten Zugriff beschränkt sind, können für die sekundären Datenbanken keine Statistiken erstellt werden.However, because secondary databases are restricted to read-only access, statistics cannot be created on the secondary databases.

Zur Behebung dieses Problems erstellt und verwaltet das sekundäre Replikat temporäre Statistiken für sekundäre Datenbanken in tempdb.To address this problem, the secondary replica creates and maintains temporary statistics for secondary databases in tempdb. Das Suffix „_readonly_database_statistic“ wird an den Namen temporärer Statistiken angefügt, um die temporären Statistiken von den dauerhaften Statistiken zu unterscheiden, die von der primären Datenbank beibehalten werden.The suffix _readonly_database_statistic is appended to the name of temporary statistics to differentiate them from the permanent statistics that are persisted from the primary database.

Nur SQL ServerSQL Server kann temporäre Statistiken erstellen und aktualisieren.Only SQL ServerSQL Server can create and update temporary statistics. Sie können jedoch temporäre Statistiken löschen und ihre Eigenschaften mit den gleichen Tools überwachen, die Sie für dauerhafte Statistiken verwenden:However, you can delete temporary statistics and monitor their properties using the same tools that you use for permanent statistics:

  • Löschen Sie temporäre Statistiken mit der Anweisung DROP STATISTICS Transact-SQLTransact-SQL .Delete temporary statistics using the DROP STATISTICS Transact-SQLTransact-SQL statement.

  • Überwachen Sie Statistiken mit den Katalogsichten sys.stats und sys.stats_columns .Monitor statistics using the sys.stats and sys.stats_columns catalog views. sys_stats beinhaltet eine Spalte, is_temporary. Damit wird angegeben, welche Statistiken dauerhaft und welche temporär sind.sys_stats includes a column, is_temporary, to indicate which statistics are permanent and which are temporary.

    Automatische Updates von Statistiken werden für speicheroptimierte Tabellen auf dem primären oder sekundären Replikat nicht unterstützt.There is no support for auto-statistics update for memory-optimized tables on the primary or secondary replica. Sie müssen die Abfrageleistung und Pläne auf dem sekundären Replikat überwachen und die Statistiken auf dem primären Replikat ggf. manuell aktualisieren.You must monitor query performance and plans on the secondary replica and manually update the statistics on the primary replica when needed. Allerdings werden die fehlenden Statistiken auf dem primären und sekundären Replikat automatisch erstellt.However, the missing statistics are automatically created both on primary and secondary replica.

    Weitere Informationen zu SQL Server-Statistiken finden Sie unter Statistik.For more information about SQL Server statistics, see Statistics.

    In diesem Abschnitt:In This Section:

  • Veraltete dauerhafte Statistiken in sekundären DatenbankenStale Permanent Statistics on Secondary Databases

  • EinschränkungenLimitations and Restrictions

Veraltete dauerhafte Statistiken in sekundären DatenbankenStale Permanent Statistics on Secondary Databases

SQL ServerSQL Server erkennt, wenn dauerhafte Statistiken in einer sekundären Datenbank veraltet sind. detects when permanent statistics on a secondary database are stale. Änderungen an den dauerhaften Statistiken können aber nur durch Änderungen an der primären Datenbank vorgenommen werden.But changes cannot be made to the permanent statistics except through changes on the primary database. Zur Abfrageoptimierung erstellt SQL ServerSQL Server temporäre Statistiken für datenträgerbasierte Tabellen in der sekundären Datenbank und verwendet diese Statistiken anstelle der veralteten dauerhaften Statistiken.For query optimization, SQL ServerSQL Server creates temporary statistics for disk-based tables on the secondary database and uses these statistics instead of the stale permanent statistics.

Wenn die dauerhaften Statistiken in der primären Datenbank aktualisiert werden, werden sie automatisch in der sekundären Datenbank dauerhaft gespeichert.When the permanent statistics are updated on the primary database, they are automatically persisted to the secondary database. Dann verwendet SQL ServerSQL Server die aktualisierten dauerhaften Statistiken, die aktueller als die temporären Statistiken sind.Then SQL ServerSQL Server uses the updated permanent statistics, which are more current than the temporary statistics.

Wenn die Verfügbarkeitsgruppe ein Failover ausführt, werden temporäre Statistiken auf allen sekundären Replikaten gelöscht.If the availability group fails over, temporary statistics are deleted on all of the secondary replicas.

EinschränkungenLimitations and Restrictions

  • Da temporäre Statistiken in tempdbgespeichert werden, werden durch einen Neustart des SQL ServerSQL Server -Diensts alle temporären Statistiken entfernt.Because temporary statistics are stored in tempdb, a restart of the SQL ServerSQL Server service causes all temporary statistics to disappear.

  • Das Suffix „_readonly_database_statistic“ ist für von SQL ServerSQL Servergenerierte Statistiken reserviert.The suffix _readonly_database_statistic is reserved for statistics generated by SQL ServerSQL Server. Sie können dieses Suffix nicht verwenden, wenn Sie Statistiken in einer primären Datenbank erstellen.You cannot use this suffix when creating statistics on a primary database. Weitere Informationen finden Sie unter Statistics.For more information, see Statistics.

Zugreifen auf speicheroptimierte Tabellen auf einem sekundären ReplikatAccessing memory-optimized tables on a Secondary Replica

Mit speicheroptimierten Tabellen können für primäre und sekundäre Replikate dieselben Transaktionsisolationsstufen verwendet werden.The transaction isolation levels that can be used with memory-optimized tables on a secondary replica are the same as on the primary replica. Es wird empfohlen, die Isolationsstufe auf Sitzungsebene auf READ COMMITTED und die Datenbankebenenoption auf MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT auf ON festzulegen.The recommendation is to set the session-level isolation level to READ COMMITTED and set the database-level option MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT to ON. Beispiel:For example:

ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON  
GO  
SET TRANSACTION ISOLATION LEVEL READ COMMITTED  
GO  
SELECT SUM(UnitPrice*OrderQty)   
FROM Sales.SalesOrderDetail_inmem  
GO  

Aspekte der KapazitätsplanungCapacity Planning Considerations

  • Bei datenträgerbasierten Tabellen können lesbare sekundäre Replikate aus zwei Gründen Speicherplatz in tempdb beanspruchen:In the case of disk-based tables, readable secondary replicas can require space in tempdb for two reasons:

    • In der Momentaufnahme-Isolationsstufe werden Zeilenversionen in tempdbkopiert.Snapshot isolation level copies row versions into tempdb.

    • Temporäre Statistiken für sekundäre Datenbanken werden in tempdberstellt und verwaltet.Temporary statistics for secondary databases are created and maintained in tempdb. Die temporären Statistiken können einen leichten Anstieg der Größe von tempdbverursachen.The temporary statistics can cause a slight increase in the size of tempdb. Weitere Informationen finden Sie unter Statistiken für Datenbanken mit schreibgeschütztem Zugriffspäter in diesem Abschnitt.For more information, see Statistics for Read-Only Access Databases, later in this section.

  • Wenn Sie für eines oder mehrere sekundäre Replikate Lesezugriff konfigurieren, wird von den primären Datenbanken für gelöschte, geänderte oder eingefügte Datenzeilen beim Speichern von Zeigern auf Zeilenversionen in den sekundären Datenbanken für datenträgerbasierte Tabellen ein Mehraufwand von 14 Bytes verursacht.When you configure read-access for one or more secondary replicas, the primary databases add 14 bytes of overhead on deleted, modified, or inserted data rows to store pointers to row versions on the secondary databases for disk-based tables. Dieser Mehraufwand von 14 Bytes geht auf die sekundären Datenbanken über.This 14-byte overhead is carried over to the secondary databases. Da der Mehraufwand von 14 Bytes auf die Datenzeilen übertragen wird, können Seitenteilungen auftreten.As the 14-byte overhead is added to data rows, page splits might occur.

    Die Zeilenversionsdaten werden nicht von den primären Datenbanken generiert.The row version data is not generated by the primary databases. Stattdessen werden die Zeilenversionen von den sekundären Datenbanken generiert.Instead, the secondary databases generate the row versions. Durch die Zeilenversionsverwaltung nimmt jedoch die Datenspeicherung in der primären und in der sekundären Datenbank zu.However, row versioning increases data storage in both the primary and secondary databases.

    Das Hinzufügen der Zeilenversionsdaten hängt von der Momentaufnahmeisolation oder der Einstellung der READ_COMMITTED_SNAPSHOT-Isolationsstufe (RCSI) in der primären Datenbank ab.The addition of the row version data depends on the snapshot isolation or read-committed snapshot isolation (RCSI) level setting on the primary database. In der folgenden Tabelle wird das Verhalten der Versionsverwaltung in einer lesbaren sekundären Datenbank mit unterschiedlichen Einstellungen für datenträgerbasierte Tabellen beschrieben.The table below describes the behavior of versioning on a readable secondary database under different settings for disk based tables.

    Lesbares sekundäres Replikat?Readable secondary replica? Ist Momentaufnahmeisolation oder RCSI-Stufe aktiviert?Snapshot isolation or RCSI level enabled? Primäre DatenbankPrimary Database Sekundäre DatenbankSecondary Database
    NeinNo NeinNo Keine Zeilenversionen oder 14-Byte-MehraufwandNo row versions or 14-byte overhead Keine Zeilenversionen oder 14-Byte-MehraufwandNo row versions or 14-byte overhead
    NeinNo JaYes Zeilenversionen und 14-Byte-MehraufwandRow versions and 14-byte overhead Keine Zeilenversionen, aber 14-Byte-MehraufwandNo row versions, but 14-byte overhead
    JaYes NeinNo Keine Zeilenversionen, aber 14-Byte-MehraufwandNo row versions, but 14-byte overhead Zeilenversionen und 14-Byte-MehraufwandRow versions and 14-byte overhead
    JaYes JaYes Zeilenversionen und 14-Byte-MehraufwandRow versions and 14-byte overhead Zeilenversionen und 14-Byte-MehraufwandRow versions and 14-byte overhead

Verwandte AufgabenRelated Tasks

Verwandte InhalteRelated Content

Siehe auchSee Also

Übersicht über AlwaysOn-Verfügbarkeitsgruppen (SQL Server) Overview of Always On Availability Groups (SQL Server)
Informationen zum Clientverbindungszugriff auf Verfügbarkeitsreplikate (SQL Server) About Client Connection Access to Availability Replicas (SQL Server)
Verfügbarkeitsgruppenlistener, Clientkonnektivität und Anwendungsfailover (SQL Server) Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server)
StatistikStatistics