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).
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áziVIEW DATABASE STATE
neboVIEW 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 = NULLVIEW 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_partition_stats (Transact-SQL)
sys.indexes (Transact-SQL)