Query Store olvasható másodlagos replikákhoz (előzetes verzió)

A következőkre vonatkozik: : SQL Server 2022 (16.x) és újabb verziók Azure SQL DatabaseAzure SQL Managed Instance

A Query Store az olvasható másodlagos replikákhoz biztosít elemzéseket, lehetővé téve, hogy a másodlagos replikákon futó számítási feladatokkal kapcsolatos betekintéseket kapjunk. Ha engedélyezve van, a másodlagos replikák továbbítják a lekérdezések végrehajtási adatait (például a futtatókörnyezetet és a várakozási statisztikákat) az elsődleges replikára, ahol az adatok Query Store vannak megőrzve, és az összes replika számára láthatóvá válik.

Megjegyzés:

Az olvasható másodlagos replikák lekérdezéstára jelenleg előzetes verzióban érhető el az összes SQL-Database Engine platformon.

Availability

A Query Store az olvasható másodlagos replikák számára elérhető a 2025-ös (17.x) SQL Server verziótól kezdődően, valamint az Azure SQL Database és Azure SQL Managed Instance esetében a Always-up-to-date frissítési szabályzattal. A 2022-SQL Server (16.x) Query Store olvasható másodlagos replikákhoz engedélyezni kell az 12606-os nyomkövetési jelző használatát a funkció használatához.

Az alábbi táblázat összefoglalja a Lekérdezéstár rendelkezésre állását és engedélyezett állapotát az olvasható másodtárakhoz.

Plattform Beszerezhető Alapértelmezés szerint engedélyezve
Azure SQL Database Igen1 Igen (mindig engedélyezve)
SQL-adatbázis a Microsoft Fabric Igen Igen (mindig engedélyezve)
Felügyelt Azure SQL-példányAUTD Igen Igen (mindig engedélyezve)
Azure SQL Managed Instance 2025 Nem Nem
Azure SQL Managed Instance 2022 Nem Nem
SQL Server 2025 (17.x) Igen Nem (engedélyezhető, adatbázisonként)
SQL Server 2022 (16.x) Nr. 2 Nem

1 Az olvasható másodtárak lekérdezéstára jelenleg nem érhető el a Azure SQL Database rugalmas skálázási szolgáltatási szintjén.
2 Az olvasható másodlagos fájlok lekérdezéstára korlátozott előzetes verzióban marad az SQL Server 2022-hez (16.x), ezért éles környezetben nem támogatott, és alapértelmezés szerint le van tiltva. Ahhoz, hogy a Query Store engedélyezve legyen az olvasható másodpéldányokhoz a SQL Server 2022 (16.x) esetében, az 12606-os nyomkövetési jelzőt engedélyezni kell az elsődleges és az összes olvasható másodlagos replikán. A 12606-os nyomkövetési jelző nem a SQL Server 2022 (16.x) alapú éles környezetekhez készült. További információ: SQL Server 2022 kibocsátási megjegyzések.

Támogatott magas rendelkezésre állási forgatókönyvek

  • Mielőtt egy SQL Server 2025-ös (17.x) példányon olvasható másodlagos replikákhoz használná a Query Store-t, konfigurálnia kell egy Always On rendelkezésre állási csoportot.

  • Az Azure SQL Database esetében az olvasható másodlagos replikákhoz a Query Store a következő szolgáltatási szinteket támogatja:

    • Általános célú aktív georeplikációs vagy feladatátvételi csoportkonfiguráció (nincs beépített magas rendelkezésre állású replika; a másodlagos támogatáshoz georeplikát vagy feladatátvételi csoportkonfigurációt igényel)
    • Prémium (beépített magas rendelkezésre állású replikákat, aktív georeplikációs vagy feladatátvételi csoportokat is támogat)
    • Üzleti szempontból kritikus (beépített magas rendelkezésre állású replikákat, aktív georeplikációs vagy feladatátvételi csoportokat is támogat)
  • Az Always-up-to-date szabályzatot alkalmazó Azure SQL Managed Instance esetében az olvasható másodlagos replikák Query Store-ja a következő szolgáltatási szinteket támogatja:

    • Általános célú feladatátvételi csoporttal (nincs beépített magas rendelkezésre állású replika; a másodlagos támogatáshoz feladatátvevőcsoport-konfiguráció szükséges)
    • Üzleti szempontból kritikus (beépített magas rendelkezésre állású replikákat is tartalmaz)

Engedélyezze a Query Store-t olvasható másodlagos replikák esetén

Ha a Query Store nincs már engedélyezve és READ_WRITE módban az elsődleges replikán, a folytatás előtt engedélyeznie kell azt. Hajtsa végre a következő szkriptet az elsődleges replikán található összes kívánt adatbázishoz:

ALTER DATABASE [Database_Name]
    SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);

Ha engedélyezni szeretné a Query Store minden olvasható másodlagos replikán, csatlakozzon az elsődleges replikához, és hajtsa végre a következő szkriptet minden olyan adatbázishoz, amelyet a szolgáltatás használatához fel kell venni.

ALTER DATABASE [Database_Name]
    FOR SECONDARY
    SET QUERY_STORE = ON
    (OPERATION_MODE = READ_WRITE);

Megjegyzés:

A SQL Server Management Studio (SSMS) 21-es verziója előtt a FOR SECONDARY szintaxis érvényes, de az IntelliSense nem ismeri fel. A SQL Server 2022-ben az SSMS IntelliSense nem ismeri fel a FOR SECONDARY szintaxist érvényesként, pedig az érvényes.

Automatikus tervkorrekció engedélyezése másodlagos replikákhoz

Érvényes: SQL Server 2022 (16.x) és újabb verziókra, valamint az Azure SQL Database-re.

Miután engedélyezte a Query Store-t a másodlagos replikákhoz, opcionálisan engedélyezheti az automatikus hangolást, hogy a tervkorrekciós funkció automatikusan kényszerítse a terveket a másodlagos replikákra. Így a lekérdezésoptimalizáló automatikusan azonosíthatja és kijavíthatja a végrehajtási terv regressziói által okozott lekérdezési teljesítményproblémákat a másodlagos replikákon.

A másodlagos replikák automatikus tervkorrekciójának engedélyezéséhez csatlakozzon az elsődleges replikához, és hajtsa végre a következő szkriptet minden egyes kívánt adatbázishoz:

ALTER DATABASE [Database_Name]
FOR SECONDARY
SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);

A Query Store letiltása másodlagos replikák esetén

Ha le szeretné tiltani a másodlagos replikák Query Store funkcióját az összes másodlagos replikán, csatlakozzon a master replika primary adatbázisához, és hajtsa végre a következő szkriptet minden egyes kívánt adatbázishoz:

ALTER DATABASE [Database_Name]
    FOR SECONDARY
    SET QUERY_STORE = ON
    (OPERATION_MODE = READ_ONLY);

Ellenőrizze, hogy a Query Store engedélyezve van-e a másodlagos replikákon.

Ellenőrizheti, hogy a Query Store engedélyezve van-e egy secondary replikán, ha csatlakozik a másodlagos replika adatbázisához, és végrehajtja a következő T-SQL-utasítást:

SELECT desired_state_desc,
       actual_state_desc,
       readonly_reason
FROM sys.database_query_store_options;

A sys.database_query_store_options katalógusnézet lekérdezésének eredményeinek azt kell mutatnia, hogy a Query Store tényleges állapota READ_CAPTURE_SECONDARY, egy readonly_reason értékkel 8.

desired_state_desc actual_state_desc readonly_reason
READ_CAPTURE_SECONDARY READ_CAPTURE_SECONDARY 8

Megjegyzések

Terminológia

A replikakészlet egy adatbázis olvasási/írási replikájából (elsődleges) és egy vagy több írásvédett replikából (másodlagos) áll, logikai egységként kezelve őket. Ebben a kontextusban egy szerepkör egy adott replika szerepkörére utal. Amikor egy replika az elsődleges szerepkörben szolgál, az olvasási/írási replika képes adatmódosításokat és olvasási tevékenységeket végezni. Ha egy replika úgy van konfigurálva, hogy csak olvasási tevékenységet végezzen, másodlagos szerepkörben (másodlagos, geo másodlagos, geo ha másodlagos) működik. A szerepkörök tervezett vagy nem tervezett feladatátvételi eseményeken keresztül változhatnak, ha ez történik, az elsődleges szerepkör másodlagossá vagy fordítva válhat.

A jelenleg támogatott szerepkörök a következők:

  • Primary
  • Secondary
  • Geo másodlagos egység
  • Geo HA másodlagos
  • Elnevezett replika

Hogyan működik?

A lekérdezésekről tárolt adatok szerepköralapú számítási feladatként elemezhetők. Query Store az olvasható másodlagos replikák esetében lehetőséget ad arra, hogy figyelemmel kísérje bármely egyedi, írásvédett terhelés teljesítményét, amely a másodlagos replikákon futhat. Az adatok a szerepkör szintjén összesítve lesznek. Egy SQL Server distributed rendelkezésreállási csoport konfiguráció például a következőkből állhat:

  • Egy elsődleges replika, az 1. rendelkezésre állási csoport része (AG1)

  • Két helyi másodlagos replika, szintén az AG1 része

  • Egy távoli elsődleges replika egy másik helyen, amely egy külön rendelkezésre állási csoport (AG2) része. SQL Server terminológiában globális továbbítónak is nevezik, azonban az olvasható másodlagos replikák Query Store funkció felismeri és Geo secondary replikaként hivatkozik rá, feltéve, hogy az földrajzilag elosztott másodlagos replika.

Ha az AG1 és az AG2 úgy van konfigurálva, hogy írásvédett kapcsolatokat engedélyezzen, amikor egy írásvédett számítási feladat az AG1 másodlagos replikáin fut, a Query Store végrehajtási statisztikákat a rendszer elküldi az AG1 elsődleges replikájának, és összesíti és megőrzi a secondary szerepkörből létrehozott adatokat, mielőtt az adatokat visszaküldené az összes másodlagos replikának, beleértve az AG2 globális továbbítóját is. Ha egy külön számítási feladatot hajt végre az AG2 elsődleges replikáján, a globális átirányító az adatokat visszaküldi az AG1 elsődleges replikájába, és azokat úgy tárolja, mint amelyeket a Geo secondary szerepkörből generáltak.

Megfigyelhetőség szempontjából a sys.query_store_runtime_stats rendszerkatalógus nézete ki van terjesztve annak a szerepkörnek a azonosításához, ahonnan a végrehajtási statisztikák származnak. Kapcsolat van a nézet és a sys.query_store_replicas rendszerkatalógus nézet között, amely a szerepkör barátságosabb nevét is megadhatja. A SQL Serverben a replica_name oszlop NULL. Az replica_name oszlop azonban akkor lesz feltöltve a Hyperscale szolgáltatási szinthez, ha van egy nevesített replika, és írásvédett számítási feladatokhoz használják.

Példa egy T-SQL-lekérdezésre, amely az elmúlt 8 óra 50 lekérdezésének átfogó elemzésére használható, amely az összes replikából felhasznált CPU-erőforrásokat:

-- Top 50 queries by CPU across all replicas in the last 8 hours
DECLARE @hours AS INT = 8;

SELECT TOP 50 qsq.query_id,
              qsp.plan_id,
              CASE qrs.replica_group_id WHEN 1 THEN 'PRIMARY' WHEN 2 THEN 'SECONDARY' WHEN 3 THEN 'GEO SECONDARY' WHEN 4 THEN 'GEO HA SECONDARY' ELSE CONCAT('NAMED REPLICA_', qrs.replica_group_id) END AS replica_type,
              qsq.query_hash,
              qsp.query_plan_hash,
              SUM(qrs.count_executions) AS sum_executions,
              SUM(qrs.count_executions * qrs.avg_logical_io_reads) AS total_logical_reads,
              SUM(qrs.count_executions * qrs.avg_cpu_time / 1000.0) AS total_cpu_ms,
              AVG(qrs.avg_logical_io_reads) AS avg_logical_io_reads,
              AVG(qrs.avg_cpu_time / 1000.0) AS avg_cpu_ms,
              ROUND(TRY_CAST (SUM(qrs.avg_duration * qrs.count_executions) AS FLOAT) / NULLIF (SUM(qrs.count_executions), 0) * 0.001, 2) AS avg_duration_ms,
              COUNT(DISTINCT qsp.plan_id) AS number_of_distinct_plans,
              qsqt.query_sql_text
FROM sys.query_store_runtime_stats_interval AS qsrsi
     INNER JOIN sys.query_store_runtime_stats AS qrs
         ON qrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id
     INNER JOIN sys.query_store_plan AS qsp
         ON qsp.plan_id = qrs.plan_id
     INNER JOIN sys.query_store_query AS qsq
         ON qsq.query_id = qsp.query_id
     INNER JOIN sys.query_store_query_text AS qsqt
         ON qsq.query_text_id = qsqt.query_text_id
WHERE qsrsi.start_time >= DATEADD(HOUR, -@hours, GETUTCDATE())
GROUP BY qsq.query_id, qsq.query_hash, qsp.query_plan_hash, qsp.plan_id, qrs.replica_group_id, qsqt.query_sql_text
ORDER BY SUM(qrs.count_executions * qrs.avg_cpu_time / 1000.0) DESC, AVG(qrs.avg_cpu_time / 1000.0) DESC;

A SQL Server Management Studio (SSMS) 21 és újabb verzióiban található Query Store jelentések Replica legördülő listát biztosítanak, amely lehetővé teszi Query Store adatok megtekintését különböző replikakészletek/szerepkörök között. Emellett a Object Explorer nézeten belül a Query Store csomópont a Query Store aktuális állapotát tükrözi (azaz READ_CAPTURE), ha olvasható másodlagos replikához csatlakozik.

Query Store olvasható másodlagos replikák telemetria az Azure SQL Database-ben

Vonatkozik: Azure SQL Database

A Query Store runtime-statisztikák Azure diagnosztikai beállításokon keresztül történő streamelésekor a rendszer két oszlopot tartalmaz a telemetriai adatok replikaforrásának azonosításához:

  • is_primary_b: Logikai érték, amely azt jelzi, hogy az adatok az elsődleges replikából (igaz) vagy másodlagos replikából származnak-e (hamis)
  • replica_group_id: A replikaszerepkörnek megfelelő egész szám

Ezek az oszlopok nélkülözhetetlenek a metrikák és a teljesítményadatok egyértelműsítéséhez a replikakészletek számítási feladatainak elemzésekor. Ha diagnosztikai beállításokat konfigurál arra, hogy a Query Store futtatókörnyezeti statisztikákat streameljen a Log Analytics-be, Event Hubs-ba vagy Azure Storage-ba, ügyeljen arra, hogy a lekérdezések és irányítópultok megfelelően szegmentálják az adatokat a replika szerep alapján. A diagnosztikai beállítások és az elérhető metrikák konfigurálásáról további információt a Diagnostic settings in Azure Monitor című témakörben talál.

Fontos

A Query Performance Insight for Azure SQL Database (QPI)does not jelenleg támogatja a replica_group_id koncepciót. Az irányítópulton megjelenő adatok összesítik az összes futtatókörnyezeti és várakozási statisztikai adatot az összes replikából.

A Query Store teljesítményével kapcsolatos szempontok olvasható másodlagos replikák esetén

A másodlagos replikák által a lekérdezési adatok elsődleges replikába való visszaküldésére használt csatorna ugyanaz a csatorna, amellyel a másodlagos replikák naprakészen tarthatók. Mit jelent channel itt?

Egy rendelkezésre állási csoport (HADR) konfigurációjában a replikák egy dedikált átviteli réteg használatával szinkronizálódnak egymással, amely naplóblokkokat, nyugtázásokat és állapotüzeneteket hordoz az elsődleges és a másodlagos replikák között. Ez biztosítja az adatok konzisztenciáját és a feladatátvétel készültségét.

Ha az olvasható másodlagos replikákhoz engedélyezett a Query Store, nem hoz létre külön hálózati végpontot. Ehelyett egy új logikai kommunikációs útvonalat hoz létre a meglévő átviteli rétegen:

  • A Azure SQL Database (nem rugalmas skálázás), Azure SQL Managed Instance és SQL Server esetén ez a magas rendelkezésre állású és vészhelyreállítási (HADR) Always On átviteli réteget használja.

  • A Hyperscale Azure SQL Database egy másik, "Remote Blob I/O átviteli réteg" nevű átviteli réteget használ. A távoli Blob I/O átviteli réteg a számítási csomópontok és a naplószolgáltatás/lapkiszolgálók közötti kommunikációs csatorna. A Távoli Blob I/O átviteli réteg megbízható, titkosított csatornát biztosít a naplórekordok és adatlapok áthelyezéséhez.

Ugyanazon titkosított munkamenet használatával ez az útvonal multiplexer a Query Store végrehajtási adatait (lekérdezési szöveg, tervek, futásidei/várakozási statisztikák) a normál naplórekord-forgalom mellett. A funkció saját rögzítési és fogadási üzenetsorokkal rendelkezik, amelyek bármely replika szemszögéből megtekinthetők a nézet lekérdezésével sys.database_query_store_internal_state:

SELECT pending_message_count,
       messaging_memory_used_mb
FROM sys.database_query_store_internal_state;

A másodlagos replikákból származó adatok ugyanazon Query Store táblákban maradnak meg az elsődlegesen, ami növelheti a tárolási követelményeket. Nagy terhelés esetén előfordulhat, hogy késést vagy visszanyomást észlel a szállítási csatornán. Ugyanazok az alkalmi lekérdezésrögzítési korlátozások, amelyek az elsődleges Query Store vonatkoznak, a másodlagos replikákra is érvényesek. A Query Store méret- és rögzítési szabályzatok kezelésével kapcsolatos további információkért és útmutatásért lásd: A Query Store.

Negatív lekérdezésazonosító/tervazonosító láthatósága

A negatív azonosítók ideiglenes memóriabeli helyőrzőket jeleznek a másodlagos replikák lekérdezéseihez/terveihez, mielőtt megőriznék az elsődleges példányt.

Mielőtt a Query Store adatok rögzítésre kerülnek az olvasható másodlagos replikákból az elsődlegeshez, a lekérdezésekhez és tervekhez ideiglenes azonosítók rendelődhetnek a Query Store helyi memóriabeli ábrázolásában – a MEMORYCLERK_QUERYDISKSTORE_HASHMAP-ban. A lekérdezés- és tervazonosítók negatív számként jelenhetnek meg, helyőrzőként működve, amíg az elsődleges replika mérvadó azonosítót nem rendel hozzájuk, amely akkor történik meg, miután a Query Store megállapítja, hogy a lekérdezés megfelel a konfigurált rögzítési mód követelményeinek. Ha egyéni rögzítési szabályzat van érvényben, a rendszerkatalógus nézet lekérdezésével áttekintheti azokat a sys.database_query_store_options követelményeket, amelyeknek teljesülniük kell.

SELECT query_capture_mode_desc,
       capture_policy_execution_count,
       capture_policy_total_compile_cpu_time_ms,
       capture_policy_total_execution_cpu_time_ms
FROM sys.database_query_store_options;

Miután egy lekérdezést rögzítettként kijelöltek, a futásidejű/várakozási statisztikák és a terv megőrzésre kerülhetnek, és a helyi ideiglenes azonosítókat pozitív azonosítók váltják fel. Ez lehetővé teszi a terv-kényszerítési vagy -javaslatkészítési képességek használatát is.