sys.dm_db_index_operational_stats (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceSQL-Datenbank in Microsoft Fabric

Gibt die Datenzugriffs-, Sperr- und Verriegelungsstatistiken für jede Partition einer Tabelle oder eines Indexes in einer Datenbank zurück.

Transact-SQL-Syntaxkonventionen

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

Argumente

{ database_id | NULL | 0 | DEFAULT }

Die ID der Datenbank. database_id ist klein. Gültige Eingaben sind die ID-Nummer einer Datenbank, NULL, , 0, oder DEFAULT. Der Standardwert lautet 0. NULL, 0und DEFAULT sind gleichwertige Werte in diesem Kontext.

Geben Sie NULL an, dass Informationen für alle Datenbanken in der Sql Server-Instanz zurückgegeben werden sollen. Wenn Sie für database_id angeben, müssen Sie auch für NULL, index_id und NULL angeben.

Die integrierte Funktion DB_ID kann angegeben werden.

{ object_id | NULL | 0 | DEFAULT }

Objekt-ID der Tabelle oder Ansicht, auf der sich der Index befindet. object_id ist int.

Gültige Eingaben sind die ID-Nummer einer Tabelle und die Ansicht, NULL, , 0oder DEFAULT. Der Standardwert lautet 0. NULL, 0und DEFAULT sind gleichwertige Werte in diesem Kontext.

Geben Sie NULL an, dass Informationen für alle Tabellen und Ansichten in der angegebenen Datenbank zurückgegeben werden sollen. Wenn Sie für object_id angeben, müssen Sie auch für NULL und partition_number angebenNULL.

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

Die ID des Index. index_id ist int. Gültige Eingaben sind die ID-Nummer eines Indexes, 0 wenn object_id ein Heap ist, NULL, -1, oder DEFAULT. Der Standardwert lautet -1. NULL, -1und DEFAULT sind gleichwertige Werte in diesem Kontext.

Geben Sie NULL an, dass Informationen für alle Indizes für eine Basistabelle oder -ansicht zurückgegeben werden sollen. Wenn Sie für index_id angebenNULL, müssen Sie auch für partition_number angebenNULL.

{ partition_number | NULL | 0 | DEFAULT }

Partitionsnummer im Objekt. partition_number ist int. Gültige Eingaben sind die partition_number eines Indexes oder Heaps, NULL, 0oder DEFAULT. Der Standardwert lautet 0. NULL, 0und DEFAULT sind gleichwertige Werte in diesem Kontext.

Geben Sie an NULL , um Informationen für alle Partitionen des Index oder Heaps zurückzugeben.

partition_number basiert auf 1. Ein nicht partitioniertes Index oder Heap hat partition_number auf 1 festgelegt.

Zurückgegebene Tabelle

Spaltenname Datentyp Description
database_id smallint Datenbank-ID

In Azure SQL-Datenbank sind die Werte innerhalb einer einzelnen Datenbank oder eines Pools für elastische Datenbanken eindeutig, aber nicht innerhalb eines logischen Servers.
object_id int ID der Tabelle oder Sicht. Weitere Informationen finden Sie unter sys.objects.
index_id int ID des Indexes oder Heaps. Weitere Informationen finden Sie unter sys.indexes.
partition_number int Auf 1 basierende Partitionsnummer im Index oder Heap. Weitere Informationen finden Sie unter sys.partitions.
hobt_id bigint ID des Datenhap- oder B-Struktur-Rowsets, das interne Daten für einen Spaltenspeicherindex nachverfolgt.

NULL - Das ist kein internes Columnstore-Rowset.

Weitere Informationen finden Sie unter sys.internal_partitions.
leaf_insert_count bigint Kumulierte Anzahl von Blattebeneneinfügungen. Weitere Informationen zu Indexebenen finden Sie in der Indexarchitektur und im Entwurfshandbuch.
leaf_delete_count bigint Kumulierte Anzahl von Löschvorgangen auf Blattebene. leaf_delete_count wird nur für gelöschte Einträge erhöht, die nicht zuerst als Ghost markiert sind. Bei gelöschten Datensätzen, die zuerst gespenst werden, leaf_ghost_count wird stattdessen erhöht.
leaf_update_count bigint Kumulierte Anzahl von Aktualisierungen auf Blattebene.
leaf_ghost_count bigint Kumulierte Anzahl von Zeilen auf Blattebene, die als gelöscht markiert, aber noch nicht entfernt wurden. Diese Zählung schließt keine Datensätze ein, die sofort gelöscht werden, ohne als Ghost markiert zu werden. Ein Bereinigungsthread entfernt Geisterzeilen in festgelegten Intervallen. Dieser Wert schließt keine Ghost-Zeilen ein, die aufgrund einer ausstehenden Snapshot-Transaktion behalten werden.
nonleaf_insert_count bigint Gesamtzahl der Einfügevorgänge über der Blattebene. Gilt nur für B-Strukturindizes. 0 für Heaps oder Spaltenspeicherindizes.
nonleaf_delete_count bigint Gesamtzahl der Löschvorgänge über der Blattebene. Gilt nur für B-Strukturindizes. 0 für Heaps oder Spaltenspeicherindizes.
nonleaf_update_count bigint Gesamtzahl der Updates über der Blattebene. Gilt nur für B-Strukturindizes. 0 für Heaps oder Spaltenspeicherindizes.
leaf_allocation_count bigint Kumulierte Anzahl der Seitenzuweisungen auf Blattebene im Index oder Heap.

Bei einem Index entspricht eine Seitenzuordnung einer Seitenteilung.
nonleaf_allocation_count bigint Gesamtzahl der durch Seitenteilungen über der Blattebene verursachten Seitenzuordnungen. Gilt nur für B-Strukturindizes. 0 für Heaps oder Spaltenspeicherindizes.
leaf_page_merge_count bigint Gesamtzahl der Seitenzusammenführungen auf der Blattebene. Immer 0 für Spaltenspeicherindizes.
nonleaf_page_merge_count bigint Gesamtzahl der Seitenzusammenführungen über der Blattebene. Gilt nur für B-Strukturindizes. 0 für Heaps oder Spaltenspeicherindizes.
range_scan_count bigint Gesamtzahl der im Index oder Heap gestarteten Bereichs- und Tabellenscans.
singleton_lookup_count bigint Gesamtzahl der Abrufvorgänge einzelner Zeilen aus dem Index oder Heap.
forwarded_fetch_count bigint Anzahl der über einen weitergeleiteten Datensatz abgerufenen Zeilen. Gilt nur für Heaps, 0 für B-Strukturindizes.
lob_fetch_in_pages bigint Kumulierte Anzahl großer Objektseiten (LOB), die aus einer LOB_DATA Zuordnungseinheit abgerufen wurden. Diese Seiten enthalten Daten, die in Spalten mit den Typen text, ntext, image, varchar(max),nvarchar(max),varbinary(max),xml und json gespeichert sind. Weitere Informationen finden Sie unter Datentypen.
lob_fetch_in_bytes bigint Gesamtzahl der abgerufenen LOB-Datenbytes.
lob_orphan_create_count bigint Gesamtzahl verwaister LOB-Werte, die für Massenvorgänge erstellt werden. Gilt nur für Heaps und B-Struktur gruppierte Indizes, 0 für nicht gruppierte Indizes und Spaltenspeicherindizes.
lob_orphan_insert_count bigint Gesamtzahl verwaister LOB-Werte, die während Massenvorgängen eingefügt werden. Gilt nur für Heaps und B-Struktur gruppierte Indizes, 0 für nicht gruppierte Indizes und Spaltenspeicherindizes.
row_overflow_fetch_in_pages bigint Kumulierte Anzahl von Zeilenüberlaufdatenseiten, die aus einer ROW_OVERFLOW_DATA Zuordnungseinheit abgerufen wurden.

Diese Seiten enthalten Daten, die in Spalten vom Typ varchar(n), nvarchar(n), varbinary(n), und sql_variant für große Zeilen gespeichert sind.
row_overflow_fetch_in_bytes bigint Gesamtzahl der abgerufenen Zeilenüberlauf-Datenbytes.
column_value_push_off_row_count bigint Gesamtzahl der Spaltenwerte für LOB-Daten und Zeilenüberlaufdaten, die durch Ausführen eines Pushs außerhalb von Zeilen verschoben wurden, damit eine eingefügte oder aktualisierte Zeile auf eine Seite passt.
column_value_pull_in_row_count bigint Gesamtwert der Spaltenwerte für LOB-Daten und Zeilenüberlaufdaten, die durch Ausführen eines Pulls innerhalb eine Zeile verschoben werden. Dies tritt auf, wenn ein Aktualisierungsvorgang Speicherplatz in einem Datensatz frei gibt und eine Möglichkeit bietet, einen oder mehrere Off-Row-Werte aus einer LOB_DATA oder ROW_OVERFLOW_DATA mehreren Zuordnungseinheiten in die IN_ROW_DATA Zuordnungseinheit zu ziehen.
row_lock_count bigint Gesamtzahl der angeforderten Zeilensperren.
row_lock_wait_count bigint Kumulierte Anzahl der Wartezeiten für die Datenbank-Engine auf eine Zeilensperre.
row_lock_wait_in_ms bigint Die Gesamtzahl der Millisekunden, die die Datenbank-Engine auf eine Zeilensperre gewartet haben.
page_lock_count bigint Gesamtzahl der angeforderten Seitensperren.
page_lock_wait_count bigint Kumulierte Anzahl der Wartezeiten des Datenbank-Engine auf eine Seitensperre.
page_lock_wait_in_ms bigint Die Gesamtzahl der Millisekunden, die die Datenbank-Engine auf eine Seitensperre gewartet haben.
index_lock_promotion_attempt_count bigint Kumulierte Häufigkeit, mit der die Datenbank-Engine versucht haben, Sperren zu eskalieren.
index_lock_promotion_count bigint Kumulierte Anzahl der Datenbank-Engine eskalierten Sperren.
page_latch_wait_count bigint Kumulierte Anzahl der Wartezeiten des Datenbankmoduls, um einen Riegel zu erhalten.
page_latch_wait_in_ms bigint Die kumulierte Anzahl von Millisekunden, die das Datenbankmodul wartete, um einen Riegel zu erhalten.
page_io_latch_wait_count bigint Kumulierte Anzahl der Wartezeiten des Datenbankmoduls auf einer Seiten-E/A-Riegelung.
page_io_latch_wait_in_ms bigint Kumulierte Anzahl von Millisekunden, die die Datenbank-Engine auf einer Seiten-E/A-Riegelung gewartet haben.
tree_page_latch_wait_count bigint Teilmenge, die page_latch_wait_count nur die B-Strukturseiten der oberen Ebene enthält. Immer 0 für einen Heap oder einen columnstore-Index.
tree_page_latch_wait_in_ms bigint Teilmenge, die page_latch_wait_in_ms nur die B-Strukturseiten der oberen Ebene enthält. Immer 0 für einen Heap oder einen columnstore-Index.
tree_page_io_latch_wait_count bigint Teilmenge, die page_io_latch_wait_count nur die B-Strukturseiten der oberen Ebene enthält. Immer 0 für einen Heap oder einen columnstore-Index.
tree_page_io_latch_wait_in_ms bigint Teilmenge, die page_io_latch_wait_in_ms nur die B-Strukturseiten der oberen Ebene enthält. Immer 0 für einen Heap oder einen columnstore-Index.
page_compression_attempt_count bigint Anzahl der Seiten, die auf PAGE Levelkompression für eine bestimmte Partition einer Tabelle, eines Index oder einer indexierten Ansicht ausgewertet wurden. Enthält Seiten, die nicht komprimiert wurden, weil keine signifikanten Einsparungen möglich waren. Immer 0 für Spaltenspeicherindizes.
page_compression_success_count bigint Anzahl der Datenseiten, die durch PAGE Kompression für bestimmte Partitionen einer Tabelle, eines Index oder einer indexierten Ansicht komprimiert wurden. Immer 0 für Spaltenspeicherindizes.
version_generated_inrow bigint Kumulierte Anzahl von In-Zeilen-Versionen mit Nutzlast, die in der Heap- oder B-Struktur für einen Update-, Zusammenführungs- oder Insert-over-Ghost-Vorgang generiert wurde. In einer zeileninternen Version wird das alte Zeilenbild (oder ein Diff) direkt in der Zeile gespeichert, ohne dass eine Reise zum Versionsspeicher erfolgt. Diese Anzahl ist eine Obermenge, die Versionen enthält, die von insert_over_ghost_version_inrow. Weitere Informationen zu In-Row- und Off-Row-Versionen finden Sie unter "Space used by the persistent version store (PVS)".
version_generated_offrow bigint Kumulative Anzahl der Versionen, die an den Off-Row-Speicher für einen Heap-, B-Struktur- oder LOB-Lösch-, Aktualisierungs-, Zusammenführungs- oder Insert-over-Ghost-Vorgang übertragen wurden. Eine Off-Row-Version wird generiert, wenn das alte Zeilenbild nicht mehr in der Reihe behalten werden kann. Diese Anzahl ist eine Obermenge, die Versionen enthält, die von ghost_version_offrow und .insert_over_ghost_version_offrow
ghost_version_inrow bigint Kumulierte Anzahl der Male, mit denen ein Lösch- oder Aktualisierungsvorgang (als Löschvorgang, gefolgt von einem Einfügen) die vorhandene Zeile als Geist mit In-Row-Versionsverwaltungsinformationen markiert hat. In der zeileninternen Version werden nur ein Transaktionszeitstempel und eine Nutzlast der Länge Null gespeichert, sodass das Rückgängigmachen des Löschens nur eine Unghosting der Zeile erfordert.
ghost_version_offrow bigint Kumulierte Anzahl der Male, mit denen ein Lösch- oder Aktualisierungsvorgang (als Löschvorgang ausgeführt wird, gefolgt von einem Einfügen) die vorhandenen Zeilen- oder BRANCHENspaltendaten an den Speicher außerhalb der Zeile übertragen, wodurch ein Stub in der Zeile für Versionsverwaltungsinformationen erhalten bleibt. Dieser Zähler wird zusammen mit version_generated_offrow Geisteroperationen erhöht.
insert_over_ghost_version_inrow bigint Kumulierte Anzahl von In-Zeilen-Versionen mit Nutzlast, die für einen B-Struktur-Insert-over-Ghost-Vorgang generiert wurde. Ein Insert-over-Ghost tritt auf, wenn eine neue Zeile in das Slot eines zuvor gespensteten Datensatzes eingefügt wird, entweder aus einem expliziten Löschvorgang, gefolgt von einem Einfügen, oder aus einer Aktualisierung oder zusammenführung, die als Löschvorgang implementiert wird, gefolgt von einem Einfügen. Dieser Zähler ist eine Teilmenge von version_generated_inrow.
insert_over_ghost_version_offrow bigint Kumulierte Anzahl der Male, mit denen die vorhandene Ghostzeile während eines B-Tree-Insert-over-Ghost-Vorgangs an den Speicher außerhalb der Zeile verschoben wurde, wobei ein Stub in der neu eingefügten Zeile für Versionsverwaltungsinformationen übrig bleibt. Dieser Zähler ist eine Teilmenge von version_generated_offrow.
compaction_attempt_count bigint Kumulative Anzahl der Versuche der automatischen Indexverdichtung. Weitere Informationen finden Sie unter Automatische Indexverdichtung (Vorschau).
compaction_complete_count bigint Kumulative Anzahl abgeschlossener Index-Autoverdichtungen.
compaction_skip_count bigint Kumulative Anzahl der übersprungenen Index-Autokompressionen. Weitere Informationen zu Überspring-Gründen finden Sie unter Verwenden eines erweiterten Ereignisses zur Überwachung der Kompaktionsstatistiken.
compaction_ineligible_count bigint Kumulierte Anzahl der Verdichtungsversuche wurde übersprungen, weil eine Seite für die automatische Kompaktierung nicht berechtigt war.
compaction_failure_count bigint Kumulierte Anzahl gescheiterter Verdichtungsversuche.
compaction_row_move_count bigint Die kumulierte Anzahl der Zeilen, die im Rahmen der automatischen Verdichtung von einer Seite zur nächsten verschoben wurden.
compaction_page_deallocation_count bigint Kumulierte Anzahl der Seiten, die nach dem Verschieben aller Zeilen auf eine andere Seite freigegeben wurden.

Note

In der Dokumentation wird der Begriff „B-tree“ im Allgemeinen in Bezug auf Indizes verwendet. In Rowstore-Indizes implementiert die Datenbank-Engine einen B+-Baum. Dies gilt nicht für Columnstore-Indizes oder Indizes auf speicheroptimierten Tabellen. Weitere Informationen finden Sie im Leitfaden zur Architektur und zum Entwerfen von SQL Server- und Azure SQL-Indizes.

Bemerkungen

Diese Funktion gibt keine Informationen zu Indizes für speicheroptimierte Tabellen zurück. Informationen zu Indizes auf speicheroptimierten Tabellen finden Sie unter sys.dm_db_xtp_index_stats.

Diese Funktion akzeptiert keine korrelierten Parameter von CROSS APPLY und OUTER APPLY.

Sie können sys.dm_db_index_operational_stats Daten zum Lesen und Schreiben von Betriebsstatistiken nachverfolgen und Sperren, Seitensperre und Seiten-E/A-Statistiken für eine Tabelle, einen Index oder eine Partition sperren. Sie können die Tabellen, Indizes und Partitionen identifizieren, die auf erhebliche Aktivitäten oder Konflikte stoßen.

Die Statistiken werden auf Partitionsebene bereitgestellt und sind additiv. Dies bedeutet, dass Sie Statistiken auf Indexebene oder Tabellenebene abrufen können, indem Sie eine Aggregationsabfrage in T-SQL schreiben. Weitere Informationen finden Sie unter " Indexüberprüfungen" und sucht nach allen Tabellen .

Verwenden Sie die folgenden Spalten, um Lese- und Schreibvorgänge für eine Tabelle, einen Index oder eine Partition zu analysieren:

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

Verwenden Sie die folgenden Spalten, um die Riegelung zu identifizieren:

  • page_latch_wait_count
  • page_latch_wait_in_ms

Verwenden Sie die folgenden Spalten, um die Sperrverknügung zu identifizieren:

  • row_lock_count
  • page_lock_count
  • row_lock_wait_in_ms
  • page_lock_wait_in_ms

Verwenden Sie die folgenden Spalten, um die physische E/A-Statistik zu analysieren:

  • page_io_latch_wait_count
  • page_io_latch_wait_in_ms

Anmerkungen zu Spalten

Die Werte in den Spalten lob_fetch_in_pages und lob_fetch_in_bytes können für nicht gruppierte Indizes größer als Null sein, die eine oder mehrere LOB-Spalten als eingeschlossene Spalten enthalten. Weitere Informationen finden Sie unter Erstellen von Indizes mit enthaltenen Spalten. Entsprechend können die Werte in den Spalten row_overflow_fetch_in_pages und row_overflow_fetch_in_bytes für nicht gruppierte Indizes größer als 0 sein, wenn der Index große Zeilen enthält.

Zurücksetzen der Leistungsindikatoren im Metadatencache

Die von sys.dm_db_index_operational_stats ihnen zurückgegebenen Daten sind nur vorhanden, solange ein Metadatencacheobjekt verfügbar ist, das den Heap oder die B-Struktur darstellt. Diese Daten sind nicht persistent. Das bedeutet, dass Sie diese Zähler nicht eindeutig verwenden können, um endgültig festzustellen, ob ein Index verwendet wurde oder nicht, oder wann der Index zuletzt verwendet wurde. Verwenden Sie stattdessen sys.dm_db_index_usage_stats.

Die Werte für jede numerische Spalte werden auf Null festgelegt, wenn die Metadaten für den Heap oder die B-Struktur in den Metadatencache eingefügt werden. Statistiken werden gesammelt, bis das Cacheobjekt aus dem Metadatencache entfernt wird. Ein aktiver Heap oder eine B-Struktur weist häufig seine Metadaten im Cache auf, und die kumulierten Zählungen spiegeln die Aktivität seit dem letzten Start der Datenbankmodulinstanz wider. Die Metadaten für einen weniger aktiven Heap oder B-Baum können während der Nutzung in den Cache ein- und aussteigen, insbesondere wenn die Datenbank-Engine-Instanz unter Speicherdruck steht. Daher werden die Index-Betriebsstatistiken manchmal nicht berücksichtigt sys.dm_db_index_operational_stats. Ein solches Szenario ist aber unüblich.

Statistiken werden aus dem Cache entfernt und von dieser Funktion nicht mehr gemeldet, wenn eine Tabelle oder ein Index gelöscht wird oder eine Partition abgeschnitten wird. Andere DDL-Vorgänge für den Index können dazu führen, dass der Wert der Statistiken auf Null zurückgesetzt wird.

Verwenden von Systemfunktionen zum Angeben von Parameterwerten

Sie können die Transact-SQL-Funktionen DB_ID und OBJECT_ID verwenden, um einen Wert für die Parameter database_id und object_id anzugeben. Das Weitergeben von Werten, die für diese Funktionen nicht gültig sind, kann jedoch unbeabsichtigte Ergebnisse verursachen. Stellen Sie immer sicher, dass beim Verwenden oder Verwenden DB_ID eine OBJECT_IDgültige ID zurückgegeben wird. Weitere Informationen finden Sie unter Rückgabeinformationen für eine angegebene Tabelle.

Erlaubnisse

Folgende Berechtigungen sind erforderlich:

  • CONTROL Berechtigung für das angegebene Objekt in der Datenbank

  • VIEW DATABASE STATE oder VIEW DATABASE PERFORMANCE STATE die Berechtigung, Informationen über alle Objekte innerhalb der angegebenen Datenbank zurückzugeben, wenn kein Wert für @object_id angegeben ist.

  • VIEW SERVER STATE oder VIEW SERVER PERFORMANCE STATE die Berechtigung, Informationen über alle Datenbanken zurückzugeben, wenn kein Wert für @database_id angegeben ist.

Gewähren VIEW DATABASE STATE oder VIEW SERVER PERFORMANCE STATE Erlauben, dass alle Objekte in der Datenbank zurückgegeben werden, unabhängig von berechtigungen CONTROL , die für bestimmte Objekte verweigert wurden.

Alle VIEW DATABASE STATE Objekte in der Datenbank verweigern oder VIEW SERVER PERFORMANCE STATE verbieten, zurückgegeben zu werden, unabhängig von berechtigungen CONTROL , die für bestimmte Objekte erteilt wurden.

Weitere Informationen finden Sie unter Systemdynamische Verwaltungsansichten und -funktionen.

Examples

Zurückgeben von Informationen für eine angegebene Tabelle

Das folgende Beispiel liefert Informationen für alle Indizes und Partitionen der Person.Address Tabelle in der AdventureWorks2025-Datenbank.

Important

Wenn Sie die Transact-SQL-Funktionen DB_ID verwenden und OBJECT_ID einen Parameterwert zurückgeben, stellen Sie immer sicher, dass eine gültige ID zurückgegeben wird. Wenn der Datenbank- oder Objektname nicht gefunden werden kann, z. B. wenn sie nicht vorhanden sind oder falsch geschrieben sind, werden beide Funktionen zurückgegeben NULL. Die sys.dm_db_index_operational_stats Funktion wird als Wildcardwert interpretiert NULL , der alle Datenbanken oder alle Objekte angibt. Da dies ein versehentlicher Vorgang sein kann, veranschaulichen die Beispiele in diesem Abschnitt, wie Sie auf sichere Weise Datenbank- und Objekt-IDs bestimmen.

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;

Zurückgeben von Informationen für alle Tabellen und Indizes

Im folgenden Beispiel werden Informationen für alle Tabellen und Indizes in einer Datenbankmodulinstanz zurückgegeben.

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

Indexüberprüfungen und Suchvorgänge für alle Tabellen

Im folgenden Beispiel werden Partitionsebenendaten aggregiert, um Die Indexsuche und Scanstatistiken für alle Tabellen in der aktuellen Datenbank zurückzugeben.

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;