Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Optimalizátor dotazů používá statistiky o sloupcích k vytvoření plánů dotazů, které zlepšují výkon dotazů. Statistiky se shromažďují z tabulek v databázi a ukládají se do metadat databáze.
Statistiky se vytvářejí automaticky, ale dají se také vytvořit ručně. Například statistiky se vytvoří automaticky pro sloupce s klíči indexu při vytvoření indexu. Další informace o vytváření statistik naleznete v tématu Statistika.
Data tabulky se obvykle mění v průběhu času, protože řádky se vkládají, aktualizují a odstraní. To znamená, že statistiky je potřeba pravidelně aktualizovat. Ve výchozím nastavení se statistiky tabulek aktualizují automaticky, když optimalizátor dotazů zjistí, že jsou zastaralé.
Důležité informace o statistikách tabulek optimalizovaných pro paměť:
Počínaje SQL Serverem 2016 a v Azure SQL Database se podporuje automatická aktualizace statistik pro tabulky optimalizované pro paměť při použití úrovně kompatibility databáze minimálně 130. Podívejte se na ALTER DATABASE Compatibility Level (Transact-SQL). Pokud databáze obsahuje tabulky, které byly dříve vytvořeny pomocí nižší úrovně kompatibility, je potřeba statistiky aktualizovat ručně, aby se povolila automatická aktualizace statistik v budoucnu.
V případě nativně zkompilovaných uložených procedur jsou plány provádění pro dotazy v postupu optimalizované při kompilaci procedury, ke které dochází v době vytvoření. Při aktualizaci statistik se automaticky nepřekompilují. Proto by tabulky měly obsahovat reprezentativní sadu dat před vytvořením postupů.
Nativně kompilované uložené procedury se dají ručně znovu zkompilovat pomocí sp_recompile (Transact-SQL), a automaticky se znovu kompilují, pokud je databáze přepnuta do offline režimu a poté zpět do online režimu, nebo pokud dojde k převzetí služeb při selhání nebo restartování serveru.
Povolení automatické aktualizace statistiky v existujících tabulkách
Při vytváření tabulek v databázi, která má úroveň kompatibility minimálně 130, je povolena automatická aktualizace statistik pro všechny statistiky v této tabulce a nevyžaduje se žádná další akce.
Pokud databáze obsahuje tabulky optimalizované pro paměť, které byly vytvořeny v dřívější verzi SQL Serveru nebo nižší úrovně kompatibility než 130, je potřeba statistiky aktualizovat ručně jednou, aby se povolila automatická aktualizace.
Pokud chcete povolit automatickou aktualizaci statistik pro tabulky optimalizované pro paměť, které byly vytvořeny na starší úrovni kompatibility, postupujte takto:
Aktualizujte úroveň kompatibility databáze:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130Ručně aktualizujte statistiky tabulek optimalizovaných pro paměť. Níže je ukázkový skript, který provádí totéž.
Ručně zkompilujte nativně zkompilované uložené procedury, abyste mohli využít aktualizované statistiky.
Jednorázový skript pro statistiky: U tabulek optimalizovaných pro paměť, které byly vytvořeny pod nižší úrovní kompatibility, můžete jednou spustit následující skript Transact-SQL a aktualizovat statistiky všech tabulek optimalizovaných pro paměť a povolit automatickou aktualizaci statistik od té doby (za předpokladu, že je pro databázi povolená AUTO_UPDATE_STATISTICS):
-- 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];
Ověřte, že je povolená automatická aktualizace: Následující skript ověří, jestli je pro statistiky tabulek optimalizovaných pro paměť povolena automatická aktualizace. Po spuštění předchozího skriptu se vrátí 1 ve sloupci auto-update enabled pro všechny statistické objekty.
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
Pokyny pro nasazení tabulek a procedur
Aby bylo zajištěno, že optimalizátor dotazů má při vytváření plánů dotazů aktuální statistiky, využijte nasazení tabulek optimalizovaných pro paměť a nativně zkompilovaných uložených procedur, které přistupují k těmto tabulkám, pomocí těchto čtyř kroků:
Ujistěte se, že databáze má úroveň kompatibility minimálně 130. Viz ALTER DATABASE Compatibility Level (Transact-SQL).
Vytváření tabulek a indexů Indexy by měly být zadány přímo v příkazech CREATE TABLE .
Načtěte data do tabulek.
Vytvořte uložené procedury, které přistupují k tabulkám.
Vytváření nativně zkompilovaných uložených procedur po načtení dat zajišťuje, že optimalizátor má k dispozici statistiky pro tabulky optimalizované pro paměť. Tím zajistíte efektivní plány dotazů při kompilaci procedury.