Megosztás:


Útmutatók a tervezéshez

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-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.

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)