sys.dm_db_index_operational_stats (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Retourneert de gegevenstoegang op een lager niveau, vergrendeling en vergrendelingsstatistieken voor elke partitie van een tabel of index in een database.

Transact-SQL syntaxis-conventies

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

Argumenten

{ database_id | NULL | 0 | DEFAULT }

Id van de database. database_id is kleine. Geldige invoer zijn het ID-nummer van een database, NULL, , 0, of DEFAULT. De standaardwaarde is 0. NULL, 0en DEFAULT zijn gelijkwaardige waarden in deze context.

Geef NULL op om informatie te retourneren voor alle databases in het exemplaar van SQL Server. Als u NULL opgeeft voor database_id, moet u ook NULL opgeven voor object_id, index_iden partition_number.

De ingebouwde functie DB_ID kan worden opgegeven.

{ object_id | NULL | 0 | DEFAULT }

Object-id van de tabel of weergave waarop de index is ingeschakeld. object_id is int.

Geldige invoer zijn het ID-nummer van een tabel en view, NULL, 0, of DEFAULT. De standaardwaarde is 0. NULL, 0en DEFAULT zijn gelijkwaardige waarden in deze context.

Geef NULL op om informatie te retourneren voor alle tabellen en weergaven in de opgegeven database. Als u NULL opgeeft voor object_id, moet u ook NULL opgeven voor index_id en partition_number.

{ index_id | 0 | NULL | -1 | DEFAULT }

Id van de index. index_id is int. Geldige invoer zijn het ID-nummer van een index, 0 als object_id een heap is, NULL, -1, of DEFAULT. De standaardwaarde is -1. NULL, -1en DEFAULT zijn gelijkwaardige waarden in deze context.

Geef NULL op om informatie te retourneren voor alle indexen voor een basistabel of -weergave. Als u NULL opgeeft voor index_id, moet u ook NULL opgeven voor partition_number.

{ partition_number | NULL | 0 | DEFAULT }

Partitienummer in het object. partition_number is int. Geldige invoer is de partition_number van een index of heap, NULL, 0of DEFAULT. De standaardwaarde is 0. NULL, 0en DEFAULT zijn gelijkwaardige waarden in deze context.

Specificeer NULL om informatie terug te geven voor alle partities van de index of heap.

partition_number is gebaseerd op 1. Een niet-gepartitioneerde index of heap heeft partition_number ingesteld op 1.

Tabel geretourneerd

Kolomnaam Gegevenstype Beschrijving
database_id smallint Database-ID.

In Azure SQL Database zijn de waarden uniek binnen één database of een elastische pool, maar niet binnen een logische server.
object_id int Id van de tabel of weergave. Voor meer informatie, zie sys.objects.
index_id int Id van de index of heap. Voor meer informatie, zie sys.indexes.
partition_number int Partitienummer op basis van 1 in de index of heap. Voor meer informatie, zie sys.partitions.
hobt_id bigint Id van de gegevens heap- of B-boomstructuurrijset waarmee interne gegevens voor een columnstore-index worden bijgehouden.

NULL - Dit is geen interne columnstore rowset.

Zie sys.internal_partitionsvoor meer informatie.
leaf_insert_count bigint Cumulatief aantal invoegingen op bladniveau. Zie de handleiding indexarchitectuur en ontwerp voor meer informatie over indexniveaus.
leaf_delete_count bigint Cumulatief aantal verwijderingen op bladniveau. leaf_delete_count wordt alleen verhoogd voor verwijderde records die niet als ghost first zijn gemarkeerd. Voor verwijderde records die eerst worden ge ghosted, leaf_ghost_count wordt in plaats daarvan verhoogd.
leaf_update_count bigint Cumulatief aantal updates op bladniveau.
leaf_ghost_count bigint Cumulatief aantal rijen op bladniveau die zijn gemarkeerd als verwijderd, maar nog niet zijn verwijderd. Deze telling omvat geen records die direct worden verwijderd zonder als ghost te worden gemarkeerd. Een opschoningsthread verwijdert spookrijen met ingestelde intervallen. Deze waarde omvat geen ghost rows die behouden blijven vanwege een openstaande snapshottransactie.
nonleaf_insert_count bigint Cumulatief aantal invoegingen boven het bladniveau. Alleen van toepassing op B-tree-indexen. 0 voor heaps- of columnstore-indexen.
nonleaf_delete_count bigint Cumulatief aantal verwijderingen boven het bladniveau. Alleen van toepassing op B-tree-indexen. 0 voor heaps- of columnstore-indexen.
nonleaf_update_count bigint Cumulatief aantal updates boven het bladniveau. Alleen van toepassing op B-tree-indexen. 0 voor heaps- of columnstore-indexen.
leaf_allocation_count bigint Cumulatief aantal paginatoewijzingen op bladniveau in de index of heap.

Voor een index komt een paginatoewijzing overeen met een paginasplitsing.
nonleaf_allocation_count bigint Cumulatief aantal paginatoewijzingen dat wordt veroorzaakt door paginasplitsingen boven het bladniveau. Alleen van toepassing op B-tree-indexen. 0 voor heaps- of columnstore-indexen.
leaf_page_merge_count bigint Cumulatief aantal paginasamenvoegingen op bladniveau. Altijd 0 voor columnstore-indexen.
nonleaf_page_merge_count bigint Cumulatief aantal paginasamenvoegingen boven het bladniveau. Alleen van toepassing op B-tree-indexen. 0 voor heaps- of columnstore-indexen.
range_scan_count bigint Het cumulatieve aantal bereik- en tabelscans is gestart op de index of heap.
singleton_lookup_count bigint Cumulatief aantal opvragen van één rij uit de index of heap.
forwarded_fetch_count bigint Het aantal rijen dat is opgehaald via een doorstuurrecord. Geldt alleen voor heaps, 0 voor B-tree-indexen.
lob_fetch_in_pages bigint Cumulatief aantal LOB-pagina's (large object) opgehaald uit een LOB_DATA toewijzingseenheid. Deze pagina's bevatten gegevens die zijn opgeslagen in kolommen van type text, ntext, image, varchar(max),nvarchar(max),varbinary(max),xml en json. Zie Gegevenstypen voor meer informatie.
lob_fetch_in_bytes bigint Cumulatief aantal opgehaalde LOB-gegevensbytes.
lob_orphan_create_count bigint Cumulatief aantal zwevende LOB-waarden die zijn gemaakt voor bulkbewerkingen. Is alleen van toepassing op heaps en B-tree geclusterde indexen, 0 voor niet-geclusterde indexen en columnstore-indexen.
lob_orphan_insert_count bigint Cumulatief aantal zwevende LOB-waarden ingevoegd tijdens bulkbewerkingen. Is alleen van toepassing op heaps en B-tree geclusterde indexen, 0 voor niet-geclusterde indexen en columnstore-indexen.
row_overflow_fetch_in_pages bigint Cumulatief aantal rij-overloopgegevenspagina's die zijn opgehaald uit een ROW_OVERFLOW_DATA toewijzingseenheid.

Deze pagina's bevatten gegevens die zijn opgeslagen in kolommen van het typevarchar(n), nvarchar(n)en varbinary(n)sql_variant voor grote rijen.
row_overflow_fetch_in_bytes bigint Cumulatief aantal opgehaalde gegevensbytes voor rij-overloop.
column_value_push_off_row_count bigint Cumulatief aantal kolomwaarden voor LOB-gegevens en rij-overloopgegevens die buiten de rij worden gepusht om een ingevoegde of bijgewerkte rij binnen een pagina te plaatsen.
column_value_pull_in_row_count bigint Cumulatief aantal kolomwaarden voor LOB-gegevens en rij-overloopgegevens die in rij worden opgehaald. Dit gebeurt wanneer een updatebewerking ruimte vrij maakt in een record en een mogelijkheid biedt om een of meer waarden buiten rij op te halen uit een LOB_DATA of ROW_OVERFLOW_DATA meer toewijzingseenheden naar de toewijzingseenheid IN_ROW_DATA .
row_lock_count bigint Cumulatief aantal aangevraagde rijvergrendelingen.
row_lock_wait_count bigint Cumulatief aantal keren dat de database-engine op een rijvergrendeling heeft gewacht.
row_lock_wait_in_ms bigint Het totale aantal milliseconden dat de database-engine wachtte op een rijvergrendeling.
page_lock_count bigint Cumulatief aantal aangevraagde paginavergrendelingen.
page_lock_wait_count bigint Cumulatief aantal keren dat de database-engine op een paginavergrendeling heeft gewacht.
page_lock_wait_in_ms bigint Het totale aantal milliseconden dat de database-engine op een paginavergrendeling heeft gewacht.
index_lock_promotion_attempt_count bigint Cumulatief aantal keren dat de database-engine heeft geprobeerd vergrendelingen te escaleren.
index_lock_promotion_count bigint Cumulatief aantal keren dat de database-engine vergrendelingen escaleerde.
page_latch_wait_count bigint Cumulatief aantal keren dat de database-engine wachtte om een vergrendeling te verkrijgen.
page_latch_wait_in_ms bigint Het cumulatieve aantal milliseconden dat de database-engine wachtte om een vergrendeling te verkrijgen.
page_io_latch_wait_count bigint Cumulatief aantal keren dat de database-engine op een pagina-I/O-vergrendeling heeft gewacht.
page_io_latch_wait_in_ms bigint Cumulatief aantal milliseconden dat de database-engine op een pagina-I/O-vergrendeling heeft gewacht.
tree_page_latch_wait_count bigint Subset hiervan page_latch_wait_count bevat alleen de pagina's van de B-structuur op het hoogste niveau. Altijd 0 voor een heap- of columnstore-index.
tree_page_latch_wait_in_ms bigint Subset hiervan page_latch_wait_in_ms bevat alleen de pagina's van de B-structuur op het hoogste niveau. Altijd 0 voor een heap- of columnstore-index.
tree_page_io_latch_wait_count bigint Subset hiervan page_io_latch_wait_count bevat alleen de pagina's van de B-structuur op het hoogste niveau. Altijd 0 voor een heap- of columnstore-index.
tree_page_io_latch_wait_in_ms bigint Subset hiervan page_io_latch_wait_in_ms bevat alleen de pagina's van de B-structuur op het hoogste niveau. Altijd 0 voor een heap- of columnstore-index.
page_compression_attempt_count bigint Aantal pagina's dat werd geëvalueerd op PAGE niveaucompressie voor een specifieke partitie van een tabel, index of geïndexeerde weergave. Bevat pagina's die niet zijn samengedrukt omdat er geen significante besparingen konden worden behaald. Altijd 0 voor columnstore-indexen.
page_compression_success_count bigint Aantal datapagina's die zijn gecomprimeerd door PAGE compressie voor specifieke partities van een tabel, index of geïndexeerde weergave. Altijd 0 voor columnstore-indexen.
version_generated_inrow bigint Cumulatief aantal versies in rij met nettolading gegenereerd in de heap of B-tree voor een update, samenvoeging of insert-over-ghost-bewerking. In een in-rijversie wordt de oude rijafbeelding (of een diff) rechtstreeks in de rij opgeslagen, waardoor u geen trip naar het versiearchief hoeft te maken. Dit aantal is een superset die versies bevat die worden geteld door insert_over_ghost_version_inrow. Zie Ruimte die wordt gebruikt door het permanente versiearchief (PVS) voor meer informatie over versies in rij en buiten rij.
version_generated_offrow bigint Cumulatief aantal versies dat naar de opslag buiten rij wordt gepusht voor een heap-, B-tree- of LOB-verwijdering, update, samenvoeging of insert-over-ghost-bewerking. Een off-row versie wordt gegenereerd wanneer de oude row-image niet in de rij kan worden gehouden. Dit aantal is een superset die versies bevat die worden geteld door ghost_version_offrow en insert_over_ghost_version_offrow.
ghost_version_inrow bigint Cumulatief aantal keren dat een verwijdering of update (uitgevoerd als een verwijdering gevolgd door een invoegbewerking) de bestaande rij heeft gemarkeerd als een spook met versiebeheergegevens in de rij. In de versie van de rij wordt alleen een transactietijdstempel en een nettolading met lengte nul opgeslagen, zodat het ongedaan maken van de verwijdering alleen het hosten van de rij vereist.
ghost_version_offrow bigint Het cumulatieve aantal keren dat een verwijdering of update (uitgevoerd als een verwijdering gevolgd door een invoegbewerking) de bestaande rij- of LOB-kolomgegevens naar de opslag buiten rij heeft gepusht, waardoor er een stub in de rij staat voor versiebeheergegevens. Deze teller wordt samen met version_generated_offrow ghost-bewerkingen verhoogd.
insert_over_ghost_version_inrow bigint Cumulatief aantal versies in rij met nettolading gegenereerd voor een B-tree insert-over-ghost-bewerking. Er treedt een invoeg-over-ghost op wanneer een nieuwe rij wordt ingevoegd in de sleuf van een eerder spookrecord, hetzij van een expliciete verwijdering, gevolgd door een invoeging, of van een update of samenvoeging die is geïmplementeerd als een verwijdering, gevolgd door een invoeging. Deze teller is een subset van version_generated_inrow.
insert_over_ghost_version_offrow bigint Cumulatief aantal keren dat de bestaande ghostrij naar de opslag buiten de rij werd gepusht tijdens een B-tree insert-over-ghost-bewerking, waardoor er een stub in de zojuist ingevoegde rij voor versiebeheerinformatie overblijft. Deze teller is een subset van version_generated_offrow.
compaction_attempt_count bigint Cumulatief aantal pogingen tot automatische verdichting van index. Voor meer informatie, zie Automatische indexverdichting (preview).
compaction_complete_count bigint Cumulatieve telling van voltooide index-autocomprimaties.
compaction_skip_count bigint Cumulatieve telling van overgeslagen index-autocomprimaties. Voor meer informatie over overslaande redenen, zie Gebruik een uitgebreide gebeurtenis om verdichtingsstatistieken te monitoren.
compaction_ineligible_count bigint Het cumulatieve aantal pogingen tot verdichting werd overgeslagen omdat een pagina niet in aanmerking kwam voor automatische comprimatie.
compaction_failure_count bigint Cumulatief aantal mislukte verdichtingspogingen.
compaction_row_move_count bigint Het cumulatieve aantal rijen dat van de ene pagina naar de andere is verplaatst als onderdeel van automatische compactie.
compaction_page_deallocation_count bigint Het cumulatieve aantal pagina's dat werd gedealvesteerd nadat alle rijen naar een andere pagina waren verplaatst.

Note

Documentatie maakt gebruik van de term B-tree in het algemeen in verwijzing naar indexen. In rowstore-indexen implementeert de Database Engine een B+ tree. Dit geldt niet voor columnstore-indexen of indexen voor tabellen die zijn geoptimaliseerd voor geheugen. Zie de SQL Server- en Azure SQL-indexarchitectuur en ontwerphandleidingvoor meer informatie.

Opmerkingen

Deze functie retourneert geen informatie over indexen in tabellen die zijn geoptimaliseerd voor geheugen. Voor informatie over indexen op geheugengeoptimaliseerde tabellen, zie sys.dm_db_xtp_index_stats.

Deze functie accepteert geen gecorreleerde parameters van CROSS APPLY en OUTER APPLY.

U kunt sys.dm_db_index_operational_stats gegevens bijhouden met statistieken voor lees- en schrijfbewerkingen, en vergrendelen, paginavergrendeling en I/O-vergrendelingsstatistieken voor een tabel, index of partitie. U kunt de tabellen, indexen en partities identificeren die aanzienlijke activiteit of conflicten ondervinden.

De statistieken worden verstrekt op partitieniveau en zijn additief. Dit betekent dat u statistieken op indexniveau of tabelniveau kunt verkrijgen door een aggregatiequery te schrijven in T-SQL. Zie de indexscans en zoekt naar alle tabellen voor meer informatie.

Als u lees- en schrijfbewerkingsstatistieken voor een tabel, index of partitie wilt analyseren, gebruikt u deze kolommen:

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

Als u conflicten tussen vergrendelingen wilt identificeren, gebruikt u deze kolommen:

  • page_latch_wait_count
  • page_latch_wait_in_ms

Gebruik deze kolommen om conflicten tussen vergrendelingen te identificeren:

  • row_lock_count
  • page_lock_count
  • row_lock_wait_in_ms
  • page_lock_wait_in_ms

Gebruik de volgende kolommen om de fysieke I/O-statistieken te analyseren:

  • page_io_latch_wait_count
  • page_io_latch_wait_in_ms

Kolom opmerkingen

De waarden in de kolommen lob_fetch_in_pages en lob_fetch_in_bytes kunnen groter zijn dan nul voor niet-geclusterde indexen die een of meer LOB-kolommen bevatten als opgenomen kolommen. Zie Indexen maken met opgenomen kolommen voor meer informatie. Op dezelfde manier kunnen de waarden in de kolommen row_overflow_fetch_in_pages groter row_overflow_fetch_in_bytes zijn dan 0 voor niet-geclusterde indexen als de index grote rijen bevat.

Hoe de tellers in de metagegevenscache opnieuw worden ingesteld

De gegevens die worden geretourneerd door sys.dm_db_index_operational_stats bestaan alleen als een metagegevenscacheobject dat de heap of B-boomstructuur vertegenwoordigt, beschikbaar is. Deze data is niet persistent. Dit betekent dat je deze tellers niet kunt gebruiken om definitief te bepalen of een index is gebruikt of niet, of wanneer de index voor het laatst is gebruikt. Gebruik in plaats daarvan sys.dm_db_index_usage_stats.

De waarden voor elke numerieke kolom worden ingesteld op nul wanneer de metagegevens voor de heap of B-boomstructuur in de metagegevenscache worden geplaatst. Statistieken worden verzameld totdat het cacheobject wordt verwijderd uit de metagegevenscache. Een actieve heap- of B-boomstructuur heeft doorgaans de metagegevens in de cache en de cumulatieve aantallen weerspiegelen de activiteit sinds het database-engine-exemplaar voor het laatst is gestart. De metadata voor een minder actieve heap of B-boom kan in en uit de cache bewegen naarmate deze wordt gebruikt, vooral als de Database Engine-instantie onder geheugendruk staat. Als gevolg hiervan kunnen operationele indexstatistieken soms niet worden weergegeven in sys.dm_db_index_operational_stats. Dit is niet gebruikelijk.

Statistieken worden verwijderd uit de cache en worden niet meer gerapporteerd door deze functie als een tabel of index wordt verwijderd of als een partitie wordt afgekapt. Andere DDL-bewerkingen op basis van de index kunnen ertoe leiden dat de waarde van de statistieken opnieuw wordt ingesteld op nul.

Systeemfuncties gebruiken om parameterwaarden op te geven

U kunt de Transact-SQL-functies DB_ID en OBJECT_ID gebruiken om een waarde op te geven voor de parameters database_id en object_id. Het doorgeven van waarden die niet geldig zijn aan deze functies kan echter onbedoelde resultaten veroorzaken. Zorg er altijd voor dat een geldige id wordt geretourneerd wanneer u DB_ID of OBJECT_IDgebruikt. Zie Return-informatie voor een opgegeven tabel voor meer informatie.

Permissions

Hiervoor zijn de volgende machtigingen vereist:

  • CONTROL machtiging voor het opgegeven object in de database

  • VIEW DATABASE STATE of VIEW DATABASE PERFORMANCE STATE toestemming om informatie terug te geven over alle objecten binnen de opgegeven database, wanneer er geen waarde voor @object_id is gespecificeerd.

  • VIEW SERVER STATE of VIEW SERVER PERFORMANCE STATE toestemming om informatie over alle databases terug te geven, wanneer een waarde voor @database_id niet is gespecificeerd.

Verlenen VIEW DATABASE STATE of VIEW SERVER PERFORMANCE STATE toestaan dat alle objecten in de database worden geretourneerd, ongeacht eventuele CONTROL machtigingen die zijn geweigerd voor specifieke objecten.

VIEW DATABASE STATE Als u alle objecten in de database weigert of VIEW SERVER PERFORMANCE STATE weigert, worden geretourneerd, ongeacht de CONTROL machtigingen die zijn verleend voor specifieke objecten.

Voor meer informatie, zie Systeemdynamische beheerweergaven en -functies.

Examples

Retourgegevens voor een opgegeven tabel

Het volgende voorbeeld geeft informatie terug voor alle indexen en partities van de Person.Address tabel in de AdventureWorks2025-database.

Important

Wanneer je de Transact-SQL DB_ID functies gebruikt en OBJECT_ID een parameterwaarde teruggeeft, zorg er dan altijd voor dat een geldige ID wordt teruggegeven. Als de naam van de database of het object niet kan worden gevonden, bijvoorbeeld wanneer ze niet bestaan of onjuist zijn gespeld, worden beide functies geretourneerd NULL. De sys.dm_db_index_operational_stats functie interpreteert NULL als een jokertekenwaarde waarmee alle databases of alle objecten worden opgegeven. Omdat dit een onbedoelde bewerking kan zijn, laten de voorbeelden in deze sectie de veilige manier zien om database- en object-id's te bepalen.

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;

Informatie retourneren voor alle tabellen en indexen

In het volgende voorbeeld worden gegevens geretourneerd voor alle tabellen en indexen op een database-engine-exemplaar.

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

Indexscans en zoekt naar alle tabellen

In het volgende voorbeeld worden gegevens op partitieniveau samengevoegd om indexzoek- en scanstatistieken te retourneren voor alle tabellen in de huidige database.

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;