2016-08-16 2 views
1

Я новичок в расширенных событий, однако, я должен знать о том же, прочитав несколько статей, как this oneЕсть ли какие-либо события в библиотеке событий, с помощью которых мы можем идентифицировать фрагментированный индекс с помощью расширенных событий?

Мой вопрос: Есть ли какое-либо событие в библиотеке событий, с помощью которого мы можем определить индекс фрагментирован?

Потому что я получил только

enter image description here

Я использую SQL Server 2014

Спасибо заранее

ответ

2

не напрямую. Фрагментация существует, когда физический порядок индекса не соответствует логическому порядку. И , что происходит, когда есть необходимость поместить данные на страницу, для которой нет места, что вызывает разделение страницы. Для разбиения страницы есть событие. Однако я бы не использовал его для отслеживания фрагментации в общем случае. Событие больше для отслеживания активности для одноразовых операций. Если вы хотите посмотреть на фрагментацию, посмотрите на sys.dm_db_index_physical_stats.

1

Чтобы добавить к ответу @Ben Thuls, вы можете отслеживать разрывы страниц с использованием расширенных событий и, таким образом, отслеживать фрагментацию косвенно. Проверьте this удивительную статью Пола Рэндал, чтобы ознакомиться с работой журнала LOP_DELETE_SPLIT, а затем создать сеанс, который будет выглядеть так:

CREATE EVENT SESSION [Page Splits] ON SERVER 
ADD EVENT sqlserver.transaction_log(SET collect_database_name = 1 
    WHERE (operation = $LOP_DELETE_ID$)) --LOP_DELETE_SPLIT* 
ADD TARGET package0.event_file(SET FILENAME = N'PageSplitsOutput.xel',MAX_FILE_SIZE = 200, MAX_ROLLOVER_FILES = 2, INCREMENT = 20) 
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0  KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF); 
GO 

и заполнить $LOP_DELETE_ID$ с результатом от этого:

SELECT * 
FROM sys.dm_xe_map_values 
WHERE name = 'log_op' 
AND map_value = 'LOP_DELETE_SPLIT';