Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Important
Lekérdezéstár-tippek egyszerűbben használható módszert nyújtanak a lekérdezéstervek alkalmazáskód módosítása nélkül történő alakításához. A Lekérdezéstár tippjei egyszerűbbek, mint a tervútmutatók. A lekérdezéstár-tippek elérhetők az Azure SQL Database-ben, az SQL Database-ben a Microsoft Fabricben, az Azure SQL Managed Instance-ben, valamint az SQL Server 2022 -ben (16.x) és újabb verziókban.
A terv útmutatói lehetővé teszik a lekérdezések teljesítményének optimalizálását, ha nem tudja vagy nem szeretné közvetlenül módosítani a tényleges lekérdezés szövegét az SQL Serveren. A terv-útmutatók lekérdezési tippek vagy rögzített lekérdezéstervek csatolásával befolyásolják a lekérdezések optimalizálását. A terv útmutatói akkor lehetnek hasznosak, ha egy külső gyártó által biztosított adatbázis-alkalmazásban lévő lekérdezések kis része nem a várt módon működik. A terv útmutatójában meg kell adnia az optimalizálni kívánt Transact-SQL utasítást, és vagy egy OPTION záradékot, amely tartalmazza a használni kívánt lekérdezési tippeket, vagy egy adott lekérdezéstervet, amelyet a lekérdezés optimalizálásához szeretne használni. A lekérdezés végrehajtásakor az SQL Server megfelel a Transact-SQL utasításnak a terv útmutatójában, és futtatáskor csatolja az OPTION záradékot a lekérdezéshez, vagy a megadott lekérdezési tervet használja. Mivel az SQL Server Lekérdezésoptimalizáló általában a legjobb végrehajtási tervet választja ki egy lekérdezéshez, javasoljuk, hogy csak a tapasztalt fejlesztők és adatbázis-rendszergazdák számára használjon terv-útmutatókat.
A létrehozható terv-útmutatók teljes számát csak a rendelkezésre álló rendszererőforrások korlátozzák. A terv útmutatóinak azonban olyan kritikus fontosságú lekérdezésekre kell korlátozódnia, amelyek célja a jobb vagy stabilizált teljesítmény. A terv-útmutatók nem használhatók az üzembe helyezett alkalmazások lekérdezési terhelésének nagy részének befolyásolására.
A funkció által kényszerített eredményül kapott végrehajtási terv megegyezik vagy hasonló lesz a kényszerített tervhez. Mivel az eredményként kapott terv nem feltétlenül azonos a terv útmutatójában megadott tervvel, a tervek teljesítménye eltérő lehet. Ritkán a teljesítménybeli különbség jelentős és negatív lehet; ebben az esetben a rendszergazdának el kell távolítania a kényszerített tervet.
A Terv útmutatók nem használhatók a Microsoft SQL Server minden kiadásában. Az SQL Server kiadásai által támogatott funkciók listáját az SQL Server 2016-kiadásai által támogatott funkcióktalálja. A terv útmutatói bármely kiadásban láthatók. Olyan adatbázist is csatolhat, amely terv-útmutatókat tartalmaz bármely kiadáshoz. Az SQL Server frissített verziójához való adatbázis visszaállítása vagy csatolása során a tervek útmutatói érintetlenek maradnak.
A terv útmutatóinak típusai
A következő típusú tervsegédek hozhatók létre.
OBJECT-terv útmutatója
Az OBJECT-terv útmutatója megfelel a Transact-SQL tárolt eljárások, a skaláris felhasználó által definiált függvények, a többutas táblaértékelt felhasználó által definiált függvények és a DML-eseményindítók kontextusában végrehajtott lekérdezéseknek.
Tegyük fel, hogy a következő tárolt eljárás, amely a @Country_region paramétert veszi igénybe, egy olyan adatbázisalkalmazásban található, amely a AdventureWorks2025 adatbázison van üzembe helyezve:
CREATE PROCEDURE Sales.GetSalesOrderByCountry (@Country_region nvarchar(60))
AS
BEGIN
SELECT *
FROM Sales.SalesOrderHeader AS h, Sales.Customer AS c,
Sales.SalesTerritory AS t
WHERE h.CustomerID = c.CustomerID
AND c.TerritoryID = t.TerritoryID
AND CountryRegionCode = @Country_region
END;
Tegyük fel, hogy ezt a tárolt eljárást @Country_region = N'AU' (Ausztrália) számára állították össze és optimalizálták. Mivel azonban viszonylag kevés az Ausztráliából származó értékesítési rendelés, a teljesítmény csökken, amikor a lekérdezés több értékesítési rendeléssel rendelkező országok/régiók paraméterértékeivel fut. Mivel a legtöbb értékesítési rendelés az Egyesült Államokból származik, a @Country_region = N'US' generált lekérdezési terv valószínűleg jobban teljesít a @Country_region paraméter összes lehetséges értékén.
A problémát megpróbálhatja megoldani a tárolt eljárás módosításával, hogy hozzáadja a OPTIMIZE FOR lekérdezési tippet a lekérdezéshez. Mivel azonban a tárolt eljárás egy üzembe helyezett alkalmazásban található, nem módosíthatja közvetlenül az alkalmazáskódot. Ehelyett létrehozhatja a következő terv útmutatót az AdventureWorks2025 adatbázisban.
sp_create_plan_guide
@name = N'Guide1',
@stmt = N'SELECT *FROM Sales.SalesOrderHeader AS h,
Sales.Customer AS c,
Sales.SalesTerritory AS t
WHERE h.CustomerID = c.CustomerID
AND c.TerritoryID = t.TerritoryID
AND CountryRegionCode = @Country_region',
@type = N'OBJECT',
@module_or_batch = N'Sales.GetSalesOrderByCountry',
@params = NULL,
@hints = N'OPTION (OPTIMIZE FOR (@Country_region = N''US''))';
Amikor a sp_create_plan_guide utasításban megadott lekérdezés végrehajtja a lekérdezést, a rendszer az optimalizálás előtt módosítja a OPTIMIZE FOR (@Country = N''US'') záradékot.
SQL-terv útmutatója
Az SQL-terv útmutatója megegyezik az önálló Transact-SQL utasítások és kötegek kontextusában végrehajtott lekérdezésekkel, amelyek nem egy adatbázis-objektum részei. AZ SQL-alapú tervkalauzok a megadott űrlapra paraméterezett lekérdezések egyeztetésére is használhatók. Az SQL-terv útmutatói önálló Transact-SQL utasításokra és kötegekre vonatkoznak. Ezeket az állításokat gyakran egy alkalmazás küldi el a sp_executesql rendszer által tárolt eljárással. Vegyük például a következő különálló köteget:
SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC;
Ha meg szeretné akadályozni, hogy párhuzamos végrehajtási terv készüljön ezen a lekérdezésen, hozza létre a következő terv útmutatót, és állítsa a MAXDOP lekérdezési tippet 1 a @hints paraméterben.
sp_create_plan_guide
@name = N'Guide2',
@stmt = N'SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (MAXDOP 1)';
Egy másik példaként tekintse meg a sp_executesqlhasználatával elküldött alábbi SQL-utasítást.
exec sp_executesql N'SELECT * FROM Sales.SalesOrderHeader
where SalesOrderID = @so_id', N'@so_id int', @so_id = 43662;
Ha egyedi tervet szeretne létrehozni a lekérdezés minden végrehajtásához, hozza létre a következő tervútmutatót, és használja a OPTION (RECOMPILE) paraméterben található @hints lekérdezési tippet.
exec sp_create_plan_guide
@name = N'PlanGuide1_SalesOrders',
@stmt = N'SELECT * FROM Sales.SalesOrderHeader
where SalesOrderID = @so_id',
@type = N'SQL',
@module_or_batch = NULL,
@params = N'@so_id int',
@hints = N'OPTION (recompile)';
Important
A @module_or_batch utasítás @params és sp_create_plan guide argumentumához megadott értékeknek meg kell egyeznie a tényleges lekérdezésben elküldött megfelelő szövegekkel. További információ: sp_create_plan_guide (Transact-SQL) és Az SQL Server Profiler használata terv-útmutatók létrehozásához és teszteléséhez.
Az SQL-terv útmutatók olyan lekérdezéseken is létrehozhatók, amelyek ugyanarra az alakra paramétereznek, ha a PARAMETERIZATION adatbázis opció KÉNYSZERÍTETT-re van állítva, vagy ha egy SABLON terv-útmutató van létrehozva, amely a paraméteres lekérdezések osztályát határozza meg.
Sablonterv útmutató
A TEMPLATE-terv útmutatója illeszkedik az olyan önálló lekérdezésekhez, amelyek egy adott űrlapra paramétereznek. Ezek a terv-útmutatók az adatbázisok aktuális PARAMETERIZATION adatbázisKÉSZLET beállításának felülbírálására szolgálnak a lekérdezések osztályához.
Sablonterv-útmutatót az alábbi helyzetekben hozhat létre:
A PARAMETERIZATION adatbázis beállítása KÉNYSZERÍTETT értékre van állítva, de vannak olyan lekérdezések, amelyeket Egyszerű paraméterezésszabályai szerint szeretne lefordítani.
A PARAMETERIZATION adatbázis opció SIMPLERE van állítva (ami az alapértelmezett beállítás), de azt szeretné, hogy Kényszerített Paraméterezést egy lekérdezési osztályhoz próbálja meg.
Tervezési útmutató megfelelési követelményei
A tervvezetők hatóköre arra az adatbázisra terjed ki, amelyben létrehozzák őket. Ezért csak azokat a terv útmutatókat lehet egyeztetni a lekérdezéssel, amelyek az adatbázisban vannak, és aktuálisak a lekérdezés végrehajtásakor. Ha például AdventureWorks2025 az aktuális adatbázis, és a következő lekérdezés fut:
SELECT FirstName, LastName FROM Person.Person;
Csak a AdventureWorks2025 adatbázis útmutatói jogosultak a lekérdezéssel való összeegyeztetésre. Ha azonban AdventureWorks2025 az aktuális adatbázis, és a következő utasítások futnak:
USE DB1;
SELECT FirstName, LastName FROM Person.Person;
Csak a DB1 terv vezérlési útmutatói illeszthetők a lekérdezéshez, mivel a lekérdezés a DB1kontextusában fut.
SQL- vagy SABLONalapú terv útmutatók esetén az SQL Server a @module_or_batch és @params argumentumok értékeit egy lekérdezéssel kapcsolja össze, karakterszintű összehasonlítással. Ez azt jelenti, hogy pontosan úgy kell megadnia a szöveget, ahogy az SQL Server megkapja a tényleges tételben.
Ha @type = "SQL" és @module_or_batch értéke NULL, a @module_or_batch értéke @stmtértékre van állítva. Ez azt jelenti, hogy a statement_text értékét azonos formátumban kell megadni, karakter-for-character formátumban, mivel az SQL Serverre kerül. Az egyeztetés megkönnyítése érdekében nem történik belső átalakítás.
Ha egy normál (SQL- vagy OBJECT-) tervútmutató és sablonterv-útmutató egyaránt alkalmazható egy utasításra, akkor csak a normál terv útmutatóját fogja használni a rendszer.
Note
A tervútmutató létrehozásához használt utasítást tartalmazó köteg nem tartalmazhat USE adatbázis- utasítást.
A terv-útmutató hatása a tervgyorsítótárra
Egy modul tervútmutatójának létrehozása eltávolítja a modul lekérdezési tervét a tervgyorsítótárból. Ha objektum vagy SQL típusú tervkalauzt hoz létre egy kötegen, azzal eltávolítja egy olyan köteg lekérdezési tervét, amely ugyanazt a kivonatértéket használja. A SABLON típusú terv útmutatóját létrehozva eltávolítja az összes egymondatos köteget az adatbázis tervgyorsítótárából.
Kapcsolódó tevékenységek
| Task | Topic |
|---|---|
| Ez a cikk azt ismerteti, hogyan hozhat létre terv útmutatót. | Új terv létrehozása útmutató |
| Ez a cikk azt ismerteti, hogyan hozhat létre tervútmutatót a paraméteres lekérdezésekhez. | Terv útmutató létrehozása paraméteres lekérdezésekhez |
| Ismerteti, hogyan szabályozhatja a lekérdezésparaméterezési viselkedést terv-útmutatók használatával. | Lekérdezésparaméterezési viselkedés megadása terv-útmutatók használatával |
| Azt ismerteti, hogyan lehet rögzített lekérdezési tervet belefoglalni egy terv útmutatóba. | Rögzített lekérdezési terv alkalmazása tervútmutatóra |
| Ez a cikk azt ismerteti, hogyan adhat meg lekérdezési tippeket egy terv útmutatójában. | Lekérdezési tippek csatolása tervútmutatóhoz |
| A tervútmutató tulajdonságainak megtekintését írja le. | Terv útmutató tulajdonságainak megtekintése |
| Ismerteti, hogyan hozhat létre és tesztelhet tervsegédeket az SQL Server Profilerrel. | Az SQL Server Profiler használata terv-útmutatók létrehozásához és teszteléséhez |
| A tervútmutatók érvényesítésének folyamatát ismerteti. | Terv útmutatóinak érvényesítése a frissítés után |
Lásd még:
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)
sp_control_plan_guide (Transact-SQL)
sys.plan_guides (Transact-SQL)
sys.fn_validate_plan_guide (Transact-SQL)