Nahát, miket nem talál az ember :) Egy Azure SQL Database beállításait nézegettem valahol, amikor is lekérdeztem az adatbázis szintű beállításokat. Nagy meglepetésemre nem csak a MAXDOP, Legacy CE, parameter sniffing, identity cache és az optimizer fix (aka TF 4199) találtam, hanem egy új beállítást is! Ez pedig az adatbázis szintű optimize for ad-hoc workloads! Ezt eddig csak on-prem SQL server esetén lehetett beállítani, szerver szinten. Azure SQL Database esetén ezt nem lehetett beállítani eddig.
Az alábbi lekérdezést futtattam, aminél megláttam ezt a beállítást (persze az SSMS-b nincs kivezetve, ott meg sem lehetett volna találni):
SELECT *
FROM [sys].[database_scoped_configurations];
Ennek az eredménye az alábbi volt, bekeretezve az új beállítás:
Vajon hogyan lehet beállítani? Kipróbáltam az alábbi kódot és működött :)
ALTER DATABASE SCOPED CONFIGURATION SET OPTIMIZE_FOR_AD_HOC_WORKLOADS = ON;
Szerencsére konzekvensen ugyan azt kell beírni a server scope beállításoknál, mint ami a neve is a táblában, szóval ez jól sikerült. Egyelőre az Azure portálon sincs kivezetve ez a beállítás, sem az SSMS-ben, szóval csak az ALTER DATABASE SCOPED CONFIGURATION parancs segítségével lehet beállítani. Egyelőre még a dokumentáció sem tartalmazza, szóval lehet, hogy nem dokumentált, ezáltal akár nem is támogatott? Nem tudom.
Update: Joe Sack írt egy blog bejegyzést erről, szóval dokumentált és támogatott! A blog bejegyzés itt érhető el: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2018/01/04/database-scoped-optimizing-for-ad-hoc-workloads/