Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2025 (17.x)
Azure SQL Database
Query Store voor leesbare secundaire bestanden is beschikbaar in SQL Server 2025 (17.x) en Azure SQL Database, en de persistente statistieken voor leesbare secundaire bestanden maken gebruik van de infrastructuur die Query Store heeft voor leesbare secundaire secundaire bestanden.
Query Store voor leesbare secundaire bestanden is standaard ingeschakeld in SQL Server 2025 (17.x) en Azure SQL Database.
Background
Bij leesbare secundaire replica's kunnen statistieken ook automatisch worden gemaakt wanneer de optie voor automatisch maken van statistieken is ingeschakeld, maar deze statistieken tijdelijk zijn en verdwijnen wanneer een exemplaar opnieuw wordt opgestart. Wanneer statistieken voor een alleen-lezen database of alleen-lezen momentopname ontbreken of verouderd zijn, maakt en onderhoudt de database-engine tijdelijke statistieken in tempdb.
Wanneer de database-engine tijdelijke statistieken maakt, wordt de naam van de statistieken toegevoegd met het achtervoegsel _readonly_database_statistic om de tijdelijke statistieken te onderscheiden van de permanente statistieken. Het achtervoegsel _readonly_database_statistic is gereserveerd voor statistieken die door SQL Server worden gegenereerd. De reden waarom deze benadering is gebruikt om werkbelastingen aan te pakken die worden uitgevoerd op leesbare secundaire replica's waarvoor mogelijk afzonderlijke statistieken vereist zijn die niet aanwezig zijn op de primaire replica.
Tijdelijke statistieken die zijn gemaakt op secundaire replica's, blijven alleen zichtbaar voor de replica die ze heeft gegenereerd. De primaire replica heeft nooit rechtstreeks toegang tot deze tijdelijke statistiekenobjecten en is alleen op de hoogte van het permanente statistiekenobject na persistentie. Wanneer tijdelijke statistieken worden bewaard voor de primaire replica, worden ze beschikbaar voor alle replica's in de beschikbaarheidsgroep via het synchronisatiemechanisme.
Het persistentiemechanisme maakt gebruik van de Query Store voor leesbare secundaire infrastructuur geïntroduceerd in SQL Server 2022 (16.x). Statistiekengegevens worden verzonden naar de primaire replica waar deze als permanente statistieken worden bewaard en vervolgens worden gesynchroniseerd met alle secundaire replica's. Dit proces vindt automatisch plaats zonder handmatige tussenkomst.
Catalogusweergaven ondersteunen
Ter ondersteuning van het vergelijken van statistieken maken of bijwerken tussen secundaire en primaire statistieken en om te helpen bij het begrijpen waar statistieken zijn gemaakt, zijn er drie nieuwe kolommen toegevoegd aan de sys.stats catalogusweergave:
| Kolomnaam | Gegevenssoort | Description |
|---|---|---|
replica_role_id |
tinyint |
1 = Primair, 2 = Secundair, 3 = Geo Secundair, 4 = Geo HA Secundair |
replica_role_desc |
nvarchar(60) | Primair, Secundair, Geo Secundair, Geo HA Secundair |
replica_name |
sysname | Exemplaarnaam van de replica in de beschikbaarheidsgroep.
NULL voor de primaire replica |
In deze kolommen wordt het eigendom en de oorsprong van statistieken bijgehouden gedurende de levenscyclus van persistentie. Wanneer een secundaire replica tijdelijke statistieken maakt en deze behouden blijven op de primaire replica, identificeren de kolommen replica_role_id en replica_name de oorspronkelijke replica. Als deze permanente statistieken later worden bijgewerkt op de primaire replica, wordt het eigendom overgedragen naar de primaire replica, wat wordt weergegeven in deze kolommen.
Persistentiegedrag voor statistieken
Wanneer tijdelijke statistieken van een secundaire replica naar de primaire worden bewaard, treden er verschillende belangrijke gedragingen op: de tijdelijke statistieken op de secundaire replica worden niet automatisch verwijderd na persistentie. Query's die oorspronkelijk zijn geactiveerd voor het maken van deze tijdelijke statistieken, blijven ze gebruiken totdat de query opnieuw wordt gecompileerd of de replica opnieuw wordt gestart. Dit betekent dat zowel tijdelijke als permanente versies van dezelfde statistieken tijdelijk kunnen worden gebruikt.
De optimizer beschouwt het eigendom van replica's niet bij het bepalen of statistieken moeten worden gebruikt. Hiermee worden alle beschikbare statistieken geëvalueerd op basis van kolomdekking en selectiviteitsramingen. De replicagegevens worden voornamelijk onderhouden voor tracerings- en probleemoplossingsdoeleinden.
Er treedt een opmerkelijk scenario op wanneer permanente statistieken die zijn gemaakt op basis van tijdelijke statistieken verlopen. Als belangrijke gegevenswijzigingen optreden op de primaire kolommen in deze statistieken, kunnen de permanente statistieken als verouderd worden beschouwd. Wanneer query's op secundaire replica's verwijzen naar deze kolommen, worden de statistieken bijgewerkt op basis van het perspectief van de secundaire zelf, waarbij de wijzigingen worden toegepast via het redo-proces.
Kortom, persistentie verwijdert niet de mogelijkheid van de secundaire om verouderde statistieken te vernieuwen; het voegt gewoon een mechanisme toe om statistieken te delen tussen replica's.
Observability
Uitgebreide gebeurtenissen
persisted_stats_operation(Operationeel kanaal) wordt gegenereerd voor enqueued, dequeueden processedfailed gebeurtenissen. Dit kan handig zijn om te controleren of een statistiekenbericht niet kan worden bewaard op de primaire locatie of als er interesse is in het bekijken van de verwerkingsfaciliteit voor berichten. De tijdelijke statistieken blijven aanwezig tempdb op de secundaire replica's terwijl een achtergrondproces het bericht opnieuw probeert te verzenden als er een communicatieprobleem is tussen de primaire en secundaire replica's.
Voorbeelden van gerelateerde foutberichten die kunnen worden geregistreerd bij errorlog
- 9131: Functie uitgeschakeld tijdens het opstarten van SQL.
- 9136: Tabel of index verwijderd/gewijzigd.
- 9137: Schema is gewijzigd sinds de momentopnametransactie is gestart; Opnieuw.
- 9139: Statistieken te groot om naar de primaire server te verzenden.
De volgende query kan enig inzicht bieden in de statistieken van een tabel, inclusief statistieken die zijn gepersist vanuit secundaire replica's.
SELECT sch.[name] AS SchemaName,
obj.[name] AS TableName,
s.[name] AS StatsName,
CASE WHEN s.stats_id >= 2 AND s.auto_created = 1 THEN 'AUTO_STATS'
WHEN s.stats_id >= 2 AND s.auto_created = 0 THEN 'USER_CREATED_STATS'
ELSE 'INDEX_STATS'
END AS type,
s.is_temporary,
CASE WHEN s.replica_name IS NULL
AND s.replica_role_desc = 'PRIMARY'
AND s.stats_id >= 2
AND s.auto_created = 1
THEN 'PRIMARY'
ELSE s.replica_name
END AS replica_name,
s.replica_role_id,
s.replica_role_desc
FROM sys.schemas AS sch
INNER JOIN sys.objects AS obj
ON sch.schema_id = obj.schema_id
INNER JOIN sys.stats AS s
ON obj.object_id = s.object_id
WHERE sch.[name] <> 'sys'
ORDER BY sch.[name], obj.[name], s.stats_id;
Overwegingen
De persistente statistieken voor de functie leesbare secundaire databases is standaard ingeschakeld zolang de optie voor automatisch maken van statistieken is ingeschakeld en de READABLE_SECONDARY_TEMPORARY_STATS_AUTO_CREATE configuratieopties voor READABLE_SECONDARY_TEMPORARY_STATS_AUTO_UPDATE databasebereik zijn ingeschakeld. Dit is de standaardconfiguratie. Er is geen configuratie binnen het databasebereik om de functie in of uit te schakelen.