Megosztás a következőn keresztül:


sys.dm_db_index_operational_stats (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Az aktuális alsó szintű I/O-, zárolási, reteszelési és hozzáférési metódustevékenységet adja vissza az adatbázis egy táblájának vagy indexének minden partíciójára vonatkozóan.

A memóriaoptimalizált indexek nem jelennek meg ebben a DMV-ben.

Jegyzet

sys.dm_db_index_operational_stats nem ad vissza információt a memóriaoptimalizált indexekről. A memóriaoptimalizált indexhasználatról további információt a sys.dm_db_xtp_index_stats (Transact-SQL)című témakörben talál.

Transact-SQL szintaxis konvenciói

Szintaxis

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 }    
)    

Érvek

database_id | NULL | 0 | ALAPÉRTELMEZETT

Az adatbázis azonosítója. database_id . Az érvényes bemenetek az adatbázisok azonosítószáma, NULL, 0 vagy DEFAULT. Az alapértelmezett érték 0. A NULL, a 0 és a DEFAULT egyenértékű értékek ebben a környezetben.

Adja meg a NULL értéket az SQL Server-példányban lévő összes adatbázis adatainak visszaadásához. Ha null értéket ad meg database_id, akkor a null értéket is meg kell adnia object_id, index_idés partition_number.

Megadhatja a beépített DB_ID függvényt.

object_id | NULL | 0 | ALAPÉRTELMEZETT

A tábla objektumazonosítója vagy az index megtekintése be van kapcsolva. object_idint.

Az érvényes bemenetek egy tábla és nézet azonosítószáma, NULL, 0 vagy ALAPÉRTELMEZETT. Az alapértelmezett érték 0. A NULL, a 0 és a DEFAULT egyenértékű értékek ebben a környezetben.

Adja meg a NULL értéket a megadott adatbázis összes táblájának és nézetének gyorsítótárazott adatainak visszaadásához. Ha null értéket ad meg object_id, akkor a NULL értéket is meg kell adnia index_id és partition_number.

index_id | 0 | NULL | -1 | ALAPÉRTELMEZETT

Az index azonosítója. index_idint. Az érvényes bemenetek az index azonosítószáma, 0, ha object_id halom, NULL, -1 vagy ALAPÉRTELMEZETT. Az alapértelmezett érték a -1, a NULL, a -1 és az ALAPÉRTELMEZETT érték.

Adja meg a NULL értéket az alaptábla vagy nézet összes indexének gyorsítótárazott adatainak visszaadásához. Ha null értéket ad meg index_id, akkor a null értéket is meg kell adnia partition_number.

partition_number | NULL | 0 | ALAPÉRTELMEZETT

Partíciószám az objektumban. partition_numberint. Az érvényes bemenetek egy index vagy halom, NULL, 0 vagy DEFAULT partition_number. Az alapértelmezett érték 0. A NULL, a 0 és a DEFAULT egyenértékű értékek ebben a környezetben.

Adja meg a NULL értéket az index vagy halom összes partíciójának gyorsítótárazott adatainak visszaadásához.

partition_number 1-alapú. A nem particionált index vagy halom partition_number értéke 1.

Visszaadott tábla

Oszlop neve Adattípus Leírás
database_id kis Adatbázis-azonosító.

Az Azure SQL Database-ben az értékek egyediek egyetlen adatbázisban vagy rugalmas készletben, de nem logikai kiszolgálón belül.
object_id A tábla vagy nézet azonosítója.
index_id Az index vagy a halom azonosítója.

0 = Halom
partition_number 1-alapú partíciószám az indexben vagy halomban.
hobt_id bigint Az Azure SQL Database SQL Server 2016 (13.x) és újabb verzióira vonatkozik.

Az oszlopcentrikus index belső adatait nyomon író adat halom vagy B-fa sorkészlet azonosítója.

NULL – ez nem egy belső oszlopcentrikus sorkészlet.

További részletekért lásd: sys.internal_partitions (Transact-SQL)
leaf_insert_count bigint Levélszintű beszúrások kumulatív száma.
leaf_delete_count bigint Levélszintű törlések kumulatív száma. leaf_delete_count csak a nem szellemként megjelölt törölt rekordok esetében növekszik. Az elsőként szellemesített törölt rekordok esetében a leaf_ghost_count növekszik.
leaf_update_count bigint Levélszintű frissítések kumulatív száma.
leaf_ghost_count bigint A töröltként megjelölt, de még el nem távolított levélszintű sorok összesített száma. Ez a szám nem tartalmazza azokat a rekordokat, amelyeket a rendszer azonnal töröl anélkül, hogy szellemként jelölik meg őket. Ezeket a sorokat egy tisztítási szál a megadott időközönként eltávolítja. Ez az érték nem tartalmazza azokat a sorokat, amelyeket egy fennálló pillanatkép-elkülönítési tranzakció miatt megtartanak.
nonleaf_insert_count bigint A levélszint feletti beszúrások összesített száma.

0 = Halom vagy oszloptár
nonleaf_delete_count bigint A levélszint feletti törlések halmozott száma.

0 = Halom vagy oszloptár
nonleaf_update_count bigint A levélszint feletti frissítések halmozott száma.

0 = Halom vagy oszloptár
leaf_allocation_count bigint A levélszintű lapfoglalások összesített száma az indexben vagy halomban.

Egy index esetében a lapfoglalás egy oldal felosztásának felel meg.
nonleaf_allocation_count bigint A levélszint feletti oldaleloszlások által okozott oldalfoglalások halmozott száma.

0 = Halom vagy oszloptár
leaf_page_merge_count bigint Az oldalegyesítések összesített száma a levél szintjén. Oszlopcentrikus index esetén mindig 0.
nonleaf_page_merge_count bigint A lapegyesítések összesített száma a levélszint felett.

0 = Halom vagy oszloptár
range_scan_count bigint Az indexen vagy halomon megkezdett tartomány- és táblavizsgálatok összesített száma.
singleton_lookup_count bigint Az indexből vagy halomból származó egysoros lekérések összesített száma.
forwarded_fetch_count bigint A továbbítási rekordon keresztül beolvasott sorok száma.

0 = Indexek
lob_fetch_in_pages bigint A LOB_DATA foglalási egységből lekért nagyméretű objektumlapok (LOB) összesített száma. Ezek a lapok olyan adatokat tartalmaznak, amelyek típusú szöveges, ntext, kép, varchar(max), nvarchar(max), varbinary(max)és xml. További információ: adattípusok (Transact-SQL).
lob_fetch_in_bytes bigint A lekért LOB-adatok összesített száma.
lob_orphan_create_count bigint A tömeges műveletekhez létrehozott árva LOB-értékek halmozott száma.

0 = Nemclustered index
lob_orphan_insert_count bigint A tömeges műveletek során beszúrt árva LOB-értékek halmozott száma.

0 = Nemclustered index
row_overflow_fetch_in_pages bigint A ROW_OVERFLOW_DATA foglalási egységből lekért sortúllépési adatlapok összesített száma.

Ezek a lapok varchar(n), nvarchar(n), varbinary(n)és sql_variant oszlopban tárolt adatokat tartalmaznak.
row_overflow_fetch_in_bytes bigint A lekért sorok túlcsordult adatbájtjainak összesített száma.
column_value_push_off_row_count bigint Az oszlopértékek halmozott száma a LOB-adatokhoz és a sorról leküldéses túlcsordulási adatokhoz, hogy egy beszúrt vagy frissített sor elférjen egy oldalon belül.
column_value_pull_in_row_count bigint A sorba behúzott LOB-adatok és sorátfolyási adatok oszlopértékeinek halmozott száma. Ez akkor fordul elő, ha egy frissítési művelet helyet szabadít fel egy rekordban, és lehetővé teszi egy vagy több soron kívüli érték lekérését a LOB_DATA vagy ROW_OVERFLOW_DATA foglalási egységekből a IN_ROW_DATA foglalási egységbe.
row_lock_count bigint A kért sorzárolások összesített száma.
row_lock_wait_count bigint Halmozott hányszor várt az adatbázismotor egy sorzárolásra.
row_lock_wait_in_ms bigint Az adatbázismotor által várt sorzárolások teljes száma ezredmásodpercben.
page_lock_count bigint A kért oldalzárolások összesített száma.
page_lock_wait_count bigint Kumulatív hányszor várt az adatbázismotor az oldalzárolásra.
page_lock_wait_in_ms bigint Az adatbázismotor által az oldalzárolásra várt ezredmásodpercek teljes száma.
index_lock_promotion_attempt_count bigint Kumulatív hányszor próbálta az adatbázismotor eszkalálni a zárolásokat.
index_lock_promotion_count bigint Az adatbázismotor eszkalált zárolásainak halmozott száma.
page_latch_wait_count bigint Kumulatív hányszor várt az adatbázismotor a reteszes versengés miatt.
page_latch_wait_in_ms bigint Az adatbázismotor által várt ezredmásodpercek halmozott száma a reteszes versengés miatt.
page_io_latch_wait_count bigint Kumulatív hányszor várt az adatbázismotor egy I/O-lapzárlatra.
page_io_latch_wait_in_ms bigint Az adatbázismotor által várt ezredmásodpercek halmozott száma egy oldal I/O-reteszén.
tree_page_latch_wait_count bigint A page_latch_wait_count részhalmaza, amely csak a felső szintű B-fa oldalakat tartalmazza. Mindig 0 egy halom vagy oszlopcentrikus index esetén.
tree_page_latch_wait_in_ms bigint A page_latch_wait_in_ms részhalmaza, amely csak a felső szintű B-fa oldalakat tartalmazza. Mindig 0 egy halom vagy oszlopcentrikus index esetén.
tree_page_io_latch_wait_count bigint A page_io_latch_wait_count részhalmaza, amely csak a felső szintű B-fa oldalakat tartalmazza. Mindig 0 egy halom vagy oszlopcentrikus index esetén.
tree_page_io_latch_wait_in_ms bigint A page_io_latch_wait_in_ms részhalmaza, amely csak a felső szintű B-fa oldalakat tartalmazza. Mindig 0 egy halom vagy oszlopcentrikus index esetén.
page_compression_attempt_count bigint A táblázat, index vagy indexelt nézet adott partícióinak PAGE szintű tömörítéséhez kiértékelt lapok száma. Olyan oldalakat is tartalmaz, amelyek nem lettek tömörítve, mert jelentős megtakarítás nem érhető el. Oszlopcentrikus index esetén mindig 0.
page_compression_success_count bigint A táblázat, index vagy indexelt nézet adott partícióihoz laptömörítéssel tömörített adatlapok száma. Oszlopcentrikus index esetén mindig 0.

Jegyzet

A dokumentáció általában a B-fa kifejezést használja az indexekre hivatkozva. A sorkataszterekben az adatbázismotor egy B+ fát implementál. Ez nem vonatkozik az oszlopcentrikus indexekre vagy a memóriaoptimalizált táblák indexére. További információ: SQL Server és Azure SQL index architektúrája és tervezési útmutatója.

Megjegyzések

Ez a dinamikus felügyeleti objektum nem fogad el korrelált paramétereket CROSS APPLY és OUTER APPLY.

A sys.dm_db_index_operational_stats segítségével nyomon követheti, hogy a felhasználóknak mennyi ideig kell várniuk a táblák, indexek vagy partíciók olvasására vagy írására, és azonosíthatják azokat a táblákat vagy indexeket, amelyek jelentős I/O-tevékenységet vagy gyakori pontokat tapasztalnak.

A versengés területeinek azonosításához használja az alábbi oszlopokat.

A tábla- vagy indexpartíciósáltalános hozzáférési mintájának elemzéséhez használja az alábbi oszlopokat:

  • leaf_insert_count

  • leaf_delete_count

  • leaf_update_count

  • leaf_ghost_count

  • range_scan_count

  • singleton_lookup_count

A reteszelés és a zárolási versengés azonosításához használja az alábbi oszlopokat:

  • page_latch_wait_count és page_latch_wait_in_ms

    Ezek az oszlopok jelzik, hogy van-e reteszelési versengés az indexen vagy a halomon, valamint a versengés jelentőségét.

  • row_lock_count és page_lock_count

    Ezek az oszlopok azt jelzik, hogy az adatbázismotor hányszor próbált sor- és oldalzárolásokat szerezni.

  • row_lock_wait_in_ms és page_lock_wait_in_ms

    Ezek az oszlopok jelzik, hogy van-e zárolási versengés az indexen vagy a halomon, valamint a versengés jelentőségét.

A fizikai I/Os statisztikáinak elemzése index- vagy halompartíción

  • page_io_latch_wait_count és page_io_latch_wait_in_ms

    Ezek az oszlopok azt jelzik, hogy az index- vagy halomlapok memóriába helyezéséhez fizikai I/OS-t adtak-e ki, és hogy hány I/OS-t adtak ki.

Oszlop megjegyzései

A lob_orphan_create_count és lob_orphan_insert_count értékeinek mindig egyenlőnek kell lenniük.

A lob_fetch_in_pages és a lob_fetch_in_bytes oszlopban lévő érték nullánál nagyobb lehet az egy vagy több LOB oszlopot belefoglalt oszlopként tartalmazó nemclustered indexek esetében. További információ: Indexek létrehozása belefoglalt oszlopokkal. Hasonlóképpen, a row_overflow_fetch_in_pages és row_overflow_fetch_in_bytes oszlopok értéke 0-nál nagyobb lehet a nem rendezett indexek esetében, ha az index olyan oszlopokat tartalmaz, amelyek leküldhetők a sorból.

A metaadat-gyorsítótár számlálóinak alaphelyzetbe állítása

A sys.dm_db_index_operational_stats által visszaadott adatok csak addig léteznek, amíg a halom vagy indexet jelképező metaadat-gyorsítótár-objektum elérhető. Ezek az adatok nem állandók és nem tranzakciós konzisztensek. Ez azt jelenti, hogy nem használhatja ezeket a számlálókat annak megállapítására, hogy használták-e az indexet, vagy mikor használták utoljára az indexet. Erről további információt a sys.dm_db_index_usage_stats (Transact-SQL)című témakörben talál.

Az egyes oszlopok értékei nullára vannak állítva, amikor a halom vagy az index metaadatai bekerülnek a metaadat-gyorsítótárba, és a statisztikák mindaddig halmozódnak fel, amíg el nem távolítják a gyorsítótár-objektumot a metaadat-gyorsítótárból. Ezért az aktív halom vagy index valószínűleg mindig a metaadataival rendelkezik a gyorsítótárban, és az összegző számok a tevékenységet tükrözhetik, mivel az SQL Server-példányt utoljára elindították. A kevésbé aktív halom vagy index metaadatai használat közben a gyorsítótárba kerülnek és kifelé kerülnek. Ennek eredményeképpen előfordulhat, hogy az értékek elérhetők vagy nem érhetők el. Az index elvetésével a megfelelő statisztikák el lesznek távolítva a memóriából, és a függvény már nem jelenti őket. Az indexen végzett egyéb DDL-műveletek miatt a statisztika értéke nullára állítható vissza.

Paraméterértékek megadása rendszerfüggvényekkel

A Transact-SQL függvények DB_ID és OBJECT_ID használatával megadhatja a database_id és object_id paraméterek értékét. A függvények számára érvénytelen értékek átadása azonban nem várt eredményeket okozhat. Mindig győződjön meg arról, hogy érvényes azonosítót ad vissza DB_ID vagy OBJECT_ID használatakor. További információ: sys.dm_db_index_physical_stats (Transact-SQL)Megjegyzések szakasza.

Engedélyek

A következő engedélyek szükségesek:

  • CONTROL az adatbázis megadott objektumára vonatkozó engedélyt

  • VIEW DATABASE STATE vagy VIEW DATABASE PERFORMANCE STATE (SQL Server 2022) engedély a megadott adatbázis összes objektumára vonatkozó adatok visszaadására a @object_id = NULL objektum helyettesítő karakterével

  • VIEW SERVER STATE VIEW SERVER PERFORMANCE STATE (SQL Server 2022) engedély az összes adatbázis adatainak visszaadására az adatbázis helyettesítő karakterével @database_id = NULL

A VIEW DATABASE STATE megadása lehetővé teszi az adatbázis összes objektumának visszaadását, függetlenül attól, hogy a CONTROL-engedélyek adott objektumokra vonatkozóan megtagadva vannak-e.

A VIEW DATABASE STATE megtagadása letiltja az adatbázis összes objektumának visszaadását, függetlenül attól, hogy az adott objektumokhoz adott CONTROL-engedélyek vannak-e megadva. Ha az adatbázis helyettesítő karaktere @database_id=NULL van megadva, az adatbázis nem lesz megadva.

További információ: Dinamikus felügyeleti nézetek és függvények (Transact-SQL).

Példák

Egy. Adott tábla adatainak visszaadása

A következő példa az AdventureWorks2025 adatbázis összes indexére és partíciójára Person.Address vonatkozó információkat adja vissza. A lekérdezés végrehajtásához legalább a CONTROL engedélyre van szükség Person.Address táblában.

Fontos

Ha a Transact-SQL függvényt DB_ID és OBJECT_ID paraméterérték visszaadásához használja, mindig győződjön meg arról, hogy érvényes azonosítót ad vissza. Ha az adatbázis vagy az objektum neve nem található, például ha nem léteznek, vagy helytelenül vannak beírva, mindkét függvény NULL értéket ad vissza. A sys.dm_db_index_operational_stats függvény a NULL értéket helyettesítő karakterként értelmezi, amely az összes adatbázist vagy objektumot meghatározza. Mivel ez nem szándékos művelet lehet, az ebben a szakaszban szereplő példák bemutatják az adatbázis- és objektumazonosítók biztonságos meghatározásának módját.

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. Az összes tábla és index adatainak visszaadása

Az alábbi példa az SQL Server-példányon belüli összes táblára és indexre vonatkozó információkat adja vissza. A lekérdezés végrehajtásához MEGTEKINTÉSI KISZOLGÁLÓ ÁLLAPOTA engedély szükséges.

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

Lásd még:

dinamikus felügyeleti nézetek és függvények (Transact-SQL)
indexelt dinamikus felügyeleti nézetek és függvények (Transact-SQL)
Monitorozás és hangolás teljesítmény
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)