Számosságbecslési (CE) visszajelzés kifejezésekhez

A következőkre vonatkozik: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL 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_EXPRESSIONS adatbá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 AB közötti illesztés egyszerű elszigetelést igényelhet, valamint a táblák CDé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_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_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_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_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 AdHocCEFeedbackCache nevű dedikált memóriaegységen vannak gyorsítótárazva. Ez a gyorsítótár a rendszerkatalógus nézetével sys.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 CardinalityFeedback attribú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.