Query Store pro čitelné sekundární repliky (Preview)

Applies to: SQL Server 2022 (16.x) a novější verze Azure SQL DatabaseAzure SQL Managed Instance

Query Store pro sekundární repliky určené ke čtení umožňuje přehledy Query Store pro úlohy spuštěné na těchto replikách. Pokud je tato možnost povolená, sekundární repliky streamují informace o provádění dotazů (například statistiky modulu runtime a čekání) na primární repliku, kde se data uchovávají v Query Store a zobrazují se napříč všemi replikami.

Poznámka:

Úložiště dotazů pro čitelné sekundární repliky je aktuálně ve verzi Preview ve všech platformách SQL Database Engine.

Availability

Query Store pro čitelné sekundární repliky je dostupný od SQL Serveru 2025 (17.x), stejně jako Azure SQL Database a Azure SQL Managed Instance s aktualizační politikou Vždy aktuální. Pro SQL Server 2022 (16.x) Query Store pro čitelné sekundární repliky vyžaduje povolení příznaku trasování 12606 pro použití této funkce.

Následující tabulka shrnuje dostupnost a povolený stav Query Store pro sekundární repliky s možností čtení.

Platforma K dispozici Ve výchozím nastavení povoleno
Azure SQL Database Ano1 Ano (vždy povoleno)
Databáze SQL v Microsoft Fabric Ano Ano (vždy povoleno)
Azure SQL Managed InstanceAUTD Ano Ano (vždy povoleno)
Azure SQL Managed Instance2025 Ne Ne
Azure SQL Managed Instance2022 Ne Ne
SQL Server 2025 (17.x) Ano Ne (lze povolit pro každou databázi)
SQL Server 2022 (16.x) Bez2 Ne

1 Úložiště dotazů pro čitelné repliky není v současné době k dispozici ve vrstvě služby Hyperscale v Azure SQL Database.
2 Úložiště dotazů pro čtení sekundárních souborů zůstává ve verzi Limited Preview pro SQL Server 2022 (16.x), a proto není podporováno v produkčním prostředí a je ve výchozím nastavení zakázané. Pokud chcete povolit Query Store pouze pro čitelné sekundární repliky v SQL Server 2022 (16.x), je nutné povolit příznak trasování 12606 na primární repliku i na všechny čitelné sekundární repliky. Příznak trasování 12606 není určený pro produkční nasazení založená na SQL Server 2022 (16.x). Další informace najdete v poznámkách k verzi SQL Server 2022.

Podporované scénáře vysoké dostupnosti

  • Před použitím Query Store pro čitelné sekundární repliky v instanci SQL Server 2025 (17.x) je potřeba nakonfigurovat Always On availability Group.

  • Pro Azure SQL Database Query Store pro čitelné sekundární repliky podporuje následující úrovně služby:

    • Pro obecné účely s aktivní geografickou replikací nebo konfigurací skupiny převzetí služeb při selhání (bez předdefinovaných replik s vysokou dostupností, vyžaduje geografickou replikaci nebo konfiguraci skupiny převzetí služeb při selhání pro sekundární podporu).
    • Premium (včetně integrovaných replik s vysokou dostupností; aktivní geografická replikace nebo skupiny převzetí služeb při selhání se také podporují)
    • Kritické pro podnikání (zahrnuje integrované repliky s vysokou dostupností; podporuje i aktivní geografickou replikaci a skupiny převzetí služeb při selhání)
  • Pro Azure SQL Managed Instance se zásadou Always-up-to-date Query Store pro čitelné sekundární repliky podporuje následující úrovně služby:

    • Pro obecné účely se skupinou převzetí služeb při selhání (žádné předdefinované repliky s vysokou dostupností; vyžaduje konfiguraci skupiny převzetí služeb při selhání pro sekundární podporu)
    • Klíčové pro podnikání (včetně integrovaných replik s vysokou dostupností)

Povolit funkci Query Store pro čitelnou sekundární repliku

Pokud Query Store ještě není povolený a není v režimu READ_WRITE na primární replice, musíte ho před pokračováním povolit. Pro každou požadovanou databázi na primární replice spusťte následující skript:

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

Pokud chcete povolit Query Store pro všechny čitelné sekundární repliky, připojte se k primární replice a spusťte následující skript pro každou databázi, která má být zařazena do seznamu pro použití této funkce.

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

Poznámka:

Před SQL Server Management Studio (SSMS) verze 21 je syntaxe FOR SECONDARY platná, ale intelliSense ji nerozpozná. V SQL Serveru 2022 nerozpoznává SSMS IntelliSense syntaxi FOR SECONDARY jako platnou, ale je platná.

Povolení automatické opravy plánu pro sekundární repliky

Applies to: SQL Server 2022 (16.x) a novější verze Azure SQL Database.

Po povolení Query Store pro sekundární repliky můžete volitelně aktivovat automatické ladění, aby funkce automatické korekce plánu mohla vynucovat plány na sekundárních replikách. To umožňuje optimalizátoru dotazů automaticky identifikovat a opravit problémy s výkonem dotazů způsobenými regresí plánu spouštění na sekundárních replikách.

Pokud chcete povolit automatickou opravu plánu pro sekundární repliky, připojte se k primární replice a pro každou požadovanou databázi spusťte následující skript:

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

Zakázat Query Store pro sekundární repliky

Pokud chcete zakázat funkci Query Store pro sekundární repliky na všech sekundárních replikách, připojte se k databázi master v replice primary a spusťte pro každou požadovanou databázi následující skript:

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

Ověřte, zda je Query Store zapnutý na sekundárních replikách

Můžete ověřit, jestli je na replikě secondary povolená Query Store, a to připojením k databázi na sekundární replice a spuštěním následujícího příkazu T-SQL:

SELECT desired_state_desc,
       actual_state_desc,
       readonly_reason
FROM sys.database_query_store_options;

Výsledky dotazu na zobrazení katalogu sys.database_query_store_options by měly znamenat, že skutečný stav Query Store je READ_CAPTURE_SECONDARY s readonly_reason8.

desired_state_desc actual_state_desc readonly_reason
READ_CAPTURE_SECONDARY READ_CAPTURE_SECONDARY 8

Poznámky

Terminologie

Sada replik je definována jako replika pro čtení a zápis databáze (primární) a jedna nebo více replik jen pro čtení (sekundární) považována za logickou jednotku. Role v tomto kontextu odkazuje na roli konkrétní repliky. Když replika obsluhuje primární roli, je to replika pro čtení a zápis, která může provádět úpravy dat i aktivitu čtení. Pokud je replika nakonfigurovaná tak, aby prováděla pouze aktivitu pro čtení, slouží v sekundární roli (sekundární, geografická sekundární, geografická sekundární, ha geografická sekundární). Role se můžou změnit prostřednictvím plánovaných nebo neplánovaných událostí převzetí při selhání; když k tomu dojde, primární se může stát sekundární nebo naopak.

Aktuálně podporované role jsou:

  • Primary
  • Secondary
  • Sekundární geografická oblast
  • Sekundární instance geografické vysoké dostupnosti
  • Pojmenovaná replika

Jak to funguje

Data uložená v dotazech je možné analyzovat jako úlohy na základě role. Query Store pro čitelnou sekundární repliku vám umožňuje monitorovat výkon jakékoli unikátní úlohy pouze pro čtení, které se mohou spouštět na sekundárních replikách. Data se agregují na úrovni role. Například konfigurace SQL Serveru pro distribuované skupiny dostupnosti může obsahovat:

  • Jedna primární replika, součást skupiny dostupnosti 1 (AG1)

  • Dvě místní sekundární repliky, které jsou také součástí AG1.

  • Jedna vzdálená primární replika v jiném umístění, která je součástí samostatné skupiny dostupnosti (AG2). V SQL Server termínech by se také běžně označovala jako globální předávací služba, ale Query Store pro čitelné sekundární repliky ji rozpozná a bude odkazovat na ni jako Geo secondary replika za předpokladu, že se jedná o geograficky distribuovanou sekundární repliku.

Pokud jsou skupiny dostupnosti AG1 a AG2 nakonfigurované tak, aby umožňovaly připojení jen pro čtení, když se úloha jen pro čtení spustí pro sekundární repliky skupiny dostupnosti 1, odešlou se statistiky provádění Query Store primární replice skupiny dostupnosti AG1 a agregují a uchovávají jako data generovaná z role secondary předtím, než se tato data odešlou zpět do všech sekundárních replik včetně globálního předávače v ag2. Když se na primární server AG2 spustí samostatná pracovní zátěž, data globálního forwarderu se odešlou zpět do primární repliky AG1 a uloží se jako data generovaná z Geo secondary role.

Z hlediska pozorovatelnosti je zobrazení katalogu systému sys.query_store_runtime_stats rozšířené, aby pomohlo identifikovat roli, ze které pocházejí statistiky provádění. Mezi tímto zobrazením a zobrazením katalogu systému sys.query_store_replicas existuje vztah, který může poskytnout popisnější název role. V SQL Server je sloupec replica_nameNULL. Sloupec se ale naplní pro úroveň služby Hyperscale, pokud je přítomna pojmenovaná replika replica_name a ta je využívána pro úlohy jen pro čtení.

Příklad dotazu T-SQL, který by se dal použít k zajištění celkové analýzy prvních 50 dotazů za posledních 8 hodin, které spotřebovávaly prostředky procesoru ze všech replik, by byly:

-- 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;

Sestavy Query Store ve SQL Server Management Studio (SSMS) 21 a novějších verzích obsahují rozevírací seznam Replica, který umožňuje způsob zobrazení dat Query Store napříč různými sadami a rolemi replik. Také v zobrazení Object explorer uzel Query Store zobrazuje aktuální stav Query Store (tj. READ_CAPTURE), pokud je připojen k sekundární replice při čtení.

Query Store pro čitelné sekundární repliky telemetrie v Azure SQL Database

platí pro: Azure SQL Database

Při streamování statistik za běhu Query Store prostřednictvím nastavení diagnostiky Azure jsou zahrnuty dva sloupce, které pomůžou identifikovat zdroj repliky telemetrických dat:

  • is_primary_b: Logická hodnota označující, jestli data pocházejí z primární repliky (true) nebo sekundární repliky (false).
  • replica_group_id: Celé číslo odpovídající roli repliky

Tyto sloupce jsou nezbytné pro nejednoznačnost metrik a dat o výkonu při analýze úloh napříč sadami replik. Při konfiguraci nastavení diagnostiky pro streamování statistik běhového prostředí Query Store do Log Analytics, Event Hubs nebo Azure Storage zajistěte, aby vaše dotazy a řídicí panely braly v úvahu tyto sloupce pro správnou segmentaci dat podle role repliky. Další informace o konfiguraci nastavení diagnostiky a dostupných metrik najdete v tématu Nastavení diagnostiky v Azure Monitor.

Důležité

Nástroj Query Performance Insight pro Azure SQL Database (QPI)does not aktuálně podporuje koncept replica_group_id. Data zobrazena na panelu budou agregovat veškeré statistiky modulu runtime a čekací statistiky ze všech replik.

Důležité informace o výkonu pro Query Store pro čitelné sekundární repliky

Kanál používaný sekundárními replikami k odesílání informací o dotazu zpět do primární repliky je stejný kanál, který slouží k udržování sekundárních replik v aktualizovaném stavu. channel Co tady znamená?

V konfiguraci skupiny dostupnosti (HADR) se repliky vzájemně synchronizují pomocí vyhrazené přenosové vrstvy, která přenáší bloky protokolu, potvrzení a stavové zprávy mezi primárními a sekundárními replikami. To zajišťuje konzistenci dat a připravenost na katastrofální selhání.

Pokud je povolená Query Store pro čitelné sekundární repliky, nevytvoří samostatný koncový bod sítě. Místo toho vytvoří novou logickou komunikační cestu nad existující přenosovou vrstvou:

  • Pro Azure SQL Database (bez hyperškálování) Azure SQL Managed Instance a SQL Server se používá vrstva přenosu AlwaysOn s vysokou dostupností a zotavením po havárii (HADR).

  • Pro Azure SQL Database Hyperscale se používá jiná transportní vrstva označovaná jako vzdálená V/V vrstva přenosu objektů blob. Přenosová vrstva vzdáleného Blob I/O je komunikačním kanálem mezi výpočetními uzly a protokolovými službami/stránkovacími servery. Vzdálená transportní vrstva Blob I/O poskytuje spolehlivý a šifrovaný kanál pro přesun logových záznamů a datových stránek.

Tato cesta multiplexuje spouštěcí data Query Store (text dotazu, plány, statistiky za běhu/čekací) společně s normálním provozem záznamů protokolu pomocí stejné šifrované relace. Tato funkce má vlastní fronty pro zachytávání a příjem, které lze zobrazit dotazováním zobrazení sys.database_query_store_internal_state z perspektivy libovolné repliky.

SELECT pending_message_count,
       messaging_memory_used_mb
FROM sys.database_query_store_internal_state;

Data ze sekundárních replik se uchovávají ve stejných Query Store tabulkách na primárním serveru, což může zvýšit požadavky na úložiště. V případě velkého zatížení můžete sledovat latenci nebo zpětný tlak v přenosovém kanálu. Stejná omezení zachycení ad hoc dotazů, která platí pro Query Store na primárním serveru, platí také pro sekundární repliky. Další informace a pokyny ke správě zásad velikosti a zachycení Query Store najdete v tématu Používejte nejdůležitější data v Query Store.

Záporná viditelnost ID dotazu nebo ID plánu

Záporná ID označují dočasné zástupné symboly v paměti pro dotazy a plány v sekundárních replikách před uložením na primární repliku.

Než jsou data Query Store uložena na primárním uzlu z čitelných sekundárních replik, můžou být dotazům a plánům přiřazeny dočasné identifikátory v rámci místní reprezentace Query Store v paměti, MEMORYCLERK_QUERYDISKSTORE_HASHMAP. ID dotazu a plánu se můžou zobrazovat jako záporná čísla a jsou zástupné symboly, dokud primární replika nepřiřadí autoritativní identifikátor, ke kterému dojde poté, co Query Store určí, že dotaz splňuje nakonfigurované požadavky na režim . Pokud je zavedena vlastní zásada zachycení, můžete zkontrolovat požadavky, které je třeba splnit dotazováním na systémový katalogový pohled pomocí dotazu sys.database_query_store_options.

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;

Jakmile je dotaz označen jako zachycen nebo zaznamenán, lze uchovat statistiky provádění/čekání a plán, a místní dočasná ID se nahradí kladnými ID. To vám také umožňuje použití možností vynucování plánu nebo hintování.