Sdílet prostřednictvím


Úložiště dotazů pro čitelné sekundární soubory

Platí pro: SQL Server 2025 (17.x) Azure SQL Database

Úložiště dotazů pro čitelné sekundární repliky umožňuje získat přehledy z úložiště dotazů pro úlohy běžící na sekundárních 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 úložišti dotazů a zobrazují se napříč všemi replikami.

Podpora platformy

Úložiště dotazů pro čitelné sekundární funkce je v současné době dostupné a podporované v produkčním prostředí sql Serveru 2025 (17.x) a ve službě Azure SQL Database. Počínaje SQL Serverem 2025 (17.x) a ve službě Azure SQL Database je úložiště dotazů pro čtení ve výchozím nastavení povolené.

V SQL Serveru 2022 (16.x) zůstává úložiště dotazů pro čitelné sekundární soubory ve verzi Preview, a proto není podporováno v produkčním prostředí a je ve výchozím nastavení zakázané. Pokud chcete povolit Úložiště dotazů pro čitelné sekundární repliky v SQL Serveru 2022 (16.x), je nutné zapnout příznak trasování 12606 na primární i na všech čitelných sekundárních replikách. Příznak trasování 12606 není určený pro produkční nasazení, která jsou založená na SQL Serveru 2022 (16.x). Další informace najdete v poznámkách k verzi SQL Serveru 2022. Pro SQL Server 2025 (17.x) je úložiště dotazů pro čitelné sekundární repliky ve výchozím nastavení zapnuté.

Azure SQL Database, všechny databáze se automaticky zaregistrují a povolí podporu úložiště dotazů pro čitelné sekundární funkce na podporovaných úrovních služeb a ve scénářích s vysokou dostupností. V současné době tato funkce není ve službě Azure SQL Database Hyperscale podporovaná.

Tato funkce se v současné době nepodporuje ve službě Azure SQL Managed Instance ani v databázi SQL v Microsoft Fabric.

Podporované scénáře vysoké dostupnosti

  • Před použitím úložiště dotazů pro čtení sekundárních souborů v instanci SQL Serveru 2025 (17.x) musí být nakonfigurovaná skupina dostupnosti AlwaysOn .

  • Ve službě Azure SQL Database, Úložiště dotazů pro čitelné sekundární databáze podporuje následující úrovně služby:

    • Obecné účely s aktivní geografickou replikací (žádné integrované repliky s vysokou dostupností; vyžaduje konfiguraci geografické replikace pro sekundární podporu)
    • Premium (zahrnuje integrované repliky s vysokou dostupností, podporuje se také aktivní geografická replikace).
    • Důležité obchodní informace (včetně integrovaných replik s vysokou dostupností, aktivní geografická replikace se také podporuje)

Povolení úložiště dotazů pro čitelné sekundární soubory

Pokud úložiště dotazů není na primární replice již aktivované a v READ_WRITE režimu, je nutné ho povolit před dalším postupem. 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 úložiště dotazů pro všechny čitelné sekundární soubory, 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);

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

Platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database.

Po povolení úložiště dotazů pro sekundární repliky můžete volitelně povolit automatické ladění, aby funkce automatické opravy plánů vynutila 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ázání úložiště dotazů pro sekundární repliky

Pokud chcete zakázat úložiště dotazů pro funkci sekundárních replik na všech sekundárních replikách, připojte se k master databázi na primary replice 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ěřit, že úložiště dotazů je povoleno na sekundárních replikách

Úložiště dotazů můžete ověřit na replice secondary tak, že se připojíte k databázi na sekundární replice a spustíte následující příkaz T-SQL:

SELECT desired_state_desc,
       actual_state_desc,
       readonly_reason
FROM sys.database_query_store_options;

Výsledky dotazování zobrazení katalogu sys.database_query_store_options by měly znamenat, že skutečný stav úložiště dotazů je READ_CAPTURE_SECONDARY s hodnotou 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. Úložiště dotazů pro čitelné sekundární úložiště umožňuje monitorovat výkon jakékoli jedinečné úlohy jen pro čtení, které se můžou spouštět na sekundárních replikách. Data se agregují na úrovni role. Například konfigurace distribuovaných skupin dostupnosti SQL Serveru se může skládat z:

  • 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). Z hlediska SQL Serveru by se také běžně označovala jako globální předávací modul, ale úložiště dotazů pro čitelné sekundární funkce ji rozpozná a bude odkazovat na ni jako Geo secondary repliku za předpokladu, že se jedná o geograficky distribuovanou sekundární repliku.

Pokud jsou skupiny dostupnosti AG1 a AG2 nakonfigurovány tak, aby umožňovaly připojení pouze pro čtení, když se úloha jen pro čtení spustí na jedné ze sekundárních replik skupiny AG1, statistiky provádění Úložiště dotazů se odešlou do primární repliky skupiny dostupnosti AG1, kde se agregují a uchovávají jako data generovaná z role secondary. Následně jsou tato data odeslána zpět do všech sekundárních replik, včetně globálního předávače ve skupině dostupnosti 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 Serveru 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 úložiště dotazů v sadě SQL Server Management Studio (SSMS) 21 a novějších verzích poskytují rozevírací seznam replik, který poskytuje způsob zobrazení dat úložiště dotazů napříč různými sadami a rolemi replik . Také v zobrazení Průzkumníku objektů uzel Úložiště dotazů odráží aktuální stav Úložiště dotazů (tj. READ_CAPTURE_SECONDARY), pokud je připojen k sekundární replice s možností čtení.

Úložiště dotazů pro čitelné sekundární telemetrie ve službě Azure SQL Database

platí pro: Azure SQL Database

Při streamování statistik modulu runtime úložiště dotazů prostřednictvím nastavení diagnostiky Azure jsou zahrnuty dva sloupce, které vám pomůžou identifikovat zdroj telemetrických dat repliky:

  • 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 modulu úložiště dotazů do Log Analytics, Event Hubs nebo Azure Storage zajistěte, aby vaše dotazy a řídicí panely počítaly s těmito sloupci pro správnou segmentaci dat podle role repliky. Další informace o konfiguraci nastavení diagnostiky a dostupných metrik najdete v tématu Nastavení diagnostiky ve službě Azure Monitor.

Důležité

Přehled výkonu dotazů pro službu Azure SQL Database (QPI)does not v současné době podporuje replica_group_id tento koncept. 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 úložiště dotazů pro čitelné sekundární soubory

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 úložiště dotazů pro čitelné sekundární soubory povolené, nevytváří samostatný koncový bod sítě. Místo toho vytvoří novou logickou komunikační cestu nad existující přenosovou vrstvou:

  • Pro Službu Azure SQL Database (mimo 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 Hyperscale služby Azure SQL Database se používá jiná přenosová vrstva zvaná Remote Blob I/O. 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 data spouštění úložiště dotazů (text dotazu, plány, statistiky runtime/čekání) spolu s normálním přenosem záznamů protokolů 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 z sekundárních úložišť se uchovávají ve stejných tabulkách úložiště dotazů v primárním úložišti, 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í zachytávání dotazů ad hoc, která platí pro úložiště dotazů v primárním úložišti, platí také pro sekundární. Další informace a pokyny ke správě velikosti úložiště dotazů a zásad ukládání najdete v tématu Uchovávání nejrelevantnějších dat v úložišti dotazů.

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

Záporné identifikátory označují dočasné zástupné symboly v paměti pro dotazy nebo plány na sekundárním serveru před jejich trvalým uložením na primárním serveru.

Než se data úložiště dotazů zapíší na primární repliku z čitelných sekundárních replik, mohou být dotazy a plány přiřazeny dočasným identifikátorům v rámci místní paměťové reprezentace úložiště dotazů – MEMORYCLERK_QUERYDISKSTORE_HASHMAP. ID dotazů a plánů se mohou zobrazovat jako záporná čísla a slouží jako zástupné symboly, dokud primární replika nepřiřadí jednoznačný identifikátor, k čemuž dojde poté, co Query Store zjistí, že dotaz splňuje nakonfigurované požadavky na režim zachycení. 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í.