Sdílet prostřednictvím


sys.dm_db_index_operational_stats (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Vrátí aktuální vstupně-výstupní operace nižší úrovně, zamykání, západku a aktivitu metody přístupu pro každý oddíl tabulky nebo indexu v databázi.

Indexy optimalizované pro paměť se v tomto zobrazení dynamické správy nezobrazují.

Poznámka

sys.dm_db_index_operational_stats nevrací informace o indexech optimalizovaných pro paměť. Informace o použití indexu optimalizovaného pro paměť naleznete v tématu sys.dm_db_xtp_index_stats (Transact-SQL).

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 | NULL | 0 | VÝCHOZÍ

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

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

Lze zadat předdefinovanou funkci DB_ID.

object_id | NULL | 0 | VÝCHOZÍ

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

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

Zadejte hodnotu NULL pro vrácení informací uložených v mezipaměti pro všechny tabulky a zobrazení v zadané databázi. Pokud pro object_idzadáte hodnotu NULL, musíte také zadat hodnotu NULL pro index_id a partition_number.

index_id | 0 | NULL | -1 | VÝCHOZÍ

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

Pokud chcete vrátit informace uložené v mezipaměti pro všechny indexy základní tabulky nebo zobrazení, zadejte hodnotu NULL. Pokud pro index_idzadáte hodnotu NULL, musíte také zadat hodnotu NULL pro partition_number.

partition_number | NULL | 0 | VÝCHOZÍ

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

Zadejte hodnotu NULL pro vrácení informací uložených v mezipaměti 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 Popis
database_id malé 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í.
index_id int ID indexu nebo haldy.

0 = halda
partition_number int Číslo oddílu založené na 1 v indexu nebo haldě.
hobt_id bigint platí pro: SQL Server 2016 (13.x) a novější verze, Azure SQL Database.

ID haldy dat nebo sady řádků stromu B, která sleduje interní data pro index columnstore.

NULL – nejedná se o interní sadu řádků columnstore.

Další podrobnosti najdete v tématu sys.internal_partitions (Transact-SQL)
leaf_insert_count bigint Kumulativní počet vložení na úrovni listu
leaf_delete_count bigint Kumulativní počet odstranění na úrovni listu leaf_delete_count se zvýší pouze u odstraněných záznamů, které nejsou označené 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četaktualizacích
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é se okamžitě odstraní, aniž by byly označeny jako duchové. Tyto řádky se odeberou vláknem čištění v nastavených intervalech. Tato hodnota nezahrnuje řádky, které jsou zachovány, protože nevyřízených transakcí izolace snímků.
nonleaf_insert_count bigint Kumulativní počet vložení nad úrovní listu.

0 = halda nebo columnstore
nonleaf_delete_count bigint Kumulativní počet odstranění nad úrovní listu.

0 = halda nebo columnstore
nonleaf_update_count bigint Kumulativní počet aktualizací nad úrovní listu.

0 = halda nebo 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

0 = halda nebo columnstore
leaf_page_merge_count bigint Kumulativní počet sloučení stránek na úrovni listu Vždy 0 pro index columnstore.
nonleaf_page_merge_count bigint Kumulativní počet sloučení stránek nad úrovní listu

0 = halda nebo 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í

0 = Indexy
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 textové, ntext, obrázek, varchar(max), nvarchar(max), varbinary(max)a xml. Další informace naleznete v tématu datové typy (Transact-SQL).
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

0 = neclusterovaný index
lob_orphan_insert_count bigint Kumulativní počet osamocených hodnot LOB vložených během hromadných operací.

0 = neclusterovaný index
row_overflow_fetch_in_pages bigint Kumulativní počet ROW_OVERFLOW_DATA datových

Tyto stránky obsahují data uložená ve sloupcích typu varchar(n), nvarchar(n), varbinary(n)a sql_variant, které byly vloženy mimo řádek.
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 příležitost vyžádat si jednu nebo více hodnot mimo řádek z LOB_DATA nebo ROW_OVERFLOW_DATA alokačních jednotek 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 čekání databázového stroje z důvodu kolize západek.
page_latch_wait_in_ms bigint Kumulativní počet milisekund, počkal databázový stroj kvůli kolizí západky.
page_io_latch_wait_count bigint Kumulativní počet, kolikrát databázový stroj čekal na západku vstupně-výstupní 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 nejvyšší úrovně. Vždy 0 pro haldu nebo index columnstore.
tree_page_latch_wait_in_ms bigint Podmnožina page_latch_wait_in_ms, která zahrnuje pouze stránky B-stromové struktury nejvyšší ú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 nejvyšší ú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 nejvyšší úrovně. Vždy 0 pro haldu nebo index columnstore.
page_compression_attempt_count bigint Počet stránek, které byly vyhodnoceny pro kompresi na úrovni STRÁNKY pro konkrétní oddíly tabulky, indexu nebo indexovaného zobrazení Obsahuje stránky, které nebyly komprimovány, protože nelze dosáhnout významných úspor. Vždy 0 pro index columnstore.
page_compression_success_count bigint Počet datových stránek komprimovaných pomocí komprese PAGE pro konkrétní oddíly tabulky, indexu nebo indexovaného zobrazení Vždy 0 pro index columnstore.

Poznámka

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

Tento objekt dynamické správy nepřijímá korelované parametry z CROSS APPLY a OUTER APPLY.

Pomocí sys.dm_db_index_operational_stats můžete sledovat dobu, po kterou musí uživatelé čekat na čtení nebo zápis do tabulky, indexu nebo oddílu, a identifikovat tabulky nebo indexy, u kterých dochází k významné vstupně-výstupní aktivitě nebo horkým místům.

Pomocí následujících sloupců identifikujte oblasti kolizí.

K analýze běžného vzoru přístupu k oddílu tabulky nebo indexupoužijte tyto sloupce:

  • leaf_insert_count

  • leaf_delete_count

  • leaf_update_count

  • leaf_ghost_count

  • range_scan_count

  • singleton_lookup_count

K identifikaci kolizí západek a uzamčení použijte tyto sloupce:

  • page_latch_wait_count a page_latch_wait_in_ms

    Tyto sloupce označují, jestli se kolize západek na indexu nebo haldě a význam kolizí.

  • row_lock_count a page_lock_count

    Tyto sloupce označují, kolikrát se databázový stroj pokusil získat zámky řádků a stránek.

  • row_lock_wait_in_ms a page_lock_wait_in_ms

    Tyto sloupce označují, jestli je v indexu nebo haldě kolize zámků, a význam kolizí.

Analýza statistik fyzických vstupně-výstupních operací v oddílu indexu nebo haldy

  • page_io_latch_wait_count a page_io_latch_wait_in_ms

    Tyto sloupce označují, jestli byly vydány fyzické vstupně-výstupní operace, aby se stránky indexu nebo haldy dostaly do paměti a kolik vstupně-výstupních operací bylo vydáno.

Poznámky ke sloupcům

Hodnoty v lob_orphan_create_count a lob_orphan_insert_count by měly být vždy stejné.

Hodnota ve sloupcích lob_fetch_in_pages a lob_fetch_in_bytes může být větší než nula pro neclusterované indexy, které obsahují jeden nebo více obchodních sloupců jako zahrnuté sloupce. Další informace najdete v tématu Vytvoření indexů se zahrnutými sloupci. Podobně může být hodnota ve sloupcích row_overflow_fetch_in_pages a row_overflow_fetch_in_bytes větší než 0 pro neclusterované indexy, pokud index obsahuje sloupce, které lze vložit mimo řádek.

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

Data vrácená sys.dm_db_index_operational_stats existují pouze za předpokladu, že je k dispozici objekt mezipaměti metadat, který představuje haldu nebo index. Tato data nejsou trvalá ani konzistentně konzistentní. To znamená, že tyto čítače nemůžete použít k určení, jestli byl index použit nebo ne, nebo kdy byl index naposledy použit. Informace o tom naleznete v tématu sys.dm_db_index_usage_stats (Transact-SQL).

Hodnoty pro každý sloupec jsou nastaveny na nulu pokaždé, když se metadata haldy nebo indexu přenesou do mezipaměti metadat a statistiky se hromadí, dokud se objekt mezipaměti neodebere z mezipaměti metadat. Aktivní halda nebo index proto pravděpodobně budou mít v mezipaměti vždy svá metadata a kumulativní počty můžou odrážet aktivitu od posledního spuštění instance SQL Serveru. Metadata pro méně aktivní haldu nebo index se při použití přesunou do a z mezipaměti. V důsledku toho může nebo nemusí mít k dispozici hodnoty. Vyřazení indexu způsobí odebrání odpovídajících statistik z paměti a funkce už je neoznamuje. 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. Předání hodnot, které nejsou platné pro tyto funkce, však může způsobit nezamýšlené výsledky. Vždy se ujistěte, že se při použití DB_ID nebo OBJECT_ID vrátí platné ID. Další informace naleznete v části Poznámky v sys.dm_db_index_physical_stats (Transact-SQL).

Dovolení

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

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

  • VIEW DATABASE STATE nebo VIEW DATABASE PERFORMANCE STATE (SQL Server 2022) oprávnění k vrácení informací o všech objektech v zadané databázi pomocí zástupné card objektu @object_id = NULL

  • VIEW SERVER STATE VIEW SERVER PERFORMANCE STATE (SQL Server 2022) oprávnění k vrácení informací o všech databázích pomocí zástupné card databáze @database_id = NULL

Udělení VIEW DATABASE STATE umožňuje vrátit všechny objekty v databázi bez ohledu na všechna oprávnění CONTROL odepřená pro konkrétní objekty.

Odepření VIEW DATABASE STATE zakáže vrácení všech objektů v databázi bez ohledu na veškerá oprávnění CONTROL udělená konkrétním objektům. Pokud je zadaná @database_id=NULL databáze se zástupným znakem, databáze se vynechá.

Další informace naleznete v tématu Zobrazení a funkce dynamické správy (Transact-SQL).

Příklady

A. Vrácení informací pro zadanou tabulku

Následující příklad vrátí informace pro všechny indexy a oddíly tabulky Person.Address v databázi AdventureWorks2022. Provádění tohoto dotazu vyžaduje minimálně oprávnění CONTROL pro Person.Address tabulku.

Důležitý

Pokud k vrácení hodnoty parametru používáte Transact-SQL funkce DB_ID a OBJECT_ID, 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 zadány nesprávně, vrátí obě funkce hodnotu NULL. Funkce sys.dm_db_index_operational_stats interpretuje hodnotu 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 int;    
DECLARE @object_id int;    
SET @db_id = DB_ID(N'AdventureWorks2022');    
SET @object_id = OBJECT_ID(N'AdventureWorks2022.Person.Address');    
IF @db_id IS NULL     
  BEGIN;    
    PRINT N'Invalid database';    
  END;    
ELSE IF @object_id IS NULL    
  BEGIN;    
    PRINT N'Invalid object';    
  END;    
ELSE    
  BEGIN;    
    SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);    
  END;    
GO    

B. 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 SQL Serveru. Provedení tohoto dotazu vyžaduje oprávnění ZOBRAZIT STAV SERVERU.

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

Viz také

zobrazení a funkce dynamické správy (Transact-SQL)
zobrazení a funkce související s dynamickým řízením indexů (Transact-SQL)
Monitorování a ladění výkonu
sys.dm_db_index_physical_stats (Transact-SQL)
sys.dm_db_index_usage_stats (Transact-SQL)
sys.dm_os_latch_stats (Transact-SQL)
sys.dm_db_partition_stats (Transact-SQL)
sys.allocation_units (Transact-SQL)
sys.indexes (Transact-SQL)