sys.dm_db_index_operational_stats (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vrátí statistiku přístupu k datům nižší úrovně, zamykání a západky pro každý oddíl tabulky nebo indexu v databázi.

Transact-SQL konvence syntaxe

Syntax

sys.dm_db_index_operational_stats (
    { database_id | NULL | 0 | DEFAULT }
    , { object_id | NULL | 0 | DEFAULT }
    , { index_id | 0 | NULL | -1 | DEFAULT }
    , { partition_number | NULL | 0 | DEFAULT }
)

Argumenty

{ database_id | NULOVÁ | 0 | DEFAULT }

ID databáze. database_id je malý. Platné vstupy jsou ID číslo databáze, NULL, 0, nebo DEFAULT. Výchozí hodnota je 0. NULL, 0a DEFAULT jsou v tomto kontextu ekvivalentní hodnoty.

Zadejte NULL k vrácení informací pro všechny databáze v instanci SQL Serveru. Pokud zadáte NULL pro database_id, musíte také zadat NULL pro object_id, index_ida partition_number.

Lze zadat předdefinovanou funkci DB_ID.

{ object_id | NULA | 0 | DEFAULT }

ID objektu tabulky nebo zobrazení indexu je zapnuté. object_id je .

Platné vstupy jsou ID číslo tabulky a zobrazení, NULL, 0, nebo DEFAULT. Výchozí hodnota je 0. NULL, 0a DEFAULT jsou v tomto kontextu ekvivalentní hodnoty.

Zadejte NULL pro vrácení informací pro všechny tabulky a zobrazení v zadané databázi. Pokud zadáte NULL pro object_id, musíte také zadat NULL pro index_id a partition_number.

{ index_id | 0 | NULOVÁ | -1 | DEFAULT }

ID indexu. index_id je inteligence. Platné vstupy jsou ID číslo indexu, 0 pokud je object_id halda, NULL, -1, nebo DEFAULT. Výchozí hodnota je -1. NULL, -1a DEFAULT jsou v tomto kontextu ekvivalentní hodnoty.

Zadejte NULL k vrácení informací pro všechny indexy základní tabulky nebo zobrazení. Pokud zadáte NULL pro index_id, musíte také zadat NULL pro partition_number.

{ partition_number | NULA | 0 | DEFAULT }

Číslo oddílu v objektu. partition_number je . Platné vstupy jsou partition_number indexu nebo haldy, NULL, 0nebo DEFAULT. Výchozí hodnota je 0. NULL, 0a DEFAULT jsou v tomto kontextu ekvivalentní hodnoty.

Specifikujte NULL tak, aby vracela informace pro všechny oddíly indexu nebo haldy.

partition_number je založená na 1. Nedílný index nebo halda má partition_number nastaven na hodnotu 1.

Vrácená tabulka

Název sloupce Datový typ Description
database_id smallint ID databáze.

Ve službě Azure SQL Database jsou hodnoty jedinečné v rámci jedné databáze nebo elastického fondu, ale ne v rámci logického serveru.
object_id int ID tabulky nebo zobrazení. Pro více informací viz sys.objects.
index_id int ID indexu nebo haldy. Pro více informací viz sys.indexes.
partition_number int Číslo oddílu založené na 1 v indexu nebo haldě. Pro více informací viz sys.partitions.
hobt_id bigint ID haldy dat nebo sady řádků stromu B, která sleduje interní data pro index columnstore.

NULL - Toto není interní řádková sada columnstore.

Další informace najdete v tématu sys.internal_partitions.
leaf_insert_count bigint Kumulativní počet vložení na úrovni listu Další informace o úrovních indexů najdete v průvodci architekturou a návrhem indexu.
leaf_delete_count bigint Kumulativní počet odstranění na úrovni listu leaf_delete_count se zvyšuje pouze u smazaných záznamů, které nejsou označeny jako duchové. U odstraněných záznamů, které jsou nejprve stíněné, leaf_ghost_count se místo toho zvýší.
leaf_update_count bigint Kumulativní počet aktualizací na úrovni listu.
leaf_ghost_count bigint Kumulativní počet řádků na úrovni listu, které jsou označené jako odstraněné, ale ještě neodebrané. Tento počet nezahrnuje záznamy, které jsou okamžitě smazány, aniž by byly označeny jako duchové. Vlákno čištění odebere řádky duchů v nastavených intervalech. Tato hodnota nezahrnuje duchové řádky, které jsou zachovány kvůli nevyřízené transakci snapshotu.
nonleaf_insert_count bigint Kumulativní počet vložení nad úrovní listu. Platí jenom pro indexy B-tree. 0 pro haldy nebo indexy columnstore.
nonleaf_delete_count bigint Kumulativní počet odstranění nad úrovní listu. Platí jenom pro indexy B-tree. 0 pro haldy nebo indexy columnstore.
nonleaf_update_count bigint Kumulativní počet aktualizací nad úrovní listu. Platí jenom pro indexy B-tree. 0 pro haldy nebo indexy columnstore.
leaf_allocation_count bigint Kumulativní počet přidělení stránek na úrovni listu v indexu nebo haldě

Pro index odpovídá přidělení stránky rozdělení stránky.
nonleaf_allocation_count bigint Kumulativní počet přidělení stránek způsobených rozděleními stránek nad úrovní listu Platí jenom pro indexy B-tree. 0 pro haldy nebo indexy columnstore.
leaf_page_merge_count bigint Kumulativní počet sloučení stránek na úrovni listu Vždy 0 pro indexy columnstore.
nonleaf_page_merge_count bigint Kumulativní počet sloučení stránek nad úrovní listu Platí jenom pro indexy B-tree. 0 pro haldy nebo indexy columnstore.
range_scan_count bigint Kumulativní počet kontrol rozsahu a tabulek zahájených v indexu nebo haldě
singleton_lookup_count bigint Kumulativní počet načtení jednoho řádku z indexu nebo haldy
forwarded_fetch_count bigint Počet řádků, které byly načteny přes záznam pro přeposílání Platí pouze pro haldy, 0 pro indexy B-strom.
lob_fetch_in_pages bigint Kumulativní počet velkých objektů (LOB) stránek načtených z LOB_DATA alokační jednotky Tyto stránky obsahují data uložená ve sloupcích typu text, ntext, image, varchar(max),nvarchar(max),varbinary(max),xml a json. Další informace naleznete v tématu Datové typy.
lob_fetch_in_bytes bigint Kumulativní počet načtených bajtů obchodních dat
lob_orphan_create_count bigint Kumulativní počet osamocených hodnot LOB vytvořených pro hromadné operace Platí pouze pro haldy a clusterované indexy B-tree, 0 pro neclusterované indexy a indexy columnstore.
lob_orphan_insert_count bigint Kumulativní počet osamocených hodnot LOB vložených během hromadných operací. Platí pouze pro haldy a clusterované indexy B-tree, 0 pro neclusterované indexy a indexy columnstore.
row_overflow_fetch_in_pages bigint Kumulativní početdatových ROW_OVERFLOW_DATA

Tyto stránky obsahují data uložená ve sloupcích typu varchar(n), nvarchar(n), varbinary(n)a sql_variant pro velké řádky.
row_overflow_fetch_in_bytes bigint Kumulativní počet načtených bajtů dat přetečení řádků
column_value_push_off_row_count bigint Kumulativní počet hodnot sloupců pro obchodní data a data přetečení řádků, která se odsunou mimo řádek, aby se vložený nebo aktualizovaný řádek vešly do stránky.
column_value_pull_in_row_count bigint Kumulativní počet hodnot sloupců pro obchodní data a přetečení řádků, která se načítají v řádku. K tomu dochází, když operace aktualizace uvolní místo v záznamu a poskytuje možnost vyžádat si jednu nebo více hodnot mimo řádek z LOB_DATA jednotky přidělení nebo ROW_OVERFLOW_DATA jednotky přidělení do IN_ROW_DATA alokační jednotky.
row_lock_count bigint Kumulativní počet požadovaných zámků řádků
row_lock_wait_count bigint Kumulativní počet, kolikrát databázový stroj čekal na uzamčení řádku
row_lock_wait_in_ms bigint Celkový počet milisekund, které databázový stroj čekal na uzamčení řádku
page_lock_count bigint Kumulativní počet požadovaných zámků stránky
page_lock_wait_count bigint Kumulativní počet, kolikrát databázový stroj čekal na uzamčení stránky
page_lock_wait_in_ms bigint Celkový počet milisekund, na který databázový stroj čekal na zámek stránky.
index_lock_promotion_attempt_count bigint Kumulativní počet pokusů databázového stroje o eskalaci zámků
index_lock_promotion_count bigint Kumulativní počet eskalovaných zámků databázového stroje
page_latch_wait_count bigint Kumulativní počet, kolikrát databázový stroj čekal na získání západky
page_latch_wait_in_ms bigint Kumulativní počet milisekund databázový stroj čekal na získání západky.
page_io_latch_wait_count bigint Kumulativní počet, kolikrát databázový stroj čekal na vstupně-výstupní západku stránky
page_io_latch_wait_in_ms bigint Kumulativní počet milisekund, na které databázový stroj čekal na vstupně-výstupní západku stránky.
tree_page_latch_wait_count bigint Podmnožina page_latch_wait_count , která obsahuje pouze stránky B-stromové struktury vyšší úrovně. Vždy 0 pro haldu nebo index columnstore.
tree_page_latch_wait_in_ms bigint Podmnožina page_latch_wait_in_ms , která obsahuje pouze stránky B-stromové struktury vyšší úrovně. Vždy 0 pro haldu nebo index columnstore.
tree_page_io_latch_wait_count bigint Podmnožina page_io_latch_wait_count , která obsahuje pouze stránky B-stromové struktury vyšší úrovně. Vždy 0 pro haldu nebo index columnstore.
tree_page_io_latch_wait_in_ms bigint Podmnožina page_io_latch_wait_in_ms , která obsahuje pouze stránky B-stromové struktury vyšší úrovně. Vždy 0 pro haldu nebo index columnstore.
page_compression_attempt_count bigint Počet stránek, které byly vyhodnoceny pro PAGE kompresi úrovní pro konkrétní oddíl tabulky, indexu nebo indexovaného pohledu. Obsahuje stránky, které nebyly komprimovány, protože nebylo možné dosáhnout výrazných úspor. Vždy 0 pro indexy columnstore.
page_compression_success_count bigint Počet datových stránek, které byly komprimovány pomocí PAGE komprese pro konkrétní oddíly tabulky, indexu nebo indexovaného pohledu. Vždy 0 pro indexy columnstore.
version_generated_inrow bigint Kumulativní počet verzí v řádku s datovou částí vygenerovanou v haldě nebo B-tree pro operaci aktualizace, sloučení nebo vložení přes stín. Verze v řádku ukládá starý obrázek řádku (nebo rozdíl) přímo v řádku, aby nedocházelo k cestě do úložiště verzí. Tento počet je nadmnožina, která zahrnuje verze počítané podle insert_over_ghost_version_inrow. Další informace overzích
version_generated_offrow bigint Kumulativní počet verzí odsílaných do úložiště mimo řádky pro haldu, B-strom nebo odstranění obchodního objektu, aktualizaci, sloučení nebo operaci vložení přes stínovou kopii. Verze mimo řádek se vygeneruje, když starý obrázek řádku nelze uchovat v řádku. Tento počet je nadmnožina, která zahrnuje verze počítané podle ghost_version_offrow a insert_over_ghost_version_offrow.
ghost_version_inrow bigint Kumulativní počet časů odstranění nebo aktualizace (provedené jako odstranění následované vložením) označil existující řádek jako duch s informacemi o správě verzí v řádku. Verze v řádku ukládá pouze časové razítko transakce a datovou část nulové délky, takže vrácení odstranění zpět vyžaduje pouze zrušení hostitele řádku.
ghost_version_offrow bigint Kumulativní počet pokusů o odstranění nebo aktualizaci (provedenou jako odstranění následované vložením) vložil existující data sloupců řádků nebo obchodních sloupců do úložiště mimo řádky, takže v řádku pro informace o správě verzí zůstane zástupný procedura. Tento čítač se zvýší společně s version_generated_offrow během operací duchů.
insert_over_ghost_version_inrow bigint Kumulativní počet verzí v řádku s datovou částí vygenerovanou pro operaci vkládání přes stínovou část B-tree. K stínování vložení dojde, když se nový řádek vloží do slotu dříve stínovaného záznamu, a to buď z explicitního odstranění následovaného vložením, nebo z aktualizace nebo sloučení implementované jako odstranění následované vložením. Tento čítač je podmnožinou .version_generated_inrow
insert_over_ghost_version_offrow bigint Kumulativní počet, kolikrát byl existující řádek duchů vložen do úložiště mimo řádky během operace vložení do stromu B,over-ghost, a ponechání zástupných procedur na nově vložený řádek pro informace o správě verzí. Tento čítač je podmnožinou .version_generated_offrow
compaction_attempt_count bigint Kumulativní počet pokusů o automatickou kompakci indexem. Pro více informací viz Automatická indexová komplikace.
compaction_complete_count bigint Souhrnný počet dokončených automatických kompakcí indexu.
compaction_skip_count bigint Kumulativní počet automatických kompakcí přeskočených indexů. Pro více informací o důvodech přeskakování viz Použití rozšířené události ke sledování statistik zhutnění.
compaction_ineligible_count bigint Kumulativní počet pokusů o zhutnění byl přeskočen, protože stránka nebyla způsobilá pro automatickou kompakci.
compaction_failure_count bigint Souhrnný počet neúspěšných pokusů o zhutnění.
compaction_row_move_count bigint Souhrn řádků přesunutých z jedné stránky na druhou v rámci automatické kompaktace.
compaction_page_deallocation_count bigint Souhrnný počet stránek, které byly po přesunu všech řádků na jinou stránku odvolány.

Note

Dokumentace používá termín B-tree obecně v odkazu na indexy. V indexech rowstore databázový stroj implementuje strom B+. To neplatí pro indexy columnstore ani indexy v tabulkách optimalizovaných pro paměť. Další informace najdete v SQL Serveru a architektuře indexu Azure SQL a průvodci návrhem.

Poznámky

Tato funkce nevrací informace o indexech v tabulkách optimalizovaných pro paměť. Pro informace o indexech v tabulkách optimalizovaných pro paměť viz sys.dm_db_xtp_index_stats.

Tato funkce nepřijímá korelované parametry z CROSS APPLY a OUTER APPLY.

Můžete použít sys.dm_db_index_operational_stats ke sledování statistik operací čtení a zápisu dat a uzamčení, západky stránky a západky stránek a vstupně-výstupních operací pro tabulku, index nebo oddíl. Můžete identifikovat tabulky, indexy a oddíly, u kterých dochází k významné aktivitě nebo kolizím.

Statistiky jsou poskytovány na úrovni oddílu a jsou součtené. To znamená, že můžete získat statistiky na úrovni indexu nebo tabulky napsáním agregačního dotazu v jazyce T-SQL. Další informace najdete v příkladu vyhledávání indexů a hledání všech tabulek .

Pokud chcete analyzovat statistiky operací čtení a zápisu pro tabulku, index nebo oddíl, použijte tyto sloupce:

  • leaf_insert_count
  • leaf_delete_count
  • leaf_update_count
  • leaf_ghost_count
  • range_scan_count
  • singleton_lookup_count

K identifikaci kolize západek použijte tyto sloupce:

  • page_latch_wait_count
  • page_latch_wait_in_ms

K identifikaci kolizí zámků použijte tyto sloupce:

  • row_lock_count
  • page_lock_count
  • row_lock_wait_in_ms
  • page_lock_wait_in_ms

Pokud chcete analyzovat fyzické vstupně-výstupní statistiky, použijte tyto sloupce:

  • page_io_latch_wait_count
  • page_io_latch_wait_in_ms

Poznámky ke sloupcům

Hodnoty ve sloupcích lob_fetch_in_pages a lob_fetch_in_bytes mohou být větší než nula pro neclusterované indexy, které obsahují jeden nebo více sloupců LOB jako zahrnuté sloupce. Další informace najdete v tématu Vytváření indexů se zahrnutými sloupci. Podobně hodnoty ve sloupcích row_overflow_fetch_in_pages mohou row_overflow_fetch_in_bytes být větší než 0 pro neclusterované indexy, pokud index obsahuje velké řádky.

Jak se čítače v mezipaměti metadat resetují

Vrácená sys.dm_db_index_operational_stats data existují pouze za předpokladu, že je k dispozici objekt mezipaměti metadat, který představuje haldu nebo strom B. Tato data nejsou trvalá. To znamená, že tyto čítače nelze jednoznačně určit, zda byl index použit, nebo kdy byl naposledy použit. Místo toho použijte sys.dm_db_index_usage_stats.

Hodnoty pro každý číselný sloupec jsou nastaveny na nulu, kdykoli se metadata haldy nebo B-tree přenesou do mezipaměti metadat. Statistiky se shromažďují, dokud se objekt mezipaměti neodebere z mezipaměti metadat. Aktivní halda nebo B-strom obvykle obsahuje metadata v mezipaměti a kumulativní počty odrážejí aktivitu od posledního spuštění instance databázového stroje. Metadata méně aktivní haldy nebo B-stromu se mohou v mezipaměti pohybovat dovnitř a ven z mezipaměti, zejména pokud je instance Database Engine pod tlakem paměti. V důsledku toho se provozní statistika indexu někdy nemusí promítnout do sys.dm_db_index_operational_stats. To není běžné.

Statistiky se z mezipaměti odeberou a tato funkce už je neoznamuje, pokud dojde k vyřazení tabulky nebo indexu nebo zkrácení oddílu. Jiné operace DDL s indexem můžou způsobit resetování hodnoty statistiky na nulu.

Určení hodnot parametrů pomocí systémových funkcí

Pomocí funkcí Transact-SQL DB_ID a OBJECT_ID můžete zadat hodnotu parametrů database_id a object_id. Nicméně předávání hodnot, které nejsou platné, těmto funkcím může způsobit nechtěné výsledky. Vždy se ujistěte, že je vráceno platné ID při použití DB_ID nebo OBJECT_ID. Další informace najdete v tématu Vrácení informací pro zadanou tabulku.

Povolení

Vyžaduje následující oprávnění:

  • CONTROL oprávnění k zadanému objektu v databázi

  • VIEW DATABASE STATE VIEW DATABASE PERFORMANCE STATE nebo povolení vracet informace o všech objektech ve specifikované databázi, pokud není určena hodnota pro @object_id .

  • VIEW SERVER STATE nebo VIEW SERVER PERFORMANCE STATE povolení vracet informace o všech databázích, pokud není určena hodnota pro @database_id .

Udělení nebo VIEW DATABASE STATE povolení VIEW SERVER PERFORMANCE STATE vrácení všech objektů v databázi bez ohledu na všechna CONTROL oprávnění odepřena pro konkrétní objekty.

Odepřít VIEW DATABASE STATE nebo VIEW SERVER PERFORMANCE STATE zakázat vrácení všech objektů v databázi bez ohledu na všechna CONTROL oprávnění udělená konkrétním objektům.

Pro více informací viz pohledy a funkce dynamického řízení systému.

Examples

Vrácení informací pro zadanou tabulku

Následující příklad vrací informace o všech indexech a oddílech tabulky Person.Address v databázi AdventureWorks2025.

Important

Když používáte Transact-SQL funkce DB_ID a OBJECT_ID chcete vrátit hodnotu parametru, vždy se ujistěte, že je vráceno platné ID. Pokud nelze najít název databáze nebo objektu, například pokud neexistují nebo jsou nesprávně napsané, vrátí NULLse obě funkce . Funkce sys.dm_db_index_operational_stats interpretuje NULL jako hodnotu se zástupným znakem, která určuje všechny databáze nebo všechny objekty. Vzhledem k tomu, že to může být neúmyslná operace, příklady v této části ukazují bezpečný způsob, jak určit ID databáze a objektů.

DECLARE @db_id AS INT = DB_ID(N'AdventureWorks2025');
DECLARE @object_id AS INT = OBJECT_ID(N'AdventureWorks2025.Person.Address');

SELECT *
FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL)
WHERE @db_id IS NOT NULL
      AND @object_id IS NOT NULL;

Vrácení informací pro všechny tabulky a indexy

Následující příklad vrátí informace pro všechny tabulky a indexy v instanci databázového stroje.

SELECT *
FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL);

Vyhledávání a vyhledávání indexů pro všechny tabulky

Následující příklad agreguje data na úrovni oddílů, aby vrátila hledání indexu a prohledá statistiky pro všechny tabulky v aktuální databázi.

SELECT OBJECT_SCHEMA_NAME(object_id) AS schema_name,
       OBJECT_NAME(object_id) AS object_name,
       COUNT(DISTINCT(index_id)) AS index_count,
       COUNT(DISTINCT(partition_number)) AS partition_count,
       SUM(range_scan_count) AS index_scan_count,
       SUM(singleton_lookup_count) AS index_seek_count
FROM sys.dm_db_index_operational_stats(DB_ID(), DEFAULT, DEFAULT, DEFAULT)
GROUP BY OBJECT_SCHEMA_NAME(object_id),
         OBJECT_NAME(object_id)
ORDER BY schema_name, object_name;