Trvalé statistiky pro sekundární repliky, které jsou čitelné

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

U trvalých statistik uchovává primární replika statistické údaje jako trvalé statistiky, které je možné odeslat do všech sekundárních replik. K tomuto procesu dochází automaticky bez nutnosti ručního zásahu. Mechanismus trvalosti statistik používá úložiště dotazů pro infrastrukturu čitelných sekundárních replik.

Úložiště dotazů pro čitelné sekundární repliky je dostupné v SQL Serveru 2025 (17.x) a Azure SQL Database.

Úložiště dotazů pro čitelné sekundární repliky je ve výchozím nastavení zapnuté v SQL Serveru 2025 (17.x) a Azure SQL Database.

Background

Při čtení sekundárních replik lze statistiky také automaticky vytvořit, když je povolená možnost automatického vytváření statistik , ale tyto statistiky jsou dočasné a při restartování instance zmizí. Pokud chybí statistika databáze jen pro čtení nebo snímek jen pro čtení nebo je zastaralá, databázový stroj vytvoří a udržuje dočasné statistiky v tempdb.

Když databázový stroj vytvoří dočasnou statistiku, připojí se název statistiky s příponou _readonly_database_statistic k rozlišení dočasných statistik od trvalých statistik. Přípona _readonly_database_statistic je vyhrazena pro statistiky generované SQL Serverem. Důvodem, proč byl tento přístup proveden, bylo řešit úlohy, které se spouštějí proti čitelným sekundárním replikám, které můžou vyžadovat odlišné statistiky, které na primární replice neexistují.

Dočasné statistiky vytvořené na sekundárních replikách zůstanou viditelné pouze pro repliku, která je vygenerovala. Primární replika nikdy nemá přímý přístup k těmto dočasným statistickým objektům a je si vědoma pouze trvalého objektu statistiky po jeho uložení. Pokud se dočasné statistiky uchovávají na primární replice, budou dostupné všem replikám ve skupině dostupnosti prostřednictvím mechanismu synchronizace.

Podpora zobrazení katalogu

Aby bylo možné podporovat porovnání vytváření nebo aktualizace statistik mezi sekundárním a primárním serverem a pomoci pochopit, kde byly statistiky vytvořeny, byly do sys.stats zobrazení katalogu přidány tři nové sloupce.

Název sloupce Datový typ Description
replica_role_id tinyint 1 = primární, 2 = sekundární, 3 = geografická sekundární, 4 = sekundární geografická vysoká dostupnost
replica_role_desc nvarchar(60) Primární, Sekundární, Geografické sekundární, Geografická sekundární vysoká dostupnost
replica_name sysname Název instance repliky ve skupině dostupnosti NULL pro primární repliku

Tyto sloupce sledují vlastnictví a původ statistik v průběhu životního cyklu perzistence. Když sekundární replika vytvoří dočasnou statistiku a zůstanou na primárním serveru, replica_role_id a replica_name sloupce identifikují původní repliku. Pokud se tyto trvalé statistiky později aktualizují na primární replice, vlastnictví se přenese na primární, což se projeví v těchto sloupcích.

Chování uchovávání statistik

Pokud jsou dočasné statistiky uloženy ze sekundární repliky na primární, dojde k několika důležitým jevům: Dočasné statistiky na sekundární replice nejsou po uložení automaticky odebrány. Dotazy, které původně aktivovaly vytvoření těchto dočasných statistik, je nadále používají, dokud dotaz neprojde rekompilacem nebo se replika restartuje. To znamená, že dočasné i trvalé verze stejné statistiky mohou dočasně existovat.

Optimalizátor při určování, jestli se má použít statistika, nebere v úvahu vlastnictví repliky. Vyhodnocuje všechny dostupné statistiky na základě pokrytí sloupců a odhadů selektivity. Informace o replice se udržují především pro účely sledování a řešení potíží.

K velmi užitečnému scénáři dochází v případě, že se trvalé statistiky vytvořené z dočasných statistik stanou zastaralými. Pokud u primárních ovlivňujících sloupce v těchto statistikách dojde k významným změnám dat, může se trvalé statistiky považovat za zastaralé. Když dotazy na sekundární repliky odkazují na tyto sloupce, sekundární replika aktualizuje statistiky na základě svého zobrazení dat, což odráží změny použité prostřednictvím procesu opětovného přehrání.

Stručně řečeno, trvalost neodebere schopnost sekundární aktualizovat zastaralé statistiky; jednoduše přidá mechanismus pro sdílení statistik napříč replikami.

Observability

Rozšířené události

persisted_stats_operation (Operační kanál) je vyvolán pro enqueued, dequeued, processeda failed události. To může být užitečné k monitorování, pokud statistika zprávy nemůže být zachována na primárním serveru nebo pokud je zájem sledovat zařízení pro zpracování zpráv. Dočasná statistika zůstává na tempdb sekundárních replikách, zatímco proces na pozadí opakuje odesílání zprávy, pokud dojde k potížím s komunikací mezi primárními a sekundárními replikami.

  • 9131: Funkce je zakázaná během spouštění SQL.
  • 9136: Tabulka nebo index se vynechala nebo upravila.
  • 9137: Schéma se změnilo od zahájení transakce s využitím snímku; opakujte pokus znovu.
  • 9139: Statistiky jsou příliš velké, aby se odesílaly na primární server.

Následující dotaz může poskytnout přehled o statistikách v tabulce, včetně statistik trvalých ze sekundárních replik:

SELECT sch.[name] AS SchemaName,
       obj.[name] AS TableName,
       s.[name] AS StatsName,
       CASE
           WHEN s.stats_id >= 2 AND s.auto_created = 1 THEN 'AUTO_STATS'
           WHEN s.stats_id >= 2 AND s.auto_created = 0 THEN 'USER_CREATED_STATS'
           ELSE 'INDEX_STATS'
       END AS type,
       s.is_temporary,
       CASE WHEN s.replica_name IS NULL
                 AND s.replica_role_desc = 'PRIMARY'
                 AND s.stats_id >= 2
                 AND s.auto_created = 1
                 THEN 'PRIMARY'
            ELSE s.replica_name
       END AS replica_name,
       s.replica_role_id,
       s.replica_role_desc
FROM sys.schemas AS sch
     INNER JOIN sys.objects AS obj
         ON sch.schema_id = obj.schema_id
     INNER JOIN sys.stats AS s
         ON obj.object_id = s.object_id
WHERE sch.[name] <> 'sys'
ORDER BY sch.[name], obj.[name], s.stats_id;

Úvahy

Trvalá statistika pro funkci sekundárních replik s možností čtení je ve výchozím nastavení povolená, pokud je povolená možnost automatického vytváření statistik a READABLE_SECONDARY_TEMPORARY_STATS_AUTO_CREATEREADABLE_SECONDARY_TEMPORARY_STATS_AUTO_UPDATE možnosti konfigurace s vymezeným oborem databáze, což je výchozí konfigurace. Neexistuje žádná konfigurace omezená na databázi, kterou by se dala funkce zapnout nebo vypnout.