Not
Å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:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Frågeoptimeraren använder statistik om kolumner för att skapa frågeplaner som förbättrar frågeprestandan. Statistik samlas in från tabellerna i databasen och lagras i databasmetadata.
Statistik skapas automatiskt, men kan också skapas manuellt. Till exempel skapas statistik automatiskt för indexnyckelkolumner när indexet skapas. Mer information om hur du skapar statistik finns i Statistik.
Tabelldata ändras vanligtvis över tid när rader infogas, uppdateras och tas bort. Det innebär att statistiken måste uppdateras regelbundet. Som standard uppdateras statistik för tabeller automatiskt när frågeoptimeraren fastställer att de kan vara inaktuella.
Överväganden för statistik om minnesoptimerade tabeller:
Från och med SQL Server 2016 och i Azure SQL Database stöds automatisk uppdatering av statistik för minnesoptimerade tabeller när databaskompatibilitetsnivån är minst 130. Se ALTER DATABASE Compatibility Level (Transact-SQL). Om en databas har tabeller som tidigare har skapats med en lägre kompatibilitetsnivå måste statistiken uppdateras manuellt en gång för att möjliggöra automatisk uppdatering av statistik framöver.
För infödda kompilerade lagrade procedurer optimeras exekveringsplaner för frågor i proceduren när proceduren kompileras, vilket sker vid skapandet. De kompileras inte automatiskt om när statistiken uppdateras. Därför bör tabellerna innehålla en representativ uppsättning data innan procedurerna skapas.
Inbyggda kompilerade lagrade procedurer kan omkompileras manuellt med hjälp av sp_recompile (Transact-SQL), och de omkompileras automatiskt om databasen tas offline och tas tillbaka online, eller om det finns en databasredundans eller serveromstart.
Aktivera automatisk uppdatering av statistik i befintliga tabeller
När tabeller skapas i en databas som har en kompatibilitetsnivå på minst 130 aktiveras automatisk uppdatering av statistik för all statistik i tabellen, och ingen ytterligare åtgärd krävs.
Om en databas har minnesoptimerade tabeller som har skapats i en tidigare version av SQL Server eller under en lägre kompatibilitetsnivå än 130 måste statistiken uppdateras manuellt en gång för att aktivera automatisk uppdatering framöver.
Följ dessa steg för att aktivera automatisk uppdatering av statistik för minnesoptimerade tabeller som har skapats under en äldre kompatibilitetsnivå:
Uppdatera databasens kompatibilitetsnivå:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130Uppdatera statistiken för de minnesoptimerade tabellerna manuellt. Nedan visas ett exempelskript som utför samma sak.
Kompilera om de inbyggda lagrade procedurerna manuellt för att dra nytta av den uppdaterade statistiken.
Engångsskript för statistik: För minnesoptimerade tabeller som har skapats under en lägre kompatibilitetsnivå kan du köra följande Transact-SQL skript en gång för att uppdatera statistiken för alla minnesoptimerade tabeller och aktivera automatisk uppdatering av statistik från och med då (förutsatt att AUTO_UPDATE_STATISTICS är aktiverat för databasen):
-- Assuming AUTO_UPDATE_STATISTICS is already ON for your database:
-- ALTER DATABASE CURRENT SET AUTO_UPDATE_STATISTICS ON;
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130;
GO
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT
@sql += N'UPDATE STATISTICS '
+ quotename(schema_name(t.schema_id))
+ N'.'
+ quotename(t.name)
+ ';' + CHAR(13) + CHAR(10)
FROM sys.tables AS t
WHERE t.is_memory_optimized = 1 AND
t.object_id IN (SELECT object_id FROM sys.stats WHERE no_recompute=1)
;
EXECUTE sp_executesql @sql;
GO
-- Each row appended to @sql looks roughly like:
-- UPDATE STATISTICS [dbo].[MyMemoryOptimizedTable];
Kontrollera att automatisk uppdatering är aktiverad: Följande skript verifierar om automatisk uppdatering är aktiverad för statistik för minnesoptimerade tabeller. Efter att du har kört föregående skript returneras 1 i kolumn auto-update enabled för alla statistikobjekt.
SELECT
quotename(schema_name(o.schema_id)) + N'.' + quotename(o.name) AS [table],
s.name AS [statistics object],
1-s.no_recompute AS [auto-update enabled]
FROM sys.stats s JOIN sys.tables o ON s.object_id=o.object_id
WHERE o.is_memory_optimized=1
Riktlinjer för att distribuera tabeller och procedurer
För att säkerställa att frågeoptimeraren har up-to-date-statistik när du skapar frågeplaner distribuerar du minnesoptimerade tabeller och internt kompilerade lagrade procedurer som har åtkomst till dessa tabeller med hjälp av följande fyra steg:
Kontrollera att databasen har en kompatibilitetsnivå på minst 130. Se ALTER DATABASE Compatibility Level (Transact-SQL).
Skapa tabeller och index. Indexar ska anges i samband med CREATE TABLE-uttrycken.
Läs in data i tabellerna.
Skapa lagrade procedurer som har åtkomst till tabellerna.
När du skapar internt kompilerade lagrade procedurer när du har läst in data ser du till att optimeraren har tillgänglig statistik för de minnesoptimerade tabellerna. Detta säkerställer effektiva frågeplaner när proceduren kompileras.