KB974006 – SQL Server Query Optimizer hotfix trace flag 4199 servicing model

Hatókör
Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Standard X64 Edition Microsoft SQL Server 2005 Enterprise X64 Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Workgroup Edition SQL Server 2008 Standard SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

BEVEZETÉS

A Microsoft SQL Server SQL Server 2000 Service Pack 3 (SP3) verziónál későbbi verziók a legtöbb gyorsjavítást alapértelmezés szerint kikapcsolt állapotban tartalmazták a lekérdezésoptimalizálóban, hogy megakadályozzák, hogy a jelenlegi éles verziós ügyfelek láthassák a várt csomagmódosításokat, amelyek teljesítménycsökkenést okozhatnak. Eleinte minden gyorsjavítást külön nyomkövetési jelző alatt jelentettünk meg. Később ez a gyakorlat úgy változott meg, hogy a legtöbb zászlót egyetlen nyomkövetési jelző alá vonták össze (4199). Ez az új gyakorlat több verzióban is létrejött, az alábbi frissítésekkel kezdve:

  • SQL Server 2005 Service Pack 3 (SP3) 6. összegző frissítés
  • SQL Server 2008 Service Pack 1 (SP1) 7-es összegző frissítőcsomag
  • SQL Server 2008 R2 (RTM)

A 4199-es nyomkövetési jelzővel azoknak a gyorsjavításoknak az összegyűjtésére használtuk, amelyeket alapértelmezés szerint engedélyezni kívántunk egy későbbi kiadásban, míg más nyomkövetési jelzőket olyan helyzetekben használtunk, amikor a javítást nem szándékosan alapértelmezés szerint engedélyezetté kívántuk tenni az aktuális formában. A SQL Server 2016 RTM verzióval kezdődően az adatbázis COMPATIBILITY_LEVEL beállítás alapértelmezés szerint engedélyezi a 4199-hez kapcsolódó gyorsjavítások nyomkövetését engedélyező beállítást. Ez a cikk ismerteti a csomagra hatással lévő gyorsjavítások SQL Server 2016 és újabb verziók esetén történő biztosításának mechanikáját és irányelveit.

További információ

A SQL Server 2016-ban a SQL Server korábbi kiadásaiban elvégzett nyomkövetésjelző 4199-es gyorsjavítások a Database COMPATIBILITY_LEVEL 130 alatt lesznek engedélyezve, a 4199-es nyomkövetési jelző engedélyezése nélkül. A 4199-es nyomkövetési jelzőt használjuk majd a 130-as kompatibilitási szintet használó adatbázisok jövőbeni SQL Server 2016-os gyorsjavításainak kiadásához. Mivel a 4199-es nyomkövetési jelző csak azoknak az ügyfeleknek ajánlott, akiknél bizonyos teljesítményproblémák tapasztalhatók, azt javasoljuk ügyfeleinknek, hogy az adatbázisaik legújabb kompatibilitási szintre való áttelepítése után távolítsák el a 4199-es jelölőt, mivel a rendszer újra fel fogja használni a 4199-es jelölőt az alkalmazásra esetleg nem érvényes javításokhoz, és váratlan teljesítményváltozásokat okozhatnak egy üzemi rendszeren. Ez azt jelenti, hogy egy adott termék kiadásában támogatott minden egyes kompatibilitási szinthez más és más nyomkövetési jelzővel ellátott 4199-es gyorsjavítások vannak engedélyezve. A legújabb kompatibilitási szint már engedélyezi az összes korábbi javítást a 4199-es nyomkövetési jelző alatt. Ez azt jelenti, hogy az adatbázisok legújabb kompatibilitási szintre való frissítése és a 4199-es nyomkövetési jelző eltávolítása továbbra is engedélyezi az összes olyan javítást, amelyet a számítási feladat az adatbázis frissítése előtt használt, csak az új javításokat nem. Ha az ügyfelek később lekérdezési teljesítménybeli problémákat tapasztalnak, kísérletezzen az adatbázis-hatókörű beállítás QUERY_OPTIMIZER_HOTFIXES vagy a lekérdezési tipp ENABLE_QUERY_OPTIMIZER_HOTFIXES engedélyezésével egy tesztkörnyezetben, hogy megállapítsa, megoldódott-e a probléma. Tekintse meg a QUERY_OPTIMIZER_HOTFIXES dokumentációját.

Megjegyzés Alapértelmezés szerint az SQL Server 2016-ban létrehozott adatbázisok a 130-as kompatibilitási szintet használják, és már engedélyezve van velük az új optimalizáló logika.

A modell fő előnye, hogy csökkenti az éles rendszereket érintő kockázatot a frissítési folyamat során. Ez a megközelítés elkülöníti az SQL Server új főverziójának telepítését az összes új lekérdezésfeldolgozó módosításának automatikus engedélyezésétől. Mivel a főverziófrissítések megváltoztatják a fájlformátumot, és nem vonhatók vissza, ajánlatos a COMPATIBILITY_LEVEL beállítást használni, mert így az ügyfél gyorsan visszaléphet a korábbi verzióra, ha a frissítés során váratlan teljesítménybeli problémát talál. Ha egy ügyfél olyan váratlan tervmódosítást észlel, amely megakadályozza az alkalmazás frissítését, megkönnyítheti a helyzetet, ha a Query Store használatával érvényteleníti a korábbi csomag használatát egy megfelelő csomagtippel. Ilyen esetben pedig a Microsoft ügyfélszolgálatától kérhet segítséget a probléma megoldásához vagy egy kerülő megoldás vagy gyorsjavítás biztosításához. Amikor az összes probléma csökken, a frissítés folytatódhat. Az ügyfeleknek ezt a képességet be kell építeniük az SQL Server 2016-ra való frissítés megtervezésébe.

Az alábbi táblázat ismerteti, hogy a 4199-es nyomkövetési jelző milyen modellt fog működni az SQL Server 2016-tól kezdve.

Beállítás SQL-kompatibilitási szint Trace flag 4199 Az optimalizáló gyorsjavításai az SQL Server 2016 RTM előtt Az optimalizáló gyorsjavításai az SQL Server 2016 RTM után
1. 120 Ki Disabled Disabled
2. 120 Be Engedélyezve Disabled
3. 130 Ki Kompatibilitási szint alapján engedélyezve Disabled
4. 130 Be Kompatibilitási szint alapján engedélyezve Kompatibilitási szint alapján engedélyezve

Megjegyzés: A 3. beállítás azoknak az ügyfeleknek ajánlott, akik nemrég frissítenek az SQL Server 2016-ra.

Az SQL Server 2016 utáni főbb kiadások esetében a Microsoft azt tervezi, hogy továbbra is ezt a karbantartási modellt használja az optimalizáló gyorsjavításaihoz. Alapértelmezés szerint vagy minden egyes kiadásban az előző kiadásból származó 4199-es gyorsjavítások nyomkövetése a következő kompatibilitási szinten engedélyezve lesz. Ez azt jelenti, hogy a legújabb kompatibilitási szintre történő áttelepítés után a 4199-es nyomkövetési jelző letiltását ajánljuk az ügyfeleknek. A későbbi gyorsjavítások a 4199-es nyomkövetési jelzővel engedélyezték a javításokat azoknak a felhasználóknak, akiknek engedélyezniük kellett az adott gyorsjavításokat egy alkalmazásban. Azt tanácsoljuk ügyfeleinknek, hogy egy alkalmazás legújabb kompatibilitási szintre való frissítése után tiltsák le a 4199-es nyomkövetési jelzőt, hogy elkerüljék az optimalizáló váratlan jövőbeli módosításainak váratlan engedélyezését az alkalmazásokban. A legújabb kompatibilitási szintre való frissítés és a 4199-es nyomkövetési jelző eltávolítása továbbra is engedélyezi az összes olyan javítást, amelyet a számítási feladat a frissítés előtt használt, csak az új javításokat nem.

Megjegyzés Számos optimalizáló gyorsjavítás a 4199-es nyomkövetési jelzővel van engedélyezve, azonban néhány más nyomkövetési jelzőt használ. Nyomkövetési jelző 4199: A múltilag lefedett nyomkövetési jelzők széles körben alkalmazhatók, és valószínűleg alapértelmezés szerint engedélyezve lesznek egy későbbi kiadásban. Az alternatív nyomkövetési jelzők olyan gyorsjavítások esetében használatosak, ahol a feltételek nagyon specifikusak csak néhány ügyfél számára, ahol a javítás teljesítménycsökkenést okozhat más típusú alkalmazásokban, vagy ahol a belső funkciók módosulnak, mielőtt mindenki számára elérhetővé válna. A Microsoft továbbra is egyéb nyomkövetési jelzőket használ, ha ez a termék szervizeléséhez szükséges.

Megjegyzés Ez a cikk arra a modellre összpontosít, amellyel a nyomkövetési jelző 4199-es gyorsjavításokat a legújabb termék legújabb kompatibilitási szintjén bocsátható ki. (A közzétételkor ez az SQL Server 2016.) Az optimalizáló gyorsjavításai az SQL Server régebbi, piacon lévő verzióin, illetve alacsonyabb kompatibilitási szinteken (120 vagy korábbi) az SQL Server 2016-on jelenhetnek meg. A Microsoft minden esetben kiértékel minden esetet, és eldönti, hogy 4199-es nyomkövetési jelzőt vagy másik jelölőt használjon-e. Mivel a nem gyorsjavítási módosítások akkor is engedélyezettek, amikor egy újabb kompatibilitási szintre lép, nem ígérjük konkrétan, hogy nem történik tervmódosítás a frissítés során (a 4199-es nyomkövetési jelölővel vagy anélkül). Az ügyfeleknek mindig gondosan tesztelniük kell a kompatibilitási szint változásait éles környezetben, és olyan kockázatcsökkentő technológiákat kell használniuk, mint például a Query Store, ha csomagválasztással kapcsolatos teljesítményprobléma merül fel.

A 4199-es nyomkövetési jelző bevezetése előtt az alábbi nyomkövetési jelzők voltak használatban a lekérdezésfeldolgozó gyorsjavításaihoz:

4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4115, 4116, 4117, 4119, 4120, 4121, 4122, 4124, 4125, 4126, 4127, 4128, 4129, 4131, 4133, 4135.

SQL Server 2012 és újabb verziók

A 4199-es nyomkövetési jelző megtalálható az SQL Server 2012-es és újabb verzióinak kiadási verzióiban.

A 4199-es jelölő nyomkövetésének engedélyezése

A 4199-es nyomkövetési jelzőt engedélyezheti indításkor vagy felhasználói munkamenetben. Ennek a nyomkövetési jelzőnek globális vagy munkamenet szintű hatása van. A 4199-es nyomkövetési jelző engedélyezéséhez használja a DBCC TRACEON parancsot, vagy használja a –T 4199 értéket indítási paraméterként.

A DBCC TRACEON\TRACEOFF használata nem hoz létre új gyorsítótárazott tervet a tárolt eljárásokhoz. A nyomkövetési jelölő nélkül létrehozott tervek lehetnek gyorsítótárban.

A nyomkövetési jelzők engedélyezéséről és letiltásáról, valamint a globális és munkamenetszintű nyomkövetési jelzők magyarázatáról további információt az SQL Server Books Online következő témaköreiben talál:

Hivatkozások

Az SQL Server frissítéseihez szükséges elnevezési sémáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:

822499
Új elnevezési séma a Microsoft SQL Server szoftverfrissítési csomagjaihoz
A szoftverfrissítésekkel kapcsolatos terminológiáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:

824684
A Microsoft szoftverfrissítéseinek leírására használt szabványos terminológia leírása