Alleen-lezen replica's gebruiken om alleen-lezen queryworkloads te offloaden

VAN TOEPASSING OP: Azure SQL Database Azure SQL Managed Instance

Als onderdeel van de architectuur voor hoge beschikbaarheid wordt elke individuele database, elastische pooldatabase en beheerd exemplaar in de servicelaag Premium en Bedrijfskritiek automatisch ingericht met een primaire replica voor lezen/schrijven en verschillende secundaire alleen-lezen replica's. De secundaire replica's worden ingericht met dezelfde rekenkracht als de primaire replica. Met de uitschaalfunctie voor lezen kunt u alleen-lezenworkloads offloaden met behulp van de rekencapaciteit van een van de alleen-lezen replica's, in plaats van ze op de lees-/schrijfreplica uit te schakelen. Op deze manier kunnen sommige alleen-lezen workloads worden geïsoleerd van de lees-/schrijfworkloads en hebben ze geen invloed op de prestaties. De functie is bedoeld voor de toepassingen die logisch gescheiden alleen-lezenworkloads bevatten, zoals analyses. In de Premium en Bedrijfskritiek-servicelagen kunnen toepassingen zonder extra kosten prestatievoordelen behalen met behulp van deze extra capaciteit.

De functie uitschalen voor lezen is ook beschikbaar in de Hyperscale-servicelaag wanneer ten minste één secundaire replica wordt toegevoegd. Hyperscale secundaire benoemde replica's bieden onafhankelijke schaalbaarheid, isolatie van toegang, isolatie van workloads, uitschalen van grote leestoegang en andere voordelen. Meerdere secundaire HA-replica's kunnen worden gebruikt voor taakverdeling van alleen-lezen workloads waarvoor meer resources nodig zijn dan beschikbaar is op één secundaire HA-replica.

De architectuur met hoge beschikbaarheid van basic-, Algemeen- en Algemeen-servicelagen bevat geen replica's. De functie uitschalen voor lezen is niet beschikbaar in deze servicelagen. Geo-replica's kunnen echter vergelijkbare functionaliteit bieden in deze servicelagen.

In het volgende diagram ziet u de functie voor Premium en Bedrijfskritiek databases en beheerde exemplaren.

Alleen-lezenreplica's

De functie uitschalen voor lezen is standaard ingeschakeld voor nieuwe Premium-, Bedrijfskritiek- en Hyperscale-databases.

Notitie

Uitschalen van leesgegevens is altijd ingeschakeld in de Bedrijfskritiek-servicelaag van Managed Instance en voor Hyperscale-databases met ten minste één secundaire replica.

Als uw SQL connection string is geconfigureerd met , wordt de toepassing omgeleid naar een ApplicationIntent=ReadOnly alleen-lezen replica van die database of het beheerde exemplaar. Zie Specifying Application Intent (Toepassingsintentie opgeven) voor meer informatie over het gebruik ApplicationIntent van de eigenschap.

Als u ervoor wilt zorgen dat de toepassing verbinding maakt met de primaire replica, ongeacht de instelling in de SQL connection string, moet u uitschalen van leesgegevens expliciet uitschakelen bij het maken van de database of bij het wijzigen van de ApplicationIntent configuratie. Als u bijvoorbeeld uw database bijwerkt van de Standard- of Algemeen-laag naar Premium of Bedrijfskritiek en u er zeker van wilt zijn dat al uw verbindingen naar de primaire replica blijven gaan, schakelt u uitschalen van leesgegevens uit. Zie Uitschalen voor lezen in- en uitschakelen voor meer informatie over het uitschakelen ervan.

Notitie

Query Store- en SQL Profiler-functies worden niet ondersteund op alleen-lezen replica's.

Gegevensconsistentie

Gegevenswijzigingen die zijn aangebracht op de primaire replica worden asynchroon doorgegeven aan alleen-lezen replica's. In een sessie die is verbonden met een alleen-lezenreplica, zijn lees lezen altijd transactioneel consistent. Omdat de latentie voor gegevens doorgifte echter variabel is, kunnen verschillende replica's gegevens retourneren op enigszins verschillende tijdspunten ten opzichte van de primaire en elkaar. Als een alleen-lezen replica niet meer beschikbaar is en de sessie opnieuw verbinding maakt, kan deze verbinding maken met een replica die zich op een ander tijdstip dan de oorspronkelijke replica. En als een toepassing gegevens wijzigt met behulp van een lees-/schrijfsessie en deze onmiddellijk leest met behulp van een alleen-lezen sessie, is het ook mogelijk dat de meest recente wijzigingen niet onmiddellijk zichtbaar zijn op de alleen-lezen replica.

De typische latentie voor het doorgeven van gegevens tussen de primaire replica en alleen-lezen replica's varieert in het bereik van tientallen milliseconden tot seconden met één cijfer. Er is echter geen vaste bovengrens voor latentie bij het doorgeven van gegevens. Voorwaarden zoals hoog resourcegebruik op de replica kunnen de latentie aanzienlijk verhogen. Toepassingen waarvoor gegarandeerde gegevensconsistentie tussen sessies is vereist of waarvoor vastgelegde gegevens onmiddellijk kunnen worden gelezen, moeten de primaire replica gebruiken.

Notitie

Zie Bewaking en probleemoplossing voor alleen-lezenreplica voor het bewaken van de latentie bij het doorgeven van gegevens.

Verbinding maken naar een alleen-lezen replica

Wanneer u uitschalen voor lezen inschakelen voor een database, bepaalt de optie in de connection string die wordt geleverd door de client of de verbinding wordt doorgeleid naar de schrijfreplica of naar een ApplicationIntent alleen-lezen replica. Als de waarde ApplicationIntent (de standaardwaarde) is, wordt de verbinding ReadWrite omgeleid naar de replica voor lezen/schrijven. Dit is identiek aan het gedrag wanneer ApplicationIntent niet is opgenomen in de connection string. Als de ApplicationIntent waarde ReadOnly is, wordt de verbinding doorgeleid naar een alleen-lezen replica.

Met de volgende connection string de client bijvoorbeeld verbonden met een alleen-lezen replica (vervang de items tussen de punthaken door de juiste waarden voor uw omgeving en laat de punthaken vallen):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Een van de volgende verbindingsreeksen verbindt de client met een lees-/schrijfreplica (vervang de items tussen de punthaken door de juiste waarden voor uw omgeving en laat de punthaken vallen):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadWrite;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Controleer of er een verbinding is met een alleen-lezen replica

U kunt controleren of u bent verbonden met een alleen-lezen replica door de volgende query uit te voeren in de context van uw database. Deze retourneerde READ_ONLY wanneer u verbonden bent met een alleen-lezen replica.

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');

Notitie

In Premium en Bedrijfskritiek-servicelagen is slechts één van de alleen-lezen replica's op een bepaald moment toegankelijk. Hyperscale ondersteunt meerdere alleen-lezen replica's.

Alleen-lezen replica's bewaken en problemen oplossen

Wanneer dynamische beheerweergaven (DMV's) zijn verbonden met een alleen-lezen replica, geven ze de status van de replica weer en kunnen ze worden opgevraagd voor bewakings- en probleemoplossingsdoeleinden. De database-engine biedt meerdere weergaven om een groot aantal bewakingsgegevens beschikbaar te maken.

De volgende weergaven worden vaak gebruikt voor het bewaken en oplossen van problemen met replica's:

Name Doel
sys.dm_db_resource_stats Biedt metrische gegevens over resourcegebruik voor het afgelopen uur, waaronder CPU, gegevens-I/O en schrijfgebruik van logboeken ten opzichte van servicedoelstellingslimieten.
sys.dm_os_wait_stats Biedt statistische wachtstatistieken voor het exemplaar van de database-engine.
sys.dm_database_replica_states Geeft de status van replica's en synchronisatiestatistieken. De grootte en de redo-snelheid van de wachtrij opnieuw doen fungeren als indicatoren van latentie bij het doorgeven van gegevens op de alleen-lezen replica.
sys.dm_os_performance_counters Biedt prestatiemeters voor database-engine.
sys.dm_exec_query_stats Biedt uitvoeringsstatistieken per query, zoals aantal uitvoeringen, gebruikte CPU-tijd, enzovoort.
sys.dm_exec_query_plan() Biedt queryplannen in cache.
sys.dm_exec_sql_text() Biedt querytekst voor een queryplan in de cache.
sys.dm_exec_query_profiles Biedt de voortgang van query's in realtime terwijl query's worden uitgevoerd.
sys.dm_exec_query_plan_stats() Bevat het laatst bekende werkelijke uitvoeringsplan, inclusief runtimestatistieken voor een query.
sys.dm_io_virtual_file_stats() Biedt opslag-IOPS, doorvoer en latentiestatistieken voor alle databasebestanden.

Notitie

De sys.resource_stats sys.elastic_pool_resource_stats DMV's en in de logische hoofddatabase retourneren gegevens over resourcegebruik van de primaire replica.

Alleen-lezen replica's bewaken met uitgebreide gebeurtenissen

Een uitgebreide gebeurtenissessie kan niet worden gemaakt wanneer er verbinding is met een alleen-lezen replica. In Azure SQL Database repliceren de definities van uitgebreide gebeurtenissessies binnen databasebereik die zijn gemaakt en gewijzigd op de primaire replica naar alleen-lezen replica's, inclusief geo-replica's, en leggen ze gebeurtenissen vast op alleen-lezen replica's.

Een uitgebreide gebeurtenissessie op een alleen-lezen replica die is gebaseerd op een sessiedefinitie van de primaire replica kan onafhankelijk van de primaire replica worden gestart en gestopt. Wanneer een uitgebreide gebeurtenissessie wordt weggevallen op de primaire replica, wordt deze ook op alle alleen-lezen replica's uitgevallen.

Transactie-isolatieniveau voor alleen-lezen replica's

Query's die worden uitgevoerd op alleen-lezen replica's, worden altijd aan het isolatieniveau van de momentopnametransactie toe te staan. Isolatie van momentopnamen maakt gebruik van rijversies om blokkerende scenario's te voorkomen waarbij lezers schrijvers blokkeren.

In zeldzame gevallen, als een transactie voor isolatie van momentopnamen toegang heeft tot objectmetagegevens die zijn gewijzigd in een andere gelijktijdige transactie, kan de fout 3961worden weergegeven, "Snapshot Isolation Transaction failed in database '%.*ls' omdat het object dat wordt gebruikt door de instructie is gewijzigd door een DDL-instructie in een andere gelijktijdige transactie sinds het begin van deze transactie. Dit is niet toegestaan omdat versiebeheer niet is ingeschakeld voor de metagegevens. Een gelijktijdige update van metagegevens kan leiden tot inconsistenties als deze worden gecombineerd met isolatie van momentopnamen.

Langlopende query's op alleen-lezen replica's

Query's die worden uitgevoerd op alleen-lezen replica's, moeten toegang hebben tot metagegevens voor de objecten waarnaar in de query wordt verwezen (tabellen, indexen, statistieken, enzovoort) In zeldzame gevallen, als objectmetagegevens worden gewijzigd op de primaire replica terwijl een query hetzelfde object op de alleen-lezen replica vergrendelt, kan de query het proces blokkeren dat wijzigingen van de primaire replica naar de alleen-lezen replica uitvoert. Als een dergelijke query lang zou worden uitgevoerd, zou de alleen-lezen replica aanzienlijk niet gesynchroniseerd zijn met de primaire replica. Voor replica's die mogelijk failoverdoelen zijn (secundaire replica's in Premium en Bedrijfskritiek-servicelagen, Hyperscale HA-replica's en alle geo-replica's), zou dit ook het herstel van de database vertragen als er een failover zou plaatsvinden, wat leidt tot langere dan verwachte downtime.

Als een langdurige query op een alleen-lezen replica direct of indirect dit soort blokkering veroorzaakt, kan deze automatisch worden beëindigd om overmatige gegevenslatentie en mogelijke gevolgen voor de beschikbaarheid van de database te voorkomen. De sessie ontvangt fout 1219, 'Uw sessie is verbroken vanwege een DDL-bewerking met hoge prioriteit', of fout 3947, 'The transaction was aborted because the secondary compute failed to catch up redo. De transactie opnieuw proberen."

Notitie

Als u fout 3961, 1219 of 3947 krijgt bij het uitvoeren van query's op een alleen-lezen replica, kunt u de query opnieuw proberen. U kunt ook bewerkingen vermijden die objectmetagegevens wijzigen (schemawijzigingen, indexonderhoud, updates van statistieken, enzovoort) op de primaire replica terwijl langlopende query's worden uitgevoerd op secundaire replica's.

Tip

In Premium- en Bedrijfskritiek-servicelagen kunnen, wanneer ze zijn verbonden met een alleen-lezen replica, de kolommen en in de DMV van sys.dm_database_replica_states worden gebruikt om het gegevenssynchronisatieproces te bewaken, wat dient als indicatoren van latentie bij het doorgeven van gegevens op de redo_queue_size redo_rate alleen-lezen replica.

Uitschalen voor lezen in- en uitschakelen

Uitschalen van leesweergave is standaard ingeschakeld in Premium-, Bedrijfskritiek- en Hyperscale-servicelagen. Uitschalen van leesfuncties kan niet worden ingeschakeld in de servicelagen Basic, Standard of Algemeen. Uitschalen van leesgegevens wordt automatisch uitgeschakeld voor Hyperscale-databases die zijn geconfigureerd met nul secundaire replica's.

U kunt uitschalen van leesgegevens voor individuele databases en elastische pooldatabases in de Premium- of Bedrijfskritiek-servicelagen uitschakelen en opnieuw inschakelen met behulp van de volgende methoden.

Notitie

Voor individuele databases en elastische pooldatabases is de mogelijkheid om uitschalen van leesgegevens uit te schakelen beschikbaar voor achterwaartse compatibiliteit. Uitschalen van lees lezen kan niet worden uitgeschakeld Bedrijfskritiek beheerde exemplaren.

Azure Portal

U kunt de instelling uitschalen voor lezen beheren op de blade Database configureren.

PowerShell

Belangrijk

De PowerShell Azure Resource Manager-module wordt nog steeds ondersteund, maar alle toekomstige ontwikkeling is voor de Az.Sql-module. De Azure Resource Manager-module blijft tot ten minste december 2020 oplossingen voor fouten ontvangen. De argumenten voor de opdrachten in de Az-module en in de Azure Resource Manager modules zijn vrijwel identiek. Zie Introducing the new Azure PowerShell Az module (Introductie van de nieuwe az Azure PowerShell module) voor meer informatie over hun compatibiliteit.

Voor het beheren van leesschaal in Azure PowerShell is de release van december 2016 Azure PowerShell of nieuwer vereist. Zie voor de nieuwste PowerShell-release Azure PowerShell.

U kunt uitschalen van leesgegevens uitschakelen of opnieuw inschakelen in Azure PowerShell door de cmdlet Set-AzSqlDatabase aan teroepen en de gewenste waarde ( of ) voor de parameter door te Enabled Disabled -ReadScale geven.

Uitschalen van leesgegevens uitschakelen voor een bestaande database (vervang de items tussen de vierkante haken door de juiste waarden voor uw omgeving en laat de hoekhaken vallen):

Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled

Uitschalen voor lezen uitschakelen voor een nieuwe database (vervang de items tussen de vierkante haken door de juiste waarden voor uw omgeving en laat de hoekhaken vallen):

New-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled -Edition Premium

Uitschalen van leesgegevens opnieuw inschakelen voor een bestaande database (vervang de items tussen de vierkante haken door de juiste waarden voor uw omgeving en laat de hoekhaken vallen):

Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Enabled

REST-API

Als u een database wilt maken waarin uitschalen voor lezen is uitgeschakeld of als u de instelling voor een bestaande database wilt wijzigen, gebruikt u de volgende methode met de eigenschap ingesteld op of , zoals in de volgende readScale Enabled Disabled voorbeeldaanvraag.

Method: PUT
URL: https://management.azure.com/subscriptions/{SubscriptionId}/resourceGroups/{GroupName}/providers/Microsoft.Sql/servers/{ServerName}/databases/{DatabaseName}?api-version= 2014-04-01-preview
Body: {
   "properties": {
      "readScale":"Disabled"
   }
}

Zie Databases - Maken of bijwerken voor meer informatie.

De tempdb database gebruiken op een alleen-lezen replica

De tempdb database op de primaire replica wordt niet gerepliceerd naar de alleen-lezen replica's. Elke replica heeft een eigen tempdb database die wordt gemaakt wanneer de replica wordt gemaakt. Dit zorgt ervoor dat tempdb kan worden bijgewerkt en kan worden gewijzigd tijdens het uitvoeren van uw query. Als uw alleen-lezenworkload afhankelijk is van het gebruik van objecten, moet u deze objecten maken als onderdeel van dezelfde workload, terwijl u bent verbonden met een tempdb alleen-lezen replica.

Uitschalen met geografisch gerepliceerde databases gebruiken

Secundaire databases met geo-replicatie hebben dezelfde architectuur voor hoge beschikbaarheid als primaire databases. Als u verbinding maakt met de geo-gerepliceerde secundaire database met uitschalen van leesgegevens ingeschakeld, worden uw sessies met gerouteerd naar een van de replica's met hoge beschikbaarheid op dezelfde manier als ze worden gerouteerd op de primaire bewerkbare ApplicationIntent=ReadOnly database. De sessies zonder ApplicationIntent=ReadOnly worden gerouteerd naar de primaire replica van de geo-gerepliceerde secundaire, die ook alleen-lezen is.

Op deze manier kan het maken van een geo-replica meerdere extra alleen-lezen replica's bieden voor een primaire database met lees-/schrijfgegevens. Elke extra geo-replica biedt een andere set alleen-lezen replica's. Geo-replica's kunnen worden gemaakt in elke Azure-regio, met inbegrip van de regio van de primaire database.

Notitie

Er is geen automatische round robin of andere routering met load balanced tussen de replica's van een geo-gerepliceerde secundaire database, met uitzondering van een geo-replica van Hyperscale met meer dan één HA-replica. In dat geval worden sessies met de intentie Alleen-lezen gedistribueerd over alle HA-replica's van een geo-replica.

Ondersteuning voor functies op alleen-lezen replica's

Hieronder vindt u een lijst met het gedrag van sommige functies op alleen-lezen replica's:

  • Controle op alleen-lezen replica's wordt automatisch ingeschakeld. Zie auditlogboekindeling voor meer informatie over de hiërarchie van de opslagmappen SQL Database, naamconventieën en logboekindeling.
  • Query Performance Insight is afhankelijk van gegevens uit Query Store,die momenteel geen activiteit op de alleen-lezen replica bijhouden. Query Performance Insight geeft geen query's weer die worden uitgevoerd op de alleen-lezen replica.
  • Automatisch afstemmen is afhankelijk van de Query Store, zoals beschreven in het document Automatisch afstemmen. Automatisch afstemmen werkt alleen voor workloads die worden uitgevoerd op de primaire replica.

Volgende stappen