Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
A lekérdezésoptimalizáló oszlopok statisztikái alapján olyan lekérdezésterveket hoz létre, amelyek javítják a lekérdezés teljesítményét. A statisztikákat az adatbázis tábláiból gyűjtjük össze, és az adatbázis metaadataiban tároljuk.
A statisztikák automatikusan jönnek létre, de manuálisan is létrehozhatók. Például az index létrehozásakor a rendszer automatikusan létrehozza a statisztikákat az indexkulcs oszlopaihoz. A statisztikák létrehozásáról további információt a Statisztika című témakörben talál.
A táblázatadatok általában idővel változnak a sorok beszúrása, frissítése és törlése során. Ez azt jelenti, hogy a statisztikákat rendszeresen frissíteni kell. Alapértelmezés szerint a táblák statisztikái automatikusan frissülnek, amikor a lekérdezésoptimalizáló megállapítja, hogy elavultak lehetnek.
A memóriaoptimalizált táblák statisztikáinak szempontjai:
Az SQL Server 2016-tól kezdve, és az Azure SQL Database-ban, a memóriaoptimalizált táblák esetében támogatott a statisztikák automatikus frissítése, amikor az adatbázis kompatibilitási szintje legalább 130. Lásd: ALTER DATABASE kompatibilitási szintje (Transact-SQL). Ha egy adatbázis olyan táblákat használ, amelyeket korábban alacsonyabb kompatibilitási szinttel hoztak létre, a statisztikákat manuálisan kell frissíteni, hogy a statisztikák automatikusan frissüljenek.
Natívan lefordított tárolt eljárások esetén az eljárás lekérdezéseinek végrehajtási tervei optimalizálva vannak az eljárás fordításakor, ami létrehozáskor történik. A statisztikák frissítésekor nem lesznek automatikusan újrakompilálva. Ezért a tábláknak az eljárások létrehozása előtt reprezentatív adatkészletet kell tartalmazniuk.
A natívan lefordított tárolt eljárások manuálisan újrafordíthatók a sp_recompile (Transact-SQL) használatával, és automatikusan újrafordulnak, ha az adatbázis offline állapotba kerül és visszatér az online állapotba, vagy ha az adatbázis átállásra kerül, vagy a kiszolgáló újraindul.
A meglévő táblák statisztikáinak automatikus frissítésének engedélyezése
Ha a táblák legalább 130 kompatibilitási szintű adatbázisban jönnek létre, a táblák összes statisztikája automatikusan frissül, és nincs szükség további műveletekre.
Ha egy adatbázis memóriaoptimalizált táblái az SQL Server egy korábbi verziójában vagy 130-nál alacsonyabb kompatibilitási szinten lettek létrehozva, a statisztikákat manuálisan kell frissíteni, hogy az automatikus frissítés továbbhaladhasson.
Ha engedélyezni szeretné a régebbi kompatibilitási szinten létrehozott memóriaoptimalizált táblák statisztikáinak automatikus frissítését, kövesse az alábbi lépéseket:
Frissítse az adatbázis kompatibilitási szintjét:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130A memóriaoptimalizált táblák statisztikáinak manuális frissítése. Az alábbiakban egy példaszkript látható, amely ugyanezt hajtja végre.
Manuálisan újrafordíthatja a natívan lefordított tárolt eljárásokat, hogy kihasználhassa a frissített statisztikák előnyeit.
Egyszeri szkript statisztikákhoz: Az alacsonyabb kompatibilitási szinten létrehozott memóriaoptimalizált táblák esetében a következő Transact-SQL szkriptet futtathatja egyszer az összes memóriaoptimalizált tábla statisztikáinak frissítéséhez, majd ettől kezdve engedélyezheti a statisztikák automatikus frissítését (feltéve, hogy AUTO_UPDATE_STATISTICS engedélyezve van az adatbázishoz):
-- 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];
Ellenőrizze, hogy az automatikus frissítés engedélyezve van-e: Az alábbi szkript ellenőrzi, hogy engedélyezve van-e az automatikus frissítés a memóriaoptimalizált táblák statisztikáihoz. Az előző szkript futtatása után az összes statisztikai objektum számára az oszlop 1 értéke auto-update enabled lesz.
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
Útmutató táblák és eljárások üzembe helyezéséhez
Annak érdekében, hogy a lekérdezésoptimalizáló naprakész statisztikákkal rendelkezzen a lekérdezéstervek létrehozásakor, a következő négy lépés segítségével helyezzen üzembe memóriaoptimalizált táblákat és natívan lefordított tárolt eljárásokat, amelyek ezekhez a táblákhoz férnek hozzá:
Győződjön meg arról, hogy az adatbázis kompatibilitási szintje legalább 130. Lásd: ALTER DATABASE kompatibilitási szintje (Transact-SQL).
Táblák és indexek létrehozása. Az indexeket beágyazottan kell megadni a CREATE TABLE utasításokban.
Adatok betöltése a táblákba.
A táblákhoz hozzáférő tárolt eljárások létrehozása.
Az adatok betöltése után natívan lefordított tárolt eljárások létrehozása biztosítja, hogy az optimalizáló statisztikai adatokkal rendelkezik a memóriaoptimalizált táblákhoz. Ez biztosítja a hatékony lekérdezési terveket az eljárás összeállításakor.