Megosztás a következőn keresztül:


Kiszolgálókonfiguráció: optimalizálás alkalmi számítási feladatokhoz

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányElemzési platformrendszer (PDW)

Ezzel optimize for ad hoc workloads a beállítással javíthatja a csomaggyorsítótár hatékonyságát olyan számítási feladatok esetében, amelyek több egyszeri használatú alkalmi köteget tartalmaznak. Ha ez a beállítás be van állítva 1, az adatbázismotor a teljes lefordított csomag helyett egy kis lefordított csomagcsomótárat tárol a csomaggyorsítótárban, amikor egy köteg első alkalommal van lefordítva. Ez a beállítás segíthet csökkenteni a memóriaterhelést, ha nem engedélyezi a tervgyorsítótár feltöltését olyan lefordított tervekkel, amelyeket nem használnak újra. Ennek a beállításnak a engedélyezése azonban befolyásolhatja az egyszeri használatú csomagok hibaelhárításának lehetőségét.

A lefordított csomagcsomó lehetővé teszi az adatbázismotor számára, hogy felismerje, hogy ez az alkalmi köteg korábban lett lefordítva, és csak egy lefordított csomagcsomótárat tárol. Amikor ezt a köteget újra meghívja (lefordítja vagy végrehajtja), az adatbázismotor lefordítja a köteget, eltávolítja a lefordított tervcsomótárat a tervgyorsítótárból, és hozzáadja a teljes lefordított tervet a tervgyorsítótárhoz.

A lefordított tervcsomók a katalógusnézet lekérdezésével és a sys.dm_exec_cached_plans "Lefordított terv" oszlopban cacheobjtype való keresésével találhatók. A csonk egyedi plan_handle. A lefordított tervcsomóponthoz nincs végrehajtási terv társítva, és a tervleíró lekérdezése nem ad vissza grafikus vagy XML-bemutatótervet.

A 8032 nyomkövetési jelző visszaállítja a gyorsítótárkorlát paramétereit az SQL Server 2005 (9.x) RTM-beállításra, amely általában lehetővé teszi a gyorsítótárak nagyobb méretűre állítását. Ezt a beállítást akkor használja, ha a gyakran újrahasznált gyorsítótár-bejegyzések nem férnek el a gyorsítótárban, és ha a optimize for ad hoc workloads beállítás nem tudta megoldani a tervgyorsítótárral kapcsolatos problémát.

Figyelmeztetés

A 8032-as nyomkövetési jelző gyenge teljesítményt okozhat, ha a nagy gyorsítótárak kevesebb memóriát tesznek elérhetővé más memóriafelhasználók, például a pufferkészlet számára.

Megjegyzések

Ha csak az optimize for ad hoc workloads új csomagokat szeretné érinteni 1 , a már a csomaggyorsítótárban lévő csomagokra nincs hatással.

A már gyorsítótárazott lekérdezési tervek azonnali hatásának érdekében a tervgyorsítótárat törölni kell az ALTER DATABASE HATÓKÖRŰ KONFIGURÁCIÓ TÖRLÉSE PROCEDURE_CACHE használatával, vagy az SQL Servernek újra kell indítania.

Recommendations

Ne használjon nagy számú egyszer használatos csomagot a csomaggyorsítótárban. Gyakori okok a következők:

  • A nem konzisztensen definiált lekérdezési paraméterek adattípusai. Ez különösen a sztringek hosszára vonatkozik, de bármilyen adattípusra alkalmazható, amely maximális, pontosságú vagy skálázható. Ha például egy névvel ellátott @Greeting paraméter nvarchar(10) néven van átadva egy híváson, és nvarchar(20) a következő híváson, a rendszer külön csomagokat hoz létre minden paramétermérethez.

  • Nem paraméterezett lekérdezések. Ha egy lekérdezés egy vagy több paraméterrel rendelkezik, amelyekhez a rendszer a hard-coded értékeket küldi el az adatbázismotornak, az egyes lekérdezésekhez számos lekérdezési terv létezhet. A használt lekérdezési paraméter adattípusainak és hosszának minden kombinációjához léteznek tervek.

Ha az egyszer használatos csomagok száma az SQL Server adatbázismotor memóriájának jelentős részét veszi igénybe egy OLTP-kiszolgálón, és ezek a csomagok alkalmi csomagok, ezzel a kiszolgálói beállítással csökkentheti a memóriahasználatot ezekkel az objektumokkal.

Ha a optimize for ad hoc workloads beállítás engedélyezve van, nem tekintheti meg az egyszer használatos lekérdezések végrehajtási terveit, mert csak a csomagcsomó van gyorsítótárazva. A környezettől és a számítási feladattól függően az alábbi két funkció lehet hasznos:

  • Az SQL Server 2016-ban (13.x) bevezetett Lekérdezéstár funkció segítségével gyorsan megtalálhatja a lekérdezésterv módosításai által okozott teljesítménybeli különbségeket. A Lekérdezéstár alapértelmezés szerint engedélyezve van az SQL Server 2022 (16.x) és újabb verzióiban lévő új adatbázisokon.

  • A kényszerített paraméterezés javíthatja bizonyos adatbázisok teljesítményét a lekérdezés-fordítások és újrafordítások gyakoriságának csökkentésével. A kényszerített paraméterezés előnyeit élvező adatbázisok általában nagy mennyiségű egyidejű lekérdezést tapasztalnak olyan forrásokból, mint például az értékesítési pontok alkalmazásai.

    A kényszerített paraméterezés teljesítményproblémákat okozhat a paraméter érzékenysége miatt. További információ: Paraméterérzékeny problémák kivizsgálása és megoldása. Az SQL Server 2022 (16.x) és újabb verziói esetében engedélyezheti a paraméterérzékeny csomag optimalizálását is.

Példák

Az egyszer használatos gyorsítótárazott csomagok számának megkereséséhez futtassa a következő lekérdezést:

SELECT objtype,
    cacheobjtype,
    SUM(refcounts) AS AllRefObjects,
    SUM(CAST(size_in_bytes AS BIGINT)) / 1024 / 1024 AS SizeInMB
FROM sys.dm_exec_cached_plans
WHERE objtype = 'Adhoc'
    AND usecounts = 1
GROUP BY objtype, cacheobjtype;