Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database a Microsoft Fabricben
A pontatlan számosságbecslések gyakran gyenge teljesítményt okoznak a lekérdezésoptimalizálás során. A kifejezések számosságbecslési (CE) visszajelzése kiterjeszti a CE visszajelzési funkció által elindított keretrendszert. A cél az ismétlődő kifejezések számosságbecslésének javítása. A kifejezések visszajelzése funkció a kifejezések lekérdezések közötti korábbi végrehajtásából tanul, hogy megtalálja a megfelelő CE-modell választásait, és alkalmazza a tanultakat a kifejezések későbbi végrehajtására. A CE-visszajelzésekhez hasonlóan a modelljavaslatok tesztelése és alkalmazása automatikusan történik a jövőbeli lekérdezések végrehajtására.
A kifejezések visszajelzése funkció azonosítja és használja a modell feltételezését, amely jobban megfelel egy adott lekérdezés kifejezésének és adateloszlásának, ami viszont javítja a lekérdezés végrehajtási tervének minőségét. A kifejezések visszajelzése funkció jelenleg azonosítja a terv operátorait, ahol a sorok becsült száma és a sorok tényleges száma nagyon eltérő. A rendszer visszajelzést alkalmaz a lekérdezésben lévő kifejezésekre, ha jelentős modellbecslési hibák lépnek fel, és van egy működőképes alternatív modell, amelyet ki kell próbálni.
Az adatbázismotor különböző verziói különböző CE-modellel kapcsolatos feltételezéseket használnak az adatok elosztásának és lekérdezésének módjától függően.
CE-visszajelzés használata kifejezésekhez
A CE Feedback for Expressions figyeli a lekérdezések végrehajtását, és azonosítja azokat a részexpressziókat, amelyek következetesen számosságbeli helytelenítést eredményeznek. A visszajelzések a megfigyelt minták alapján jönnek létre, és a lekérdezés összeállítása során kerülnek alkalmazásra a becslés pontosságának javítása érdekében.
Előfeltételek és konfiguráció
A CE Feedback for Expressions használatához a következő előfeltételeknek kell teljesülniük:
- Az adatbázisnak a 160-es vagy újabb kompatibilitási szintet kell használnia.
- Az
CE_FEEDBACK_FOR_EXPRESSIONSadatbázis-hatókörű konfigurációt engedélyezni kell (alapértelmezés szerint engedélyezve). - Az adatbázis hatókörébe tartozó konfiguráció aktuális állapotának ellenőrzése:
SELECT name,
value,
value_for_secondary
FROM sys.database_scoped_configurations
WHERE name = 'CE_FEEDBACK_FOR_EXPRESSIONS';
A funkció az alábbi adatbázis-hatókörű konfigurációs paranccsal engedélyezhető egy adatbázisban:
ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;
Ha le szeretné tiltani egy adatbázis kifejezésekkel kapcsolatos visszajelzési funkcióját, tiltsa le az CE_FEEDBACK_FOR_EXPRESSIONS adatbázis-hatókörű konfigurációt:
ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;
Hogyan működik?
Bár az ujjlenyomatok nem új fogalom az SQL Server adatbázismotorral, a kifejezésekkel kapcsolatos visszajelzési funkció kontextusában az ujjlenyomat a kifejezésen belülről származó számított aláírások kombinációjára utal. Egy fiktív vállalkozás üzleti elemzője például olyan információkat szeretne beszerezni az ügyfelei megrendeléseiről, amelyeknél az ügyfelek több mint 10 000 dollárt költöttek. A Rendelések táblához szintén csatlakozó Ügyfelek táblából származó adatok gyűjtését magában foglaló választóutasítás az ilyen típusú adatok megtekintésének egyik módja lehet:
SELECT *
FROM Customer AS C
INNER JOIN Orders AS O
ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;
Ebben a lekérdezésben a lekérdezésoptimalizáló dönthet úgy, hogy adatokat kér le az egyes táblákból , Customermajd Orderskiválasztja az összes társított oszlopot mindkét táblából, és összekapcsolja az adatokat (szűrővel), ahol a totalprice sorrend nagyobb, mint 10 000 usd.
Minden logikai kifejezés, például egy szűrő vagy egy lekérdezésterven belüli illesztés olyan aláírást hoz létre, amely hozzájárul az ujjlenyomathoz. A CE-visszajelzés a kifejezésekhez ezeket az ujjlenyomatokat használja a hasonló alkifejezéseket használó lekérdezések visszajelzéseinek megismerésére és alkalmazására, még akkor is, ha az általános lekérdezési struktúra eltérő.
A funkció olyan kifejezésekre összpontosít, amelyek következetesen túlbecsült vagy alulbecsült számossággal rendelkeznek a lekérdezések során. Két különböző számítási feladatmintát elemez, amelyek jelenleg nem jogosultak a CE-visszajelzésre:
Számítási feladatok ismétlődő végrehajtás nélkül, de ismétlődő kifejezésmintákkal. Például egy gyakran használt illesztési minta.
Azok a lekérdezések, amelyekben a lekérdezés egyik része más CE-modell előnyeit élvezi, mint ugyanazon lekérdezés egy másik része. Például a táblák
ABközötti illesztés egyszerű elszigetelést igényelhet, valamint a táblákCDés a táblák közötti illesztést, amelyek alapszintű elszigetelést igényelhetnek.
A kifejezések visszajelzése funkció szűrő- és illesztési feltételezéseket alkalmaz a helytelenül megadott problémák megoldásához, például:
Filters:
ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATESASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATESASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES
Joins:
ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS- Alapszintű elszigetelési feltételezés (nem kell tippet adni)
Ezek a feltételezések különböző CE-modellstratégiákat tükröznek, például az elszigetelést és a függetlenséget. További elméleti háttérért lásd: Számosságbecslési visszajelzés magyarázata Kate Smith által és Számosságbecslés korrelált oszlopokhoz az SQL Server 2016-ban.
Útmutató életciklusa
A visszajelzések a következő állapotok előrehaladását jelzik:
- Monitorozás: A rendszer megfigyeli a szubexpresszió ismétlődő végrehajtását, és nyomon követi, hogy a számosság helytelen becslése tartósan fennáll-e.
- Ha a helytelen becslés továbbra is fennáll, visszajelzési javaslatot lehet létrehozni és alkalmazni a lekérdezés fordítása során a CE-modell módosításához.
- Letiltva: Ha az alkalmazott tipp az optimálisnál rosszabb számosságbecslést eredményez, akkor a rendszer letiltja a jövőbeli használatot.
Ez az életciklus biztosítja, hogy a visszajelzés csak akkor legyen alkalmazva, ha előnyös, és elkerüli a regressziót a becslési minőségben.
Regresszióvédelem
A kifejezésekkel kapcsolatos CE-visszajelzések regressziós védelmet is tartalmaznak. Ha egy tipp a korábbinál rosszabb számossági becslést eredményez, az le van tiltva. Ez a védelem azonban a számosság becslésére korlátozódik, és nem értékeli ki a lekérdezések végrehajtási idejét. A végrehajtással/futásidővel kapcsolatos regressziók esetén az automatikus tervkorrekció közbeavatkozik. Ha az automatikus tervkorrekciós funkció nincs engedélyezve, a rendszer rögzíti és elérhetővé teszi a funkció által végrehajtott műveleteket a sys.dm_db_tuning_recommendations dinamikus felügyeleti nézet lekérdezésével.
Telemetria és monitorozás
A kifejezésekhez kapcsolódó CE visszajelzések tevékenysége az alábbi eszközökkel figyelhetők meg:
- Bővített események:
adhoc_ce_feedback_query_level_telemetryquery_adhoc_ce_feedback_expression_hintquery_adhoc_ce_feedback_hint
A CE visszajelzés kiterjesztett eseményei query_ce_feedback_begin_analysis és query_ce_feedback_telemetry is hasznosak lehetnek a funkció tevékenységének nyomon követése során.
Az ujjlenyomat-adatok egy
AdHocCEFeedbackCachenevű dedikált memóriaegységen vannak gyorsítótárazva. Ez a gyorsítótár a rendszerkatalógus nézetévelsys.dm_exec_ce_feedback_cacheérhető el.Showplan-integráció
A kifejezésekkel kapcsolatos CE-visszajelzések alkalmazásakor a lekérdezési terv tartalmaz egy
CardinalityFeedbackattribútumot a Showplan XML-ben. Ez a címke azt jelzi, hogy a visszajelzések egy adott alexpresszió számosságbecslésének módosítására szolgáltak.
Gyorsítótár és adatmegőrzés
A megőrzött visszajelzések egy belső Lekérdezéstár táblában (sys.plan_persist_ce_feedback_for_expressions) vannak tárolva, és újratöltődnek az indításkor. Ez biztosítja, hogy a rendszernek nem kell újratanulnia a már észlelt ujjlenyomatokra vonatkozó visszajelzéseket. A gyorsítótár-megőrzési mechanizmus természete veszteséges, ami azt jelenti, hogy a visszajelzések csak rendszeres időközönként maradnak meg a lemezen. Az adatmegőrzés gyakorisága jelenleg nem konfigurálható.
Ha az SQL Server-példány újraindul, vagy a memória a következő adatmegőrzési ciklus előtt törlődik, az utolsó kiürítés óta generált visszajelzés elveszhet.
Limitations
A perzisztencia jelenleg nem érhető el a Lekérdezéstár olvasni képes másodlagos replikáiban. A CE-visszajelzések a kifejezésekkel kapcsolatban eltérő módon alkalmazhatók egy elsődleges és egy másodlagos replikán. A visszajelzés azonban nem marad meg a másodlagos replikákon, és csak a memóriaalapú gyorsítótárban létezik ebben a forgatókönyvben. Feladatátvételi esemény esetén bármelyik olvasható másodlagos példányon tanult visszajelzések elvesznek.