Gebruik alleen-lezen replica's om alleen-lezen queryworkloads te ontlasten.
van toepassing op:Azure SQL Database
Azure SQL Managed Instance-
Als onderdeel van architectuur met hoge beschikbaarheid, wordt elke individuele database of elastische pooldatabase in de servicelaag Premium en Bedrijfskritiek automatisch ingericht met een primaire lees-/schrijfreplica en een of meer secundaire alleen-lezen replica's. De secundaire replica's worden ingericht met dezelfde rekenkracht als de primaire replica. Met de schaal-uit mogelijkheid voor lezen kunt u leesworkloads overdragen met behulp van de verwerkingscapaciteit van een van de read-only replica's, in plaats van deze uit te voeren op de lees-schrijfreplica. Op deze manier kunnen sommige alleen-lezen-werkbelastingen worden geïsoleerd van de lees- en schrijfbewerkingen, en oefenen ze geen invloed uit op hun prestaties. De functie is bedoeld voor toepassingen die vanuit logisch oogpunt gescheiden alleen-lezen workloads bevatten, zoals analyses. In de servicelagen Premium en Bedrijfskritiek kunnen toepassingen prestatievoordelen krijgen met behulp van deze extra capaciteit zonder extra kosten.
De scale-out functie is ook beschikbaar in de Hyperscale servicelaag wanneer er ten minste één secundaire replica wordt toegevoegd. Secundaire Hyperscale-benoemde replica's onafhankelijke schaalaanpassing, isolatie van toegang, isolatie van werkbelastingen, ondersteuning voor verschillende uitschaalscenario's voor lezen en andere voordelen bieden. 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 voor hoge beschikbaarheid van de servicelagen Basic, Standard en Algemeen gebruik bevat geen replica's. De uitgebreide leescapaciteit functie is niet beschikbaar in deze servicetiers. Wanneer u Azure SQL Database echter gebruikt, kunnen geo-replica's vergelijkbare functionaliteit bieden in deze servicelagen. Wanneer u Azure SQL Managed Instance en failovergroepen gebruikt, kan de failovergroep alleen-lezen listener dezelfde functionaliteit bieden.
In het volgende diagram ziet u de functie voor Premium- en Bedrijfskritieke databases en beheerde exemplaren.
De read scale-out feature is standaard ingeschakeld voor nieuwe Premium-, Business Critical en Hyperscale-databases.
Notitie
Uitschalen van leesbewerkingen is altijd ingeschakeld in de servicelaag Bedrijfskritiek van SQL Managed Instance en voor Hyperscale-databases met ten minste één secundaire replica.
Als uw SQL-verbindingsreeks is geconfigureerd met ApplicationIntent=ReadOnly
, wordt de toepassing omgeleid naar een alleen-lezen replica van die database of het beheerde exemplaar. Zie Toepassingsintentie opgevenvoor meer informatie over het gebruik van de eigenschap ApplicationIntent
.
Alleen voor Azure SQL Database, als u ervoor wilt zorgen dat de toepassing verbinding maakt met de primaire replica, ongeacht de ApplicationIntent
instelling in de SQL-verbindingsreeks, moet u de uitschaal voor lezen expliciet uitschakelen bij het maken van de database of bij het wijzigen van de configuratie. Als u bijvoorbeeld uw database bijwerkt van de laag Standard of Algemeen gebruik naar Premium of Bedrijfskritiek en ervoor wilt zorgen dat al uw verbindingen naar de primaire replica blijven gaan, schakelt u uitschalen van leesbewerkingen uit. Zie Uitschalen van leesbewerkingen in- en uitschakelenvoor meer informatie over het uitschakelen ervan.
Notitie
De functies van Query Store en SQL Profiler worden niet ondersteund op alleen-lezen replica's.
Gegevensconsistentie
Gegevenswijzigingen die zijn aangebracht op de primaire replica, worden synchroon of asynchroon op alleen-lezen replica's bewaard, afhankelijk van het replicatype. Voor alle replicatypen zijn leesbewerkingen van een alleen-lezen replica echter altijd asynchroon ten opzichte van de primaire replica. Binnen een sessie die is verbonden met een alleen-lezen replica, zijn leesbewerkingen altijd transactioneel consistent. Omdat de latentie van gegevensdoorgifte variabel is, kunnen verschillende replica's gegevens op iets verschillende tijdstippen retourneren ten opzichte van de primaire en elkaar. Als een alleen-lezen replica niet meer beschikbaar is en een sessie opnieuw verbinding maakt, kan deze verbinding maken met een replica die zich op een ander tijdstip bevindt dan de oorspronkelijke replica. Als een toepassing gegevens wijzigt met behulp van een lees-/schrijfsessie op de primaire en deze onmiddellijk leest met behulp van een alleen-lezensessie op een replica met het kenmerk Alleen-lezen, is het mogelijk dat de meest recente wijzigingen niet onmiddellijk zichtbaar zijn.
Typische latentie van gegevensdoorgifte 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 gegevensdoorgiftelatentie. Voorwaarden zoals een hoog resourcegebruik op de replica kunnen de latentie aanzienlijk verhogen. Toepassingen waarvoor gegarandeerde gegevensconsistentie tussen sessies is vereist of waarvoor vastgelegde gegevens onmiddellijk leesbaar moeten zijn, moeten gebruikmaken van de primaire replica.
Notitie
Latentie van gegevensdoorgifte omvat de tijd die nodig is voor het verzenden en behouden van logboekrecords (indien van toepassing) naar een secundaire replica. Het bevat ook de tijd die nodig is om deze logboekrecords opnieuw uit te voeren (toe te passen) op gegevenspagina's. Om gegevensconsistentie te garanderen, zijn wijzigingen pas zichtbaar als de logboekrecord voor transactiedoorvoering is toegepast. Wanneer de workload grotere transacties gebruikt, wordt de effectieve latentie voor gegevensdoorgifte verhoogd.
Zie om de latentie van gegevensdoorgifte te monitoren en problemen met alleen-lezenreplica'sop te lossen.
Verbinding maken met een alleen-lezen replica
Wanneer u uitschalen van leesbewerkingen voor een database inschakelt, bepaalt de ApplicationIntent
optie in de verbindingsreeks van de client of de verbinding wordt doorgestuurd naar de schrijfreplica of naar een alleen-lezen replica. Als de ApplicationIntent
waarde ReadWrite
is (de standaardwaarde), wordt de verbinding omgeleid naar de lees-/schrijfreplica. Dit is identiek aan het gedrag wanneer ApplicationIntent
niet is opgenomen in de verbindingsreeks. Als de waarde van ApplicationIntent
ReadOnly
is, wordt de verbinding doorgestuurd naar een alleen-lezen replica.
Met de volgende verbindingsreeks wordt de client bijvoorbeeld verbonden met een alleen-lezen replica (waarbij de items in de punthaken worden vervangen door de juiste waarden voor uw omgeving en de punthaken worden verwijderd):
Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<password>;Trusted_Connection=False; Encrypt=True;
Als u verbinding wilt maken met een alleen-lezen replica met behulp van SQL Server Management Studio (SSMS), selecteert u Opties
Selecteer Aanvullende verbindingsparameters en voer ApplicationIntent=ReadOnly
in en selecteer vervolgens Verbinding maken
Een van de volgende verbindingsreeksen verbindt de client met een lees-/schrijfreplica (waarbij de items in de punthaken worden vervangen door de juiste waarden voor uw omgeving en de punthaken verwijderen):
Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadWrite;User ID=<myLogin>;Password=<password>;Trusted_Connection=False; Encrypt=True;
Server=tcp:<server>.database.windows.net;Database=<mydatabase>;User ID=<myLogin>;Password=<password>;Trusted_Connection=False; Encrypt=True;
Controleer of 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. Het retourneert READ_ONLY wanneer u bent verbonden met een alleen-lezen replica.
SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
Notitie
In premium- en bedrijfskritische servicelagen is op enig moment slechts één van de read-only kopieën toegankelijk. Hyperscale ondersteunt meerdere schrijfbeveiligde replica's.
alleen-lezenreplica's bewaken en problemen oplossen
U hebt verschillende manieren om alleen-lezen replica's te bewaken, waaronder: DMV's, uitgebreide gebeurtenissen en database watcher (preview).
Wanneer u verbinding maakt met een alleen-lezen replica, weerspiegelen dynamische beheerweergaven (DMV's) de status van de replica en kunnen ze worden opgevraagd voor bewakings- en probleemoplossingsdoeleinden. De database-engine biedt meerdere weergaven om een breed scala aan bewakingsgegevens beschikbaar te maken.
De volgende weergaven worden vaak gebruikt voor replicabewaking en probleemoplossing:
Naam | 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 servicedoelstellinglimieten. |
sys.dm_os_wait_stats | Levert aggregatiewachtstatistieken voor de database-instantie. |
sys.dm_database_replica_states | Biedt statistieken over de status en synchronisatie van replica's. De grootte van de wachtrij en de herhalingsfrequentie worden gebruikt als indicatoren voor de latentie van gegevensreplicatie op de alleen-lezen replica. |
sys.dm_os_performance_counters | Biedt prestatiemeteritems voor de database-engine. |
sys.dm_exec_query_stats | Biedt uitvoeringsstatistieken per query, zoals het aantal uitvoeringen, de GEBRUIKTE CPU-tijd, enzovoort. |
sys.dm_exec_query_plan() | Biedt opgeslagen queryplannen in de cache aan. |
sys.dm_exec_sql_text() | Levert de querytekst voor een gecachede queryplan. |
sys.dm_exec_query_profiles | Biedt real-time queryvoortgang tijdens de uitvoering van query's. |
sys.dm_exec_query_plan_stats() | Biedt het laatst bekende werkelijke uitvoeringsplan, inclusief runtimestatistieken voor een query. |
sys.dm_io_virtual_file_stats() | Biedt opslagstatistieken voor IOPS, doorvoer en latentie voor alle databasebestanden. |
Notitie
De sys.resource_stats
en sys.elastic_pool_resource_stats
DMV's in de logische master
database retourneren resourcegebruiksgegevens van de primaire replica.
Alleen-lezen replica's bewaken met uitgebreide gebeurtenissen
Er kan geen uitgebreide gebeurtenissessie worden gemaakt wanneer deze is verbonden met een alleen-lezen replica. In Azure SQL Database en Azure SQL Managed Instance worden echter de definities van uitgebreide gebeurtenissen uitgebreide gebeurtenis sessies gemaakt en gewijzigd op de primaire replicareplicatie naar alleen-lezen replica's, waaronder geo-replica's, en gebeurtenissen vastleggen op alleen-lezen replica's.
In Azure SQL Database kan een uitgebreide gebeurtenissessie op een alleen-lezen replica die is gebaseerd op een sessiedefinitie van de primaire replica, onafhankelijk van de sessie op de primaire replica worden gestart en gestopt.
Als u in Azure SQL Managed Instance een tracering wilt starten op een alleen-lezen replica, moet u eerst de tracering op de primaire replica starten voordat u de tracering op de alleen-lezenreplica kunt starten. Als u de tracering niet voor het eerst start op de primaire replica, krijgt u de volgende foutmelding wanneer u de tracering probeert te starten op de alleen-lezen replica:
Msg 3906, Niveau 16, Status 2, Regel 1 kan database master niet bijwerken omdat de database het kenmerk Alleen-lezen heeft.
Nadat u de tracering eerst hebt gestart op de primaire replica en vervolgens op de alleen-lezen replica, kunt u de tracering op de primaire replica stoppen.
Als u een gebeurtenissessie wilt verwijderen op een alleen-lezen replica, voert u de volgende stappen uit:
- Verbinding maken SSMS-objectverkenner of een queryvenster met de alleen-lezen replica.
- Stop de sessie op de alleen-lezen replica door Stop sessie te selecteren in het contextmenu van de sessie in Objectverkenner of door
ALTER EVENT SESSION [session-name-here] ON DATABASE STATE = STOP;
uit te voeren in een queryvenster. - Verbind Objectverkenner of een queryvenster met de primaire replica.
- Verwijder de sessie op de primaire replica door Verwijderen te selecteren in het contextmenu van de sessie of door
DROP EVENT SESSION [session-name-here] ON DATABASE;
Niveau van transactie-isolatie op alleen-lezende kopieën
Transacties op alleen-lezen replica's maken altijd gebruik van het transactie-isolatieniveau van de momentopname, ongeacht het transactie-isolatieniveau van de sessie, en ongeacht eventuele query-hints. Isolatie van momentopnamen maakt gebruik van rijversiebeheer om blokkerende scenario's te voorkomen waarbij lezers schrijvers blokkeren.
In zeldzame gevallen, als een isolatietransactie voor momentopnamen toegang heeft tot objectmetagegevens die zijn gewijzigd in een andere gelijktijdige transactie, kan er een fout optreden 3961, 'Momentopname-isolatietransactie is mislukt in database '%.*ls', omdat het object dat wordt geopend 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 de metagegevens niet zijn geversied. Een gelijktijdige update van metagegevens kan leiden tot inconsistentie als deze wordt gecombineerd met isolatie van momentopnamen.'
Langlopende opdrachten op replica's in alleen-lezen modus
Query's die worden uitgevoerd op alleen-lezen replica's moeten toegang hebben tot metagegevens voor de objecten waarnaar wordt verwezen in de query (tabellen, indexen, statistieken, enzovoort) In zeldzame gevallen, als objectmetagegevens worden gewijzigd op de primaire replica terwijl een query een vergrendeling op hetzelfde object op de alleen-lezen replica bevat, kan de query blokkeren het proces dat wijzigingen van de primaire replica toepast op de alleen-lezen replica. Als een dergelijke query lange tijd zou worden uitgevoerd, zou dit ertoe leiden dat de alleen-lezenreplica aanzienlijk niet synchroon is met de primaire replica. Voor replica's die mogelijke failoverdoelen zijn (secundaire replica's in Premium- en Bedrijfskritieke servicelagen, Hyperscale HA-replica's en alle geo-replica's), zou dit ook het herstel van de database vertragen als er een failover zou optreden, wat langer dan verwacht downtime veroorzaakte.
Als een langlopende query op een alleen-lezen replica direct of indirect dit soort blokkeringen veroorzaakt, wordt deze mogelijk automatisch beëindigd om overmatige gegevenslatentie en mogelijke gevolgen voor databasebeschikbaarheid te voorkomen. De sessie ontvangt fout 1219: 'Uw sessie is verbroken vanwege een DDL-bewerking met hoge prioriteit', of fout 3947: 'De transactie is afgebroken omdat de secundaire berekening de redo niet kon inhalen. Voer de transactie opnieuw uit.
Notitie
Als u fout 3961, 1219 of 3947 ontvangt bij het uitvoeren van query's op een alleen-lezen replica, voert u de query opnieuw uit. U kunt ook bewerkingen voorkomen die objectmetagegevens wijzigen (schemawijzigingen, indexonderhoud, updates van statistieken, enzovoort) op de primaire replica terwijl langlopende query's worden uitgevoerd op secundaire replica's.
Tip (advies) / Fooi
In premium- en bedrijfskritieke servicelagen, wanneer deze zijn verbonden met een alleen-lezen replica, kunnen de kolommen redo_queue_size
en redo_rate
in de sys.dm_database_replica_states DMV worden gebruikt om het proces van gegevenssynchronisatie te bewaken, wat fungeert als indicatoren van de latentie van gegevensdoorgifte op de alleen-lezen replica.
Uitschalen van leesbewerkingen voor SQL Database in- en uitschakelen
Voor SQL Managed Instance wordt het uitschalen van leesbewerkingen automatisch ingeschakeld op de servicelaag Bedrijfskritiek en is deze niet beschikbaar in de servicelaag Algemeen gebruik. Het is niet mogelijk om het uitschakelen en weer inschakelen van leesuitschakeling uit te voeren.
Voor SQL Database is uitschalen van leesbewerkingen standaard ingeschakeld voor Premium-, Bedrijfskritieke en Hyperscale-servicelagen. Uitschalen van leesbewerkingen kan niet worden ingeschakeld in servicelagen Basic, Standard of Algemeen gebruik. Uitschalen van leesbewerkingen wordt automatisch uitgeschakeld voor Hyperscale-databases die zijn geconfigureerd met nul secundaire replica's.
Voor individuele en pooldatabases in Azure SQL Database kunt u uitschalen van leesbewerkingen in de Premium- of Bedrijfskritieke servicelagen uitschakelen en opnieuw inschakelen met behulp van Azure Portal en Azure PowerShell. Deze opties zijn niet beschikbaar voor SQL Managed Instance omdat leesschaaluitbreiding niet kan worden uitgeschakeld.
Notitie
Om achterwaartse compatibiliteit te waarborgen, is er voor individuele databases en elastische pooldatabases de mogelijkheid om lees-schaalvergroting uit te schakelen. Het uitschalen van lezen kan niet worden uitgeschakeld voor bedrijfskritische beheerde exemplaren.
Azure Portal
Voor Azure SQL Database kunt u de instelling voor uitschalen van leesbewerkingen beheren in het deelvenster Compute en opslag database, beschikbaar onder Instellingen. Het gebruik van Azure Portal om uitschalen van leesbewerkingen in of uit te schakelen, is niet beschikbaar voor Azure SQL Managed Instance.
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 bugfixes ontvangen. De argumenten voor de opdrachten in de Az-module en in de Azure Resource Manager-modules zijn aanzienlijk identiek. Zie Introductie van de nieuwe Azure PowerShell Az-modulevoor meer informatie over de compatibiliteit.
Voor het beheren van uitschalen van leesbewerkingen in Azure PowerShell is de Azure PowerShell-release van december 2016 of hoger vereist. Zie Azure PowerShell-voor de nieuwste PowerShell-release.
In Azure SQL Database kunt u het uitschalen van leesbewerkingen in Azure PowerShell uitschakelen of opnieuw inschakelen door de cmdlet Set-AzSqlDatabase aan te roepen en de gewenste waarde (Enabled
of Disabled
) door te geven voor de parameter -ReadScale
. Het uitschakelen van uitschalen van leesbewerkingen voor SQL Managed Instance is niet beschikbaar.
Als u het uitschalen van leesbewerkingen op een bestaande database wilt uitschakelen (waarbij u de items in de punthaken vervangt door de juiste waarden voor uw omgeving en de punthaken neerhalen):
Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled
Als u het uitschalen van leesbewerkingen op een nieuwe database wilt uitschakelen (vervang de items in de punthaken door de juiste waarden voor uw omgeving en laat u de punthaken vallen):
New-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled -Edition Premium
Als u het uitschalen van leesbewerkingen op een bestaande database opnieuw wilt inschakelen (vervang de items in de punthaken door de juiste waarden voor uw omgeving en laat u de punthaken vallen):
Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Enabled
REST API
Als u een database wilt maken waarvoor uitschalen voor lezen is uitgeschakeld of als u de instelling voor een bestaande database wilt wijzigen, gebruikt u de volgende methode met de eigenschap readScale
ingesteld op Enabled
of Disabled
, zoals in de volgende 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 de uitvoering van de query. Als uw alleen-lezenworkload afhankelijk is van het gebruik van tempdb
objecten, moet u deze objecten maken als onderdeel van dezelfde workload, terwijl deze zijn verbonden met een alleen-lezen replica.
Uitschalen van leesbewerkingen gebruiken met geo-gerepliceerde databases
Secundaire databases met geo-replicatie hebben dezelfde architectuur voor hoge beschikbaarheid als primaire databases. Als u verbinding maakt met de geografisch gerepliceerde secundaire database waarvoor lees-schaalvergroting is ingeschakeld, worden uw sessies met ApplicationIntent=ReadOnly
geleid naar een van de replica's met hoge beschikbaarheid op dezelfde manier als ze worden geleid op de primaire schrijfbare database. De sessies zonder ApplicationIntent=ReadOnly
worden doorgestuurd naar de primaire replica van de secundaire geo-replicatie, 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 voor lezen/schrijven. Elke extra geo-replica biedt een extra set read-only replica's. Geo-replica's kunnen worden gemaakt in elke Azure-regio, inclusief de regio van de primaire database.
Notitie
Er is geen automatische round robin of een andere routering met gelijke taakverdeling tussen de replica's van een secundaire database met geo-replicatie, met uitzondering van een Hyperscale geo-replica met meer dan één HA-replica. In dat geval worden sessies met alleen-lezen intentie verspreid over alle HA-replica's van een geo-replica.
Functieondersteuning voor alleen-lezen-replica's
Een overzicht van het gedrag van sommige functies op alleen-lezen replica's is als volgt:
- Controle op alleen-lezen replica's wordt automatisch ingeschakeld. Zie SQL Database Audit Log Formatvoor meer informatie over de hiërarchie van de opslagmappen, naamconventies en logboekindeling.
- Query Performance Insight is afhankelijk van gegevens uit de Query Store, die momenteel geen activiteit registreert op de alleen-lezen replica. Query Performance Insight toont geen query's die worden uitgevoerd op de alleen-lezen replica.
- Automatisch afstemmen is afhankelijk van de Query Store, zoals beschreven in het Automatische afstemmingspapier. Automatisch afstemmen werkt alleen voor workloads die worden uitgevoerd op de primaire replica.
Volgende stappen
- Zie Hyperscale-servicelaagvoor meer informatie over de aanbieding van SQL Database Hyperscale.