我是扩展活动的新手,但是,通过阅读类似这样的一些文章,我了解了这一点
我的问题:事件库中是否有任何事件可以用来识别 Fragmented Index ?
因为我只有
我正在使用 SQL Server 2014。
提前致谢
我是扩展活动的新手,但是,通过阅读类似这样的一些文章,我了解了这一点
我的问题:事件库中是否有任何事件可以用来识别 Fragmented Index ?
因为我只有
我正在使用 SQL Server 2014。
提前致谢
不是直接的。当索引的物理顺序与逻辑顺序不匹配时,就会出现碎片。当需要将数据放在没有空间的页面上时,就会发生这种情况,从而导致页面拆分。有一个页面拆分事件。但是,在一般情况下,我不会使用它来跟踪碎片。该事件更多地用于跟踪一次性操作的活动。如果要查看碎片,请查看 sys.dm_db_index_physical_stats。
要添加到@Ben Thuls的答案,您可以使用扩展事件跟踪页面拆分,从而间接跟踪碎片。查看Paul Randal 的这篇很棒的文章以熟悉 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';