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


Automatikus hangolás

A következőkre vonatkozik: Az SQL Server 2017 (14.x) és újabb verziói az Azure SQL DatabaseAzure SQL Managed InstanceSQL Database-adatbázist a Microsoft Fabricben

Az automatikus hangolás egy adatbázis-funkció, amely betekintést nyújt a lekérdezések teljesítményproblémáiba, megoldásokat javasol, és automatikusan megoldja az azonosított problémákat.

Az SQL Server 2017 -ben (14.x) bevezetett automatikus hangolás értesíti Önt, ha lehetséges teljesítményproblémát észlel, és lehetővé teszi a korrekciós műveletek alkalmazását, vagy lehetővé teszi, hogy az adatbázismotor automatikusan javítsa ki a teljesítményproblémákat. Az SQL Server automatikus finomhangolása azonosítja és kijavítja a lekérdezés-végrehajtási terv választási regressziói által okozott teljesítményproblémákat. Az Azure SQL Database és a Microsoft Fabric SQL Database automatikus hangolása létrehozza a szükséges indexeket, és eltávolítja a nem használt indexeket. A lekérdezés-végrehajtási tervekről további információt a Végrehajtási tervek című témakörben talál.

Az SQL Server adatbázismotor figyeli az adatbázisban végrehajtott lekérdezéseket, és automatikusan javítja a számítási feladat teljesítményét. Az adatbázismotor beépített intelligencia mechanizmussal rendelkezik, amely automatikusan finomhangolhatja és javíthatja a lekérdezések teljesítményét azáltal, hogy dinamikusan igazítja az adatbázist a számítási feladathoz. Két automatikus hangolási funkció érhető el:

  • Az automatikus tervkorrekció azonosítja a problémás lekérdezés-végrehajtási terveket, például a paraméterek bizalmassági vagy paramétersziffing-problémáit , és a regresszió előtt az utolsó ismert jó terv kényszerítésével megoldja a lekérdezés-végrehajtási tervvel kapcsolatos teljesítményproblémákat. A következőkre vonatkozik: SQL Server (kezdve az SQL Server 2017-zel (14.x)), az Azure SQL Database-zel és a Microsoft Fabric sql-adatbázisával, valamint a felügyelt Azure SQL-példánysal

  • Az automatikus indexkezelés azonosítja az adatbázisban hozzáadandó indexeket és az eltávolítandó indexeket. A következőkre vonatkozik: Azure SQL Database és SQL Database a Microsoft Fabricben

Note

Ebben a cikkben az Azure SQL Database funkciói és viselkedése a Microsoft Fabric sql-adatbázisára is vonatkozik.

Miért érdemes automatikusan finomhangolni?

A klasszikus adatbázis-felügyelet három fő feladata a számítási feladat figyelése, a kritikus Transact-SQL lekérdezések azonosítása, valamint a teljesítmény javítása érdekében hozzáadandó indexek vagy a ritkán használt és a teljesítmény javítása érdekében eltávolítható indexek azonosítása. Az SQL Server adatbázismotorja részletes betekintést nyújt a monitorozni kívánt lekérdezésekbe és indexekbe. Az adatbázisok folyamatos monitorozása azonban nehéz és fárasztó feladat, különösen sok adatbázis kezelésekor. Számos adatbázis kezelése hatékonyan lehetetlen lehet. Az adatbázis manuális figyelése és finomhangolása helyett érdemes lehet a monitorozási és hangolási műveletek némelyikét az adatbázismotorra delegálni az automatikus hangolási funkcióval.

Hogyan működik az automatikus hangolás?

Az automatikus hangolás egy folyamatos monitorozási és elemzési folyamat, amely folyamatosan megismeri a számítási feladat jellemzőit, és azonosítja a lehetséges problémákat és fejlesztéseket.

Automatikus hangolási folyamat.

Ez a folyamat lehetővé teszi az adatbázis számára, hogy dinamikusan alkalmazkodjon a számítási feladatokhoz azáltal, hogy megkeresi, hogy milyen indexek és tervek javíthatják a számítási feladatok teljesítményét, és milyen indexek befolyásolhatják a számítási feladatokat. Ezek alapján az automatikus hangolás olyan hangolási műveleteket alkalmaz, amelyek javítják a számítási feladatok teljesítményét. Emellett az automatikus hangolás folyamatosan figyeli az adatbázis teljesítményét a módosítások implementálása után, hogy az javítja a számítási feladat teljesítményét. A rendszer automatikusan visszaállít minden olyan műveletet, amely nem javította a teljesítményt. Ez az ellenőrzési folyamat kulcsfontosságú funkció, amely biztosítja, hogy az automatikus finomhangolással végzett módosítások ne csökkentik a számítási feladat általános teljesítményét.

Automatikus tervkorrekció

Az automatikus tervkorrekció egy automatikus hangolási funkció, amely azonosítja a végrehajtási terv választási regresszióját , és automatikusan megoldja a problémát az utolsó ismert jó terv kényszerítésével. A lekérdezés-végrehajtási tervekről és a lekérdezésoptimalizálóról további információt a lekérdezésfeldolgozási architektúra útmutatójában talál.

Important

Az automatikus tervkorrekció attól függ, hogy a lekérdezéstár engedélyezve van-e az adatbázisban a számítási feladatok nyomon követéséhez.

Mi a végrehajtási terv választási regressziója?

Az SQL Server adatbázismotorja különböző végrehajtási terveket használhat a Transact-SQL lekérdezések végrehajtásához. A lekérdezési tervek a statisztikáktól, az indextől és más tényezőktől függenek. A Transact-SQL lekérdezés végrehajtásához használandó optimális terv idővel változhat ezen tényezők változásaitól függően. Bizonyos esetekben előfordulhat, hogy az új terv nem jobb az előzőnél, és az új terv teljesítményregressziót okozhat, például paraméterérzékenység vagy paraméterszenzissel kapcsolatos probléma.

Lekérdezés-végrehajtási terv választási regressziója.

Amikor egy tervválasztási regressziót észlel, keressen egy korábbi jó tervet, és kényszerítse arra, hogy az aktuális helyett használja. Ezt az sp_query_store_force_plan eljárás használatával teheti meg. Az SQL Server 2017 adatbázismotorja (14.x) információt nyújt a regressziós tervekről és a javasolt korrekciós műveletekről. Az adatbázismotor emellett lehetővé teszi a folyamat teljes automatizálását, és lehetővé teszi, hogy az adatbázismotor kijavítsa a tervmódosítással kapcsolatos problémákat.

Important

Az adatbáziskompatibilitási szint frissítésének hatókörében az alapterv rögzítése után automatikus tervkorrekciót kell használni a számítási feladatok frissítési kockázatainak automatikus csökkentéséhez. További információ erről a használati esetről: Teljesítménystabilitás megőrzése az újabb SQL Serverre való frissítés során.

Automatikus tervválasztás-korrekció

Az adatbázismotor automatikusan átválthat az utolsó ismert jó tervre, amikor egy tervválasztási regressziót észlel.

Lekérdezés-végrehajtási terv választási lehetőségének javítása.

Az adatbázismotor automatikusan észleli az esetleges tervválasztási regressziót, beleértve a nem megfelelő terv helyett használni kívánt tervet is. Az automatikus tervkorrekció által kényszerített végrehajtási terv megegyezik vagy hasonló lesz az utolsó ismert jó tervhez. Mivel az eredményül kapott terv nem feltétlenül azonos az utolsó jól ismert tervével, a kényszerített terv 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 az automatikus tervkorrekció automatikusan leállítja a csereterv kényszerítését.

Ha az adatbázismotor a regresszió előtt alkalmazza az utolsó ismert jó tervet, automatikusan figyeli a kényszerített terv teljesítményét. Ha a kényszerített terv nem jobb, mint a regressziós terv, az új terv nem lesz kényszerítve, és az adatbázismotor összeállít egy új tervet. Ha az adatbázismotor ellenőrzi, hogy a kényszerített terv jobb-e a regressziós tervnél, a kényszerített terv megmarad. A rendszer mindaddig megőrzi azt, amíg újrafordítás nem történik (például egy következő statisztikai frissítéskor vagy sémamódosításkor). A tervkényszerítésről és a kényszeríthető tervek típusairól további információt a Terv kényszerítési korlátozásai című témakörben talál.

Note

Ha az SQL Server-példány újraindul a terv kényszerítési műveletének ellenőrzése előtt, a rendszer automatikusan feloldja a tervet. Ellenkező esetben a terv érvényesítése megmarad az SQL Server újraindításakor.

Automatikus tervválasztási javítás engedélyezése

Engedélyezheti az adatbázisonkénti automatikus hangolást, és beállíthatja, hogy az utolsó jó tervet kényszerítse ki, amikor valamilyen tervmódosítási regressziót észlel. Az automatikus hangolás a következő paranccsal engedélyezve van:

ALTER DATABASE <yourDatabase>
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON );

Ha engedélyezte ezt a beállítást, az adatbázismotor automatikusan kikényszerít minden olyan javaslatot, amely esetén a becsült CPU-nyereség meghaladja a 10 másodpercet, vagy az új terv hibáinak száma magasabb, mint az ajánlott tervben szereplő hibák száma, és ellenőrizze, hogy a kényszerített terv jobb-e az aktuálisnál.

Ha engedélyezni szeretné az automatikus hangolást az Azure SQL Database-ben és a felügyelt Azure SQL-példányban, olvassa el az Automatikus hangolás engedélyezése az Azure SQL Database-ben az Azure Portal használatával című témakört.

Alternatív – manuális tervválasztási korrekció

Automatikus hangolás nélkül a felhasználóknak rendszeresen figyelniük kell a rendszert, és meg kell keresniük a visszafejtött lekérdezéseket. Ha valamelyik terv visszafejlődött, a felhasználónak meg kell találnia egy korábbi jó tervet, és azt kényszerítenie kell az aktuális helyett, az sp_query_store_force_plan eljárás alkalmazásával. Az ajánlott eljárás az, ha kikényszerítené az utolsó ismert jó tervet, mert a régebbi tervek statisztikai vagy indexváltozások miatt érvénytelenek lehetnek. Az utolsó ismert jó tervet kikényszerítő felhasználónak figyelnie kell a kényszerített terv használatával végrehajtott lekérdezés teljesítményét, és ellenőriznie kell, hogy a kényszerített terv a várt módon működik-e. A figyelés és az elemzés eredményeitől függően a tervet kényszeríteni kell, vagy a felhasználónak más módszert kell találnia a lekérdezés optimalizálására, például újraírására. A manuálisan kényszerített terveket nem szabad örökre kényszeríteni, mert az adatbázismotornak képesnek kell lennie optimális tervek alkalmazására. A felhasználónak vagy a DBA-nak végül le kell oldania a terv kényszerítését az sp_query_store_unforce_plan eljárás használatával, és hagynia kell, hogy az Adatbázis-motor megtalálja az optimális tervet.

Tip

Másik lehetőségként használja a Lekérdezéstár "Lekérdezések kényszerített tervekkel" nézetet a tervek feloldásához és megkereséséhez.

Az SQL Server minden szükséges nézetet és eljárást biztosít a teljesítmény monitorozásához és a lekérdezéstár problémáinak megoldásához.

Az SQL Server 2016-ban (13.x) a lekérdezéstár rendszernézeteivel megtalálhatja a tervválasztási regressziókat. Az SQL Server 2017 -től (14.x) kezdődően az adatbázismotor észleli és megjeleníti a lehetséges tervválasztási regressziókat, valamint a sys.dm_db_tuning_recommendations (Transact-SQL) DMV-ben alkalmazandó javasolt műveleteket. A DMV információkat jelenít meg a problémáról, a probléma fontosságáról és olyan részletekről, mint az azonosított lekérdezés, a regressziós terv azonosítója, az összehasonlítás alapkonfigurációjaként használt terv azonosítója, valamint a probléma megoldásához végrehajtható Transact-SQL utasítás.

típus description datetime pont details ...
FORCE_LAST_GOOD_PLAN A processzoridő 4 ms-ról 14 ms-ra módosult 3/17/2017 83 queryId recommendedPlanId regressedPlanId T-SQL
FORCE_LAST_GOOD_PLAN A processzoridő 37 ms-ról 84 ms-ra módosult 3/16/2017 26 queryId recommendedPlanId regressedPlanId T-SQL

A nézet egyes oszlopait a következő listában találja:

  • Az ajánlott művelet FORCE_LAST_GOOD_PLANtípusa.
  • Leírás, amely információkat tartalmaz arról, hogy az adatbázismotor miért gondolja úgy, hogy ez a tervmódosítás potenciális teljesítményregresszió.
  • A lehetséges regresszió észlelésének dátuma.
  • A javaslat pontszáma.
  • A problémák részletei, például az észlelt terv azonosítója, a regressziós terv azonosítója, a probléma megoldására kényszerítendő terv azonosítója, Transact-SQL a probléma megoldására alkalmazható szkript stb. A részletek JSON formátumban vannak tárolva.

A következő lekérdezéssel beszerezhet egy szkriptet, amely kijavítja a problémát, és további információkat talál a becsült nyereségről:

SELECT reason, score,
      script = JSON_VALUE(details, '$.implementationDetails.script'),
      planForceDetails.*,
      estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount)
                  * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage)/1000000,
      error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES','NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON (Details, '$.planForceDetails')
    WITH (  [query_id] int '$.queryId',
            regressedPlanId int '$.regressedPlanId',
            recommendedPlanId int '$.recommendedPlanId',
            regressedPlanErrorCount int,
            recommendedPlanErrorCount int,
            regressedPlanExecutionCount int,
            regressedPlanCpuTimeAverage float,
            recommendedPlanExecutionCount int,
            recommendedPlanCpuTimeAverage float
          ) AS planForceDetails;

Itt van az eredmények összessége.

reason pont parancsfájl query_id aktuális plan_id ajánlott „plan_id” becsült_hozam hibára hajlamos
A processzoridő 3 ms-ról 46 ms-ra módosult 36 EXEC sp_query_store_force_plan 12, 17; 12 28 17 11.59 0

Az oszlop estimated_gain azt a becsült másodpercszámot jelöli, amelyet a rendszer ment, ha az ajánlott terv a lekérdezések végrehajtására szolgálna az aktuális terv helyett. Ha a nyereség meghaladja a 10 másodpercet, a javasolt tervet az aktuális terv helyett kötelező megadni. Ha az aktuális tervben több hiba (például időtúllépés vagy megszakított végrehajtás) szerepel, mint az ajánlott tervben, az oszlop error_prone értéke az érték YESlesz. A hibára hajlamos terv egy másik oka annak, hogy az ajánlott tervet a jelenlegi helyett kényszeríteni kell.

Bár az adatbázismotor minden szükséges információt megad a tervválasztási regressziók azonosításához, a folyamatos monitorozás és a teljesítményproblémák kijavítása fárasztó folyamattá válhat. Az automatikus hangolás sokkal egyszerűbbé teszi ezt a folyamatot.

Note

A DMV-ben lévő sys.dm_db_tuning_recommendations adatok nem maradnak meg az adatbázismotor újraindítása után. A sqlserver_start_time oszlopával keresse meg az adatbázismotor utolsó indítási idejét.

Automatikus indexkezelés

Az Azure SQL Database-ben az indexkezelés egyszerű, mivel az Azure SQL Database megismeri a számítási feladatokat, és biztosítja az adatok optimális indexelhetőségét. A megfelelő indextervezés elengedhetetlen a számítási feladatok optimális teljesítményéhez, és az automatikus indexkezelés segíthet az indexek optimalizálásában. Az automatikus indexkezelés kijavíthatja a helytelenül indexelt adatbázisok teljesítményproblémáit, vagy karbantarthatja és javíthatja a meglévő adatbázisséma indexeit. Az Azure SQL Database automatikus hangolása a következő műveleteket hajtja végre:

  • Olyan indexeket azonosít, amelyek javíthatják a táblákból adatokat beolvasó Transact-SQL lekérdezések teljesítményét.
  • Azonosítja azokat a redundáns indexeket vagy indexeket, amelyeket hosszabb ideig nem használtak, és amelyeket el lehetett távolítani. A szükségtelen indexek eltávolítása javítja a táblákban adatokat frissítő lekérdezések teljesítményét.

Miért van szüksége indexkezelésre?

Az indexek felgyorsítják egyes lekérdezéseket, amelyek adatokat olvasnak a táblákból, de lelassíthatják az adatokat frissítő lekérdezéseket. Gondosan elemeznie kell, hogy mikor kell indexet létrehoznia, és milyen oszlopokat kell tartalmaznia az indexben. Előfordulhat, hogy bizonyos indexekre egy idő után nincs szükség. Ezért rendszeres időközönként azonosítania és elvetnie kell ezeket az indexeket, amelyek nem járnak előnyökkel. Ha figyelmen kívül hagyja a használaton kívüli indexeket, az adatok frissítésével foglalkozó lekérdezések teljesítménye csökkenne, anélkül hogy az adatok olvasásával foglalkozó lekérdezések előnyt élveznének. A nem használt indexek a rendszer általános teljesítményét is befolyásolják, mivel a további frissítésekhez szükségtelen naplózásra van szükség.

Az optimális indexkészlet megkeresése, amely javítja a táblákból adatokat olvasó lekérdezések teljesítményét, és minimális hatással van a frissítésekre, folyamatos és összetett elemzést igényelhet.

Az Azure SQL Database beépített intelligenciát és speciális szabályokat használ, amelyek elemzik a lekérdezéseket, azonosítják az aktuális számítási feladatokhoz optimális indexeket, és azonosítják azokat az indexeket, amelyeket esetleg el kell távolítani. Az Azure SQL Database biztosítja, hogy minimálisan szükséges indexekkel rendelkezzen, amelyek optimalizálják az adatokat olvasott lekérdezéseket, és minimális hatással vannak a többi lekérdezésre.

Automatikus indexkezelés

Az észlelés mellett az Azure SQL Database automatikusan alkalmazhat azonosított javaslatokat. Ha úgy találja, hogy a beépített szabályok javítják az adatbázis teljesítményét, az Azure SQL Database automatikusan kezelheti az indexeket.

Amikor az Azure SQL Database CREATE INDEX vagy DROP INDEX javaslatot alkalmaz, automatikusan figyeli az index által érintett lekérdezések teljesítményét. Az új index csak akkor marad meg, ha az érintett lekérdezések teljesítménye javul. Az elvetett index automatikusan újra létrejön, ha vannak olyan lekérdezések, amelyek az index hiánya miatt lassabban futnak.

Automatikus indexkezelési szempontok

Az Azure SQL Database-ben a szükséges indexek létrehozásához szükséges műveletek erőforrásokat használnak fel, és időlegesen befolyásolhatják a számítási feladatok teljesítményét. Az indexlétrehozás számítási feladatok teljesítményére gyakorolt hatásának minimalizálása érdekében az Azure SQL Database megfelelő időkeretet talál az indexkezelési műveletekhez. A finomhangolási művelet elhalasztható, ha az adatbázisnak erőforrásokra van szüksége a számítási feladat végrehajtásához, és újraindul, ha az adatbázis elegendő nem használt erőforrással rendelkezik, amely a karbantartási feladathoz használható. Az automatikus indexkezelés egyik fontos funkciója a műveletek ellenőrzése. Amikor az Azure SQL Database létrehoz vagy elvet egy indexet, egy monitorozási folyamat elemzi a számítási feladat teljesítményét annak ellenőrzéséhez, hogy a művelet javította-e a teljes teljesítményt. Ha nem hozott jelentős javulást , a művelet azonnal visszaáll. Így az Azure SQL Database biztosítja, hogy az automatikus finomhangolási műveletek ne befolyásolják negatívan a számítási feladat teljesítményét. Az automatikus finomhangolással létrehozott indexek transzparensek a mögöttes séma karbantartási műveletéhez. Az automatikusan létrehozott indexek nem tiltják le az olyan sémamódosításokat, mint az oszlopok elvetése vagy átnevezése. Az Azure SQL Database által automatikusan létrehozott indexeket a rendszer azonnal elveti a kapcsolódó tábla vagy oszlopok elvetésekor.

Alternatív – manuális indexkezelés

Automatikus indexkezelés nélkül a felhasználónak vagy a DBA-nak manuálisan kell lekérdeznie a sys.dm_db_missing_index_details (Transact-SQL) nézetet, vagy a Management Studióban a Teljesítmény irányítópult jelentésével megkeresni azokat az indexeket, amelyek javíthatják a teljesítményt, indexeket hozhatnak létre a nézetben megadott részletekkel, és manuálisan monitorozzák a lekérdezés teljesítményét. Az elvetendő indexek megkereséséhez a felhasználóknak figyelnie kell az indexek működési használati statisztikáit, hogy megtalálják a ritkán használt indexeket.

Az Azure SQL Database leegyszerűsíti ezt a folyamatot. Az Azure SQL Database elemzi a számítási feladatot, azonosítja azokat a lekérdezéseket, amelyek gyorsabban végrehajthatók egy új index használatával, és azonosítja a nem használt vagy duplikált indexeket. A módosítandó indexek azonosításával kapcsolatos további információkért tekintse meg az Indexjavaslatok keresése az Azure Portalon című témakört.

Következő lépések