Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:Gäller för: SQL Server 2025 (17.x) Förhandsversion av
Azure SQL Database SQL-databas
i Förhandsversion av Microsoft Fabric
Query Store för läsbara sekundärfiler introducerades i SQL Server 2022 (16.x), och den beständiga statistiken för läsbara sekundärfiler använder infrastrukturen som Query Store har för läsbara sekundärfiler. Query Store för läsbara sekundärfiler är aktiverat som standard i SQL Server 2025 (17.x) Preview, medan det i SQL Server 2022 (16.x) var av och krävde spårningsflagg 12606 för att aktivera.
Spårningsflagga 12606 behövs inte på SQL Server 2025 (17.x) Preview och senare versioner, och om den används, leder till att Query Store-funktionen för läsbara sekundärer stängs av.
Background
På läsbara sekundära repliker kan statistik också skapas automatiskt när alternativet för automatisk skapande av statistik är aktiverat, men den statistiken är tillfällig och försvinner när en instans startas om. När statistik för en skrivskyddad databas eller skrivskyddad ögonblicksbild saknas eller är inaktuell skapar och underhåller databasmotorn tillfällig statistik i tempdb.
När databasmotorn skapar tillfällig statistik läggs statistiknamnet till med suffixet _readonly_database_statistic för att skilja den tillfälliga statistiken från den permanenta statistiken. Suffixet _readonly_database_statistic är reserverat för statistik som genereras av SQL Server. Anledningen till att den här metoden användes var att hantera arbetsbelastningar som körs mot läsbara sekundära repliker som kan kräva distinkt statistik som inte finns på den primära repliken.
Tillfällig statistik som skapats på sekundära repliker är endast synlig för repliken som genererade dem. Den primära repliken kommer aldrig direkt åt dessa temporära statistikobjekt och är endast medveten om det permanenta statistikobjektet efter beständighet. När tillfällig statistik sparas till den primära repliken blir de tillgängliga för alla repliker i tillgänglighetsgruppen via synkroniseringsmekanismen. Beständighetsmekanismen använder Query Store för läsbar sekundärinfrastruktur som introducerades i SQL Server 2022 (16.x). Statistikinformation skickas till den primära repliken där den sparas som permanent statistik och synkroniseras sedan tillbaka till alla sekundära repliker. Den här processen sker automatiskt utan manuella åtgärder.
Stöd för katalogvyer
För att kunna jämföra statistikskapande eller uppdatering mellan sekundär och primär, och för att hjälpa till med att förstå var statistik skapades, har tre nya kolumner lagts till i sys.stats katalogvyn:
| Kolumnnamn | Datatyp | Description |
|---|---|---|
replica_role_id |
tinyint |
1 = Primär, 2 = Sekundär, 3 = Geo sekundär, 4 = Geo HA sekundär |
replica_role_desc |
nvarchar(60) | Primär, Sekundär, Geo Sekundär, Geo HA Sekundär |
replica_name |
sysname | Instansnamnet på repliken i tillgänglighetsgruppen.
NULL för den primära kopian |
Dessa kolumner spårar statistikägarskap och ursprung under hela beständighetslivscykeln. När en sekundär replik skapar tillfällig statistik och de sparas till den primära, identifierar kolumnerna replica_role_id och replica_name den ursprungliga repliken. Om den här permanenta statistiken senare uppdateras på den primära repliken överförs ägarskapet till den primära, vilket återspeglas i dessa kolumner.
Beteende för statistikihållande
När tillfällig statistik sparas från en sekundär replik till den primära utförs flera viktiga beteenden: Den tillfälliga statistiken för den sekundära repliken tas inte bort automatiskt efter beständighet. Frågor som ursprungligen utlöste skapandet av den här tillfälliga statistiken fortsätter att använda dem tills frågan genomgår omkompilering eller repliken startas om. Det innebär att både tillfälliga och permanenta versioner av samma statistik kan samexistera tillfälligt.
Optimeraren överväger inte replikägarskap när du avgör om statistik ska användas. Den utvärderar all tillgänglig statistik baserat på kolumntäckning och urvalsuppskattningar. Replikinformationen underhålls främst i spårnings- och felsökningssyfte.
Ett anmärkningsvärt scenario inträffar när permanent statistik som skapats från tillfällig statistik blir inaktuell. Om betydande dataändringar sker på de primära kolumner som påverkar kolumnerna i den statistiken kan den permanenta statistiken betraktas som inaktuell. När frågor på sekundära repliker refererar till dessa kolumner, uppdaterar den sekundära statistiken baserat på dess vy över data, vilket återspeglar de ändringar som har tillämpats genom omeringsprocessen.
I korthet tar inte beständighet bort sekundärens möjlighet att uppdatera inaktuell statistik. det lägger helt enkelt till en mekanism för att dela statistik mellan repliker.
Observability
Utökade händelser
persisted_stats_operation (Operational channel) är upphöjt för enqueued, dequeued, processedoch failed händelser. Detta kan vara användbart för att övervaka om ett statistikmeddelande inte kan sparas på den primära databasen, eller om det finns intresse för att övervaka meddelandebearbetningsprocessen. Den tillfälliga statistiken finns kvar på tempdb de sekundära replikerna medan en bakgrundsprocess försöker skicka meddelandet igen om det finns ett kommunikationsproblem mellan de primära och sekundära replikerna.
Exempel på relaterade felmeddelanden som kan loggas till ERRORLOG
- 9131: Funktion inaktiverad under SQL-start.
- 9136: Tabell eller index borttagen/modifierad.
- 9137: Schemat har ändrats sedan ögonblicksbildstransaktionen startade; Igen.
- 9139: Statistik för stor för att skicka till den primära.
Följande fråga kan ge insyn i statistiken för en tabell, inklusive persisterad statistik från sekundära repliker:
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;
Överväganden
Den beständiga statistiken för funktionen för läsbara sekundärfiler är aktiverad som standard så länge alternativet för automatisk skapande av statistik är aktiverat och konfigurationsalternativen READABLE_SECONDARY_TEMPORARY_STATS_AUTO_CREATE och READABLE_SECONDARY_TEMPORARY_STATS_AUTO_UPDATE databasomfattningen är aktiverade, vilket är standardkonfigurationen. Det finns ingen databasomfattande konfiguration för att aktivera och inaktivera funktionen.