Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
База данных SQL в Microsoft Fabric
Возвращает доступ к данным нижнего уровня, блокировку и блокировку статистики для каждой секции таблицы или индекса в базе данных.
Соглашения о синтаксисе 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 }
)
Аргументы
{ database_id | NULL | 0 | DEFAULT }
Идентификатор базы данных.
database_id имеет небольшой размер. Допустимые входные данные — это идентификатор базы данных, NULL, 0, или DEFAULT. Значение по умолчанию — 0.
NULL, 0и DEFAULT эквивалентны значениям в этом контексте.
Укажите NULL возвращаемые сведения для всех баз данных в экземпляре SQL Server. При указании NULL database_id необходимо также указать для NULL, index_id и partition_number.
Можно указать встроенную функцию DB_ID .
{ object_id | NULL | 0 | DEFAULT }
Идентификатор объекта таблицы или представления индекса включен. object_id имеет значение int.
Допустимые входные данные — это идентификатор таблицы и представление, NULL, 0, или DEFAULT. Значение по умолчанию — 0.
NULL, 0и DEFAULT эквивалентны значениям в этом контексте.
Укажите NULL возвращаемую информацию для всех таблиц и представлений в указанной базе данных. Если вы указываете NULL для object_id, необходимо также указать для NULL и partition_number.
{ index_id | 0 | NULL | -1 | DEFAULT }
Идентификатор индекса.
index_id — это интеллект. Допустимые входные данные — это идентификаторный номер индекса, 0 если object_id — куча, NULL, -1, или DEFAULT. Значение по умолчанию — -1.
NULL, -1и DEFAULT эквивалентны значениям в этом контексте.
Укажите NULL , чтобы возвращать сведения для всех индексов базовой таблицы или представления. Если вы указываете NULL для index_id, необходимо также указать для partition_numberNULL.
{ partition_number | NULL | 0 | DEFAULT }
Номер секции в объекте.
partition_numberint. Допустимые входные данные — это partition_number индекса или кучи, NULL, 0или DEFAULT. Значение по умолчанию — 0.
NULL, 0и DEFAULT эквивалентны значениям в этом контексте.
Укажите NULL , чтобы возвращать информацию для всех разбиений индекса или кучи.
partition_number основан на 1. Непартиментный индекс или куча имеет значение 1 partition_number.
Таблица возвращена
| Название столбца | Тип данных | Описание |
|---|---|---|
database_id |
smallint | Идентификатор базы данных. В База данных SQL Azure значения уникальны в одной базе данных или эластичном пуле, но не в логическом сервере. |
object_id |
int | Идентификатор таблицы или представления. Для получения дополнительной информации смотрите sys.objects. |
index_id |
int | Идентификатор индекса или кучи. Для получения дополнительной информации смотрите sys.indexes. |
partition_number |
int | Номер секции внутри индекса или кучи (нумерация начинается с 1). Для получения дополнительной информации см. sys.partitions. |
hobt_id |
bigint | Идентификатор кучи данных или набора строк B-дерева, который отслеживает внутренние данные для индекса columnstore.NULL - Это не внутренний набор строк Columnstore.Дополнительные сведения см. в sys.internal_partitions. |
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. Дополнительные сведения см. в разделе Типы данных. |
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. |
compaction_attempt_count |
bigint | Совокупное количество попыток автоуплотнения индекса. Для получения дополнительной информации см. раздел Автоматическое уплотнение индекса (предварительный просмотр). |
compaction_complete_count |
bigint | Совокупное количество завершённых индексных автоуплотнений. |
compaction_skip_count |
bigint | Совокупное количество пропущенных индексных автоуплотнений. Для получения дополнительной информации о причинах пропуска см. раздел «Использовать расширенное событие для мониторинга статистики уплотнения». |
compaction_ineligible_count |
bigint | Совокупное количество попыток уплотнения было пропущено, потому что страница не подпадала для автоуплотнения. |
compaction_failure_count |
bigint | Совокупное количество неудачных попыток уплотнения. |
compaction_row_move_count |
bigint | Накопленное количество строк перемещалось с одной страницы на другую в рамках автоуплотнения. |
compaction_page_deallocation_count |
bigint | Совокупное количество страниц, которые были сняты после переноса всех строк на другую страницу. |
Note
В документации термин B-tree обычно используется в ссылке на индексы. В индексах rowstore ядро СУБД реализует дерево B+. Это не относится к индексам columnstore или индексам в таблицах, оптимизированных для памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.
Замечания
Эта функция не возвращает сведения об индексах в таблицах, оптимизированных для памяти. Для информации об индексах в таблицах, оптимизированных по памяти, см. sys.dm_db_xtp_index_stats.
Эта функция не принимает коррелированные параметры из 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_pages могут быть больше нуля для некластеризованных индексовlob_fetch_in_bytes, содержащих один или несколько столбцов бизнес-объектов, как включенные столбцы. Дополнительные сведения см. в разделе "Создание индексов с включенными столбцами". Аналогичным образом значения столбцов row_overflow_fetch_in_pages и row_overflow_fetch_in_bytes могут быть больше 0 для некластеризованных индексов, если индекс содержит большие строки.
Как счетчики в кэше метаданных сбрасываются
Данные, возвращаемые данными sys.dm_db_index_operational_stats , существуют только до тех пор, пока доступен объект кэша метаданных, представляющий кучу или дерево B-дерева. Эти данные не являются устойчивыми. Это означает, что вы не можете использовать эти счётчики для однозначного определения, использовался ли индекс или когда он был использован в последний раз. Вместо этого используйте sys.dm_db_index_usage_stats.
Значения для каждого числового столбца равны нулю, если метаданные для кучи или дерева B-данных будут доставлены в кэш метаданных. Статистика накапливается, пока объект кэша не будет удален из кэша метаданных. Активная куча или дерево B-дерева обычно содержит свои метаданные в кэше, а совокупные счетчики отражают действие после последнего запуска экземпляра ядра СУБД. Метаданные для менее активной кучи или B-дерева могут перемещаться в кэш и из него при использовании, особенно если экземпляр ядро СУБД находится под давлением памяти. В результате статистика операций индексов иногда не отражается sys.dm_db_index_operational_stats. Это нетипично.
Статистика удаляется из кэша и больше не сообщается этой функцией, если таблица или индекс удалены, или если секция усечена. Другие операции DDL с индексом могут привести к сбросу значения статистики до нуля.
Использование системных функций для указания значений параметров
Функции Transact-SQL можно использовать DB_ID и OBJECT_ID , чтобы указать значение для параметров database_id и object_id . Однако передача некорректных значений этим функциям может привести к нежелательным последствиям. Всегда убедитесь, что допустимый идентификатор возвращается при использовании DB_ID или OBJECT_ID. Дополнительные сведения см. в разделе "Возвращаемые сведения" для указанной таблицы.
Permissions
Необходимы следующие разрешения:
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 разрешений, предоставленных для определенных объектов.
Для получения дополнительной информации см. Режимы и функции управления динамикой системы.
Examples
Возврат сведений для указанной таблицы
Следующий пример возвращает информацию по всем индексам и разделам Person.Address таблицы в базе данных AdventureWorks2025.
Это важно
Когда вы используете функции DB_ID Transact-SQL и OBJECT_ID возвращаете значение параметра, всегда убедитесь, что возвращается действительный идентификатор. Если не удается найти имя базы данных или объекта, например, если они не существуют или неправильно написаны, обе функции возвращаются NULL. Функция sys.dm_db_index_operational_stats интерпретирует как подстановочное NULL значение, указывающее все базы данных или все объекты. Так как эта операция может быть непреднамеренной, примеры в этом разделе демонстрируют безопасный способ определения идентификаторов базы данных и объекта.
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;
Возврат сведений для всех таблиц и индексов
В следующем примере возвращаются сведения обо всех таблицах и индексах экземпляра ядра СУБД.
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)
- Наблюдение и настройка производительности
- 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)