Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возвращает доступ к данным нижнего уровня, блокировку и блокировку статистики для каждой секции таблицы или индекса в базе данных.
Соглашения о синтаксисе Transact-SQL
Синтаксис
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 }
)
Аргументы
database_id | NULL | 0 | ПО УМОЛЧАНИЮ
Идентификатор базы данных.
database_id .smallint Допустимыми входными значениями являются идентификатор базы данных, NULL, 0 или DEFAULT. По умолчанию установлено значение 0. В данном контексте значения NULL, 0 и DEFAULT эквивалентны.
Укажите ЗНАЧЕНИЕ NULL для возврата сведений для всех баз данных в экземпляре SQL Server. Если для database_id задано значение NULL, необходимо также указать значение NULL для object_id, index_id и partition_number.
Можно указать встроенную функцию DB_ID .
object_id | NULL | 0 | ПО УМОЛЧАНИЮ
Идентификатор объекта таблицы или представления индекса включен. object_id .int
Допустимыми входными значениями являются идентификатор таблицы, NULL, 0 или DEFAULT. По умолчанию установлено значение 0. В данном контексте значения NULL, 0 и DEFAULT эквивалентны.
Укажите ЗНАЧЕНИЕ NULL для возврата сведений для всех таблиц и представлений в указанной базе данных. Если для object_id задано значение NULL, необходимо также указать ЗНАЧЕНИЕ NULL для index_id и partition_number.
index_id | 0 | NULL | -1 | ПО УМОЛЧАНИЮ
Идентификатор индекса.
index_id .int Допустимые входные данные — это идентификатор индекса, 0, если object_id является кучей, NULL, -1 или DEFAULT. Значение по умолчанию — -1. ЗНАЧЕНИЯ NULL, -1 и DEFAULT эквивалентны этому контексту.
Укажите ЗНАЧЕНИЕ NULL, чтобы возвращать сведения для всех индексов базовой таблицы или представления. При указании NULL для index_id необходимо также указать ЗНАЧЕНИЕ NULL для partition_number.
partition_number | NULL | 0 | ПО УМОЛЧАНИЮ
Номер секции в объекте.
partition_number .int Допустимые входные данные — это partition_number индекса или кучи, NULL, 0 или DEFAULT. По умолчанию установлено значение 0. В данном контексте значения NULL, 0 и DEFAULT эквивалентны.
Укажите ЗНАЧЕНИЕ NULL для возврата сведений для всех секций индекса или кучи.
partition_number основан на 1. Непартиментный индекс или куча имеет значение 1 partition_number.
Таблица возвращена
| Имя столбца | Тип данных | Description |
|---|---|---|
database_id |
smallint | Идентификатор базы данных. В База данных SQL Azure значения уникальны в одной базе данных или эластичном пуле, но не в логическом сервере. |
object_id |
int | Идентификатор таблицы или представления. Дополнительные сведения см. в статье sys.objects (Transact-SQL). |
index_id |
int | Идентификатор индекса или кучи. Дополнительные сведения см. в статье sys.indexes (Transact-SQL). |
partition_number |
int | Номер секции внутри индекса или кучи (нумерация начинается с 1). Дополнительные сведения см. в разделе sys.partitions (Transact-SQL). |
hobt_id |
bigint | Идентификатор кучи данных или набора строк B-дерева, который отслеживает внутренние данные для индекса columnstore. NULL — это не внутренний набор строк columnstore. Дополнительные сведения см. в разделе sys.internal_partitions (Transact-SQL). |
leaf_insert_count |
bigint | Совокупное количество вставок конечного уровня. Дополнительные сведения об уровнях индексов см. в руководстве по архитектуре и проектированию индекса. |
leaf_delete_count |
bigint | Совокупное количество удаленных конечных уровней.
leaf_delete_count увеличивается только для удаленных записей, которые не помечены как призрак в первую очередь. Для удаленных записей, которые сначала фантомны, leaf_ghost_count увеличивается. |
leaf_update_count |
bigint | Совокупное количество обновлений конечного уровня. |
leaf_ghost_count |
bigint | Совокупное количество строк конечного уровня, помеченных как удаленные, но еще не удалены. Это число не включает записи, которые немедленно удаляются, не помечены как призрак. Поток очистки удаляет строки призраков с заданными интервалами. Это значение не включает в себя строки призраков, которые сохраняются из-за незадающейся транзакции моментального снимка. |
nonleaf_insert_count |
bigint | Совокупное количество вставок выше конечного уровня. Применяется только к индексам B-дерева. 0 для кучи или индексов columnstore. |
nonleaf_delete_count |
bigint | Совокупное количество удалений выше конечного уровня. Применяется только к индексам B-дерева. 0 для кучи или индексов columnstore. |
nonleaf_update_count |
bigint | Совокупное количество обновлений выше конечного уровня. Применяется только к индексам B-дерева. 0 для кучи или индексов columnstore. |
leaf_allocation_count |
bigint | Совокупное количество выделений страницы конечного уровня в индексе или куче. Для индекса размещение страницы соответствует разбиению страницы. |
nonleaf_allocation_count |
bigint | Совокупное количество размещений страниц, вызванных разбиениями страниц выше конечного уровня. Применяется только к индексам B-дерева. 0 для кучи или индексов columnstore. |
leaf_page_merge_count |
bigint | Совокупное количество слияний страниц на конечном уровне. Всегда 0 для индексов columnstore. |
nonleaf_page_merge_count |
bigint | Совокупное количество слияний страниц выше конечного уровня. Применяется только к индексам B-дерева. 0 для кучи или индексов columnstore. |
range_scan_count |
bigint | Совокупное количество просмотров диапазонов и таблиц, запущенных на индексе или куче. |
singleton_lookup_count |
bigint | Совокупное количество извлечений одиночных строк из индекса или кучи. |
forwarded_fetch_count |
bigint | Число строк, выбранных через перенаправляющую запись. Применяется только к кучам, 0 для индексов дерева B. |
lob_fetch_in_pages |
bigint | Совокупное количество страниц больших объектов (LOB), полученных из LOB_DATA единицы выделения. Эти страницы содержат данные, хранящиеся в столбцах типа text, ntext, image, varchar(max), nvarchar(max), varbinary(max)xmlи json. Дополнительные сведения см. в разделе Типы данных (Transact-SQL). |
lob_fetch_in_bytes |
bigint | Совокупное количество извлеченных байтов данных LOB. |
lob_orphan_create_count |
bigint | Совокупное количество потерянных значений LOB, созданных для массовых операций. Применяется только к кучам и кластеризованным индексам B-дерева, 0 для некластеризованных и столбцов columnstore. |
lob_orphan_insert_count |
bigint | Совокупное количество потерянных значений LOB, вставленных во время массовых операций. Применяется только к кучам и кластеризованным индексам B-дерева, 0 для некластеризованных и столбцов columnstore. |
row_overflow_fetch_in_pages |
bigint | Совокупное количество страниц данных переполнения строк, полученных из ROW_OVERFLOW_DATA единицы выделения.Эти страницы содержат данные, хранящиеся в столбцах типа varchar(n), nvarchar(n)varbinary(n)и sql_variant для больших строк. |
row_overflow_fetch_in_bytes |
bigint | Совокупное количество извлеченных байтов, превышающих размер страницы данные строки. |
column_value_push_off_row_count |
bigint | Совокупное количество значений столбца для данных LOB и превышающих размер страницы данные строки, которые вытесняются из строки, чтобы вместить на странице вставленную или обновленную строку. |
column_value_pull_in_row_count |
bigint | Совокупное количество значений столбцов для данных LOB и превышающих размер страницы данные строки, которые помещаются в строку. Это происходит, когда операция обновления освобождает место в записи и предоставляет возможность извлекать одно или несколько внестроковых значений из LOB_DATAROW_OVERFLOW_DATA единиц распределения в единицу IN_ROW_DATA выделения. |
row_lock_count |
bigint | Совокупное количество запрошенных блокировок строк. |
row_lock_wait_count |
bigint | Совокупное количество раз, когда ядро СУБД ждали блокировки строки. |
row_lock_wait_in_ms |
bigint | Общее количество миллисекундах ядро СУБД ждали блокировки строки. |
page_lock_count |
bigint | Совокупное количество запрошенных блокировок страниц. |
page_lock_wait_count |
bigint | Совокупное количество раз, когда ядро СУБД ждал блокировку страницы. |
page_lock_wait_in_ms |
bigint | Общее количество миллисекунда ядро СУБД, ожидалось на блокировке страницы. |
index_lock_promotion_attempt_count |
bigint | Совокупное число попыток эскалации блокировки ядро СУБД. |
index_lock_promotion_count |
bigint | Совокупное количество раз, когда ядро СУБД эскалации блокировок. |
page_latch_wait_count |
bigint | Совокупное количество раз, когда ядро СУБД ждало получения блокировки. |
page_latch_wait_in_ms |
bigint | Совокупное число миллисекундах ядра СУБД ждало получения блокировки. |
page_io_latch_wait_count |
bigint | Совокупное число попыток ожидания ядра СУБД на вкладке ввода-вывода страницы. |
page_io_latch_wait_in_ms |
bigint | Совокупное количество миллисекундах ядро СУБД ожидалось на блоке ввода-вывода страницы. |
tree_page_latch_wait_count |
bigint | Подмножество page_latch_wait_count из этого включает только страницы верхнего уровня B-дерева. Всегда 0 для кучи или индекса columnstore. |
tree_page_latch_wait_in_ms |
bigint | Подмножество page_latch_wait_in_ms из этого включает только страницы верхнего уровня B-дерева. Всегда 0 для кучи или индекса columnstore. |
tree_page_io_latch_wait_count |
bigint | Подмножество page_io_latch_wait_count из этого включает только страницы верхнего уровня B-дерева. Всегда 0 для кучи или индекса columnstore. |
tree_page_io_latch_wait_in_ms |
bigint | Подмножество page_io_latch_wait_in_ms из этого включает только страницы верхнего уровня B-дерева. Всегда 0 для кучи или индекса columnstore. |
page_compression_attempt_count |
bigint | Количество страниц, которые были оценены для сжатия уровня PAGE для определенной секции таблицы, индекса или индексированного представления. Включает страницы, которые не были сжаты, так как не удалось достичь значительной экономии. Всегда 0 для индексов columnstore. |
page_compression_success_count |
bigint | Количество страниц данных, которые были сжаты с помощью сжатия PAGE для конкретной секции таблицы, индекса или индексированного представления. Всегда 0 для индексов columnstore. |
version_generated_inrow |
bigint | Совокупное количество версий в строке с полезными данными, созданными в куче или в дереве B для обновления, слияния или операции вставки над призраком. Версия в строке сохраняет старый образ строки (или дифф) непосредственно в строке, избегая поездки в хранилище версий. Это супермножество, включающее версии, которые учитываются insert_over_ghost_version_inrow. Дополнительные сведения о версиях в строке и вне строк см. в разделе "Пространство", используемое хранилищем постоянных версий (PVS). |
version_generated_offrow |
bigint | Совокупное количество версий, отправленных в хранилище вне строк для кучи, дерева B или бизнес-аналитики, обновления, слияния или операции вставки над призраком. Версия вне строки создается, когда старый образ строки не может храниться в строке. Это супермножество, включающее версии, подсчитываемые ghost_version_offrow и insert_over_ghost_version_offrow. |
ghost_version_inrow |
bigint | Совокупное количество раз удаления или обновления (выполняется как удаление, за которым следует вставка) помечает существующую строку как призрак с информацией о версиях в строке. Версия в строке сохраняет только метку времени транзакции и полезные данные нулевой длины, поэтому отмена удаления требует только unghosting этой строки. |
ghost_version_offrow |
bigint | Совокупное количество операций удаления или обновления (выполненное как удаление, за которым следует вставка), принудило существующие данные столбца строки или бизнес-столбца к хранилищу вне строк, оставив заглушку в строке для получения сведений о версиях. Этот счетчик увеличивается вместе с version_generated_offrow во время операций призрака. |
insert_over_ghost_version_inrow |
bigint | Совокупное количество версий в строке с полезными данными, созданными для операции вставки из дерева B-over-ghost. При вставке над призраком возникает, когда новая строка вставляется в слот ранее фантомной записи либо из явного удаления, за которым следует вставка, либо из обновления или слияния, реализованной как удаление, за которым следует вставка. Этот счетчик представляет собой подмножество version_generated_inrow. |
insert_over_ghost_version_offrow |
bigint | Совокупное количество раз, когда существующая строка призрака была отправлена в хранилище вне строк во время операции вставки из дерева B-over-ghost, оставив заглушку в только что вставленной строке для сведений о версиях. Этот счетчик представляет собой подмножество version_generated_offrow. |
Примечание.
В документации термин B-tree обычно используется в ссылке на индексы. В индексах rowstore ядро СУБД реализует дерево B+. Это не относится к индексам columnstore или индексам в таблицах, оптимизированных для памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.
Замечания
Эта функция не возвращает сведения об индексах в таблицах, оптимизированных для памяти. Сведения об индексах в таблицах, оптимизированных для памяти, см. в разделе sys.dm_db_xtp_index_stats (Transact-SQL).
Эта функция не принимает коррелированные параметры из CROSS APPLY и OUTER APPLY.
Вы можете отслеживать sys.dm_db_index_operational_stats статистику операций чтения и записи данных, а также блокировку, блокировку страниц и статистику блокировок ввода-вывода страниц для таблицы, индекса или секции. Вы можете определить таблицы, индексы и секции, которые сталкиваются со значительным действием или спором.
Статистика предоставляется на уровне секции и является аддитивной. Это означает, что можно получить статистику уровня индекса или таблицы, написав агрегатный запрос в T-SQL. Дополнительные сведения см. в разделе "Сканирование индекса" и поиск для всех примеров таблиц .
Чтобы проанализировать статистику операций чтения и записи для таблицы, индекса или секции, используйте следующие столбцы:
leaf_insert_countleaf_delete_countleaf_update_countleaf_ghost_countrange_scan_countsingleton_lookup_count
Чтобы определить конфликты с блокировкой, используйте следующие столбцы:
page_latch_wait_countpage_latch_wait_in_ms
Чтобы определить конфликт блокировки, используйте следующие столбцы:
row_lock_countpage_lock_countrow_lock_wait_in_mspage_lock_wait_in_ms
Чтобы проанализировать статистику физических операций ввода-вывода, используйте следующие столбцы:
page_io_latch_wait_countpage_io_latch_wait_in_ms
Примечания к столбцам
Значения в столбцах и lob_fetch_in_bytes могут быть больше нуля для некластеризованных индексовlob_fetch_in_pages, содержащих один или несколько столбцов бизнес-объектов, как включенные столбцы. Дополнительные сведения см. в разделе "Создание индексов с включенными столбцами". Аналогичным образом значения столбцов row_overflow_fetch_in_pages и row_overflow_fetch_in_bytes могут быть больше 0 для некластеризованных индексов, если индекс содержит большие строки.
Как счетчики в кэше метаданных сбрасываются
Данные, возвращаемые данными sys.dm_db_index_operational_stats , существуют только до тех пор, пока доступен объект кэша метаданных, представляющий кучу или дерево B-дерева. Эти данные не являются постоянными. Это означает, что эти счетчики нельзя использовать для окончательного определения того, использовался ли индекс или когда индекс был использован в последний раз. Вместо этого используйте sys.dm_db_index_usage_stats (Transact-SQL).
Значения для каждого числового столбца равны нулю, если метаданные для кучи или дерева B-данных будут доставлены в кэш метаданных. Статистика накапливается, пока объект кэша не будет удален из кэша метаданных. Активная куча или дерево B-дерева обычно содержит свои метаданные в кэше, а совокупные счетчики отражают действие после последнего запуска экземпляра ядра СУБД. Метаданные для менее активной кучи или дерева B-дерева могут перемещаться в кэш и из него, особенно если экземпляр ядра СУБД находится под давлением памяти. В результате статистика операций индексов иногда не отражается sys.dm_db_index_operational_stats. Такой подход используется нечасто.
Статистика удаляется из кэша и больше не сообщается этой функцией, если таблица или индекс удалены, или если секция усечена. Другие операции DDL с индексом могут привести к сбросу значения статистики до нуля.
Использование системных функций для указания значений параметров
Функции Transact-SQL можно использовать DB_ID и OBJECT_ID , чтобы указать значение для параметров database_id и object_id . Однако передавая значения, которые не допустимы для этих функций, можно получить неожиданные результаты. Всегда убедитесь, что допустимый идентификатор возвращается при использовании DB_ID или OBJECT_ID. Дополнительные сведения см. в разделе "Возвращаемые сведения" для указанной таблицы.
Разрешения
Необходимы следующие разрешения:
CONTROLразрешение на указанный объект в базе данныхVIEW DATABASE STATEилиVIEW DATABASE PERFORMANCE STATEразрешение на возврат сведений обо всех объектах в указанной базе данных, если значение@object_idне указано.VIEW SERVER STATEилиVIEW SERVER PERFORMANCE STATEразрешение на возврат сведений обо всех базах данных, если значение@database_idдля не указано.
VIEW DATABASE STATE Предоставление или VIEW SERVER PERFORMANCE STATE разрешение возврата всех объектов в базе данных независимо от каких-либо CONTROL разрешений, запрещенных для определенных объектов.
Запретить VIEW DATABASE STATE или VIEW SERVER PERFORMANCE STATE запретить возврат всех объектов в базе данных независимо от любых CONTROL разрешений, предоставленных для определенных объектов.
Дополнительные сведения см. в статье "Динамические административные представления и функции" (Transact-SQL).
Примеры
Возврат сведений для указанной таблицы
Следующий пример возвращает информацию по всем индексам и разделам Person.Address таблицы в базе данных AdventureWorks2025.
Внимание
При использовании функций DB_ID Transact-SQL и OBJECT_ID возврата значения параметра всегда убедитесь, что возвращается допустимый идентификатор. Если не удается найти имя базы данных или объекта, например, если они не существуют или неправильно написаны, обе функции возвращаются NULL. Функция sys.dm_db_index_operational_stats интерпретирует как подстановочное NULL значение, указывающее все базы данных или все объекты. Так как эта операция может быть непреднамеренной, примеры в этом разделе демонстрируют безопасный способ определения идентификаторов базы данных и объекта.
DECLARE @db_id int = DB_ID(N'AdventureWorks2025');
DECLARE @object_id 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;
Возврат сведений для всех таблиц и индексов
В следующем примере возвращаются сведения обо всех таблицах и индексах экземпляра ядра СУБД.
SELECT *
FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL);
Сканирование индекса и поиск для всех таблиц
В следующем примере данные уровня секции объединяются для возврата статистики поиска и сканирования индекса для всех таблиц в текущей базе данных.
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;
Связанный контент
- Динамические административные представления и функции (Transact-SQL)
- Индексы, связанные с динамическими административными представлениями и функциями (Transact-SQL)
- Наблюдение и настройка производительности
- 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.partitions (Transact-SQL)
- sys.indexes (Transact-SQL)