【发布时间】:2016-12-22 15:36:21
【问题描述】:
我是扩展活动的新手,但是通过阅读 this one 之类的一些文章我了解了这一点
我的问题:事件库中是否有任何事件可以用来识别碎片索引?
因为我只有一个
我使用的是 SQL Server 2014。
提前致谢
【问题讨论】:
标签: sql-server extended-events
我是扩展活动的新手,但是通过阅读 this one 之类的一些文章我了解了这一点
我的问题:事件库中是否有任何事件可以用来识别碎片索引?
因为我只有一个
我使用的是 SQL Server 2014。
提前致谢
【问题讨论】:
标签: sql-server extended-events
不直接。当索引的物理顺序与逻辑顺序不匹配时,就会出现碎片。而 that 发生在需要将数据放在没有空间的页面上,从而导致页面拆分。有一个页面拆分事件。但是,在一般情况下,我不会使用它来跟踪碎片。该事件更多地用于跟踪一次性操作的活动。如果要查看碎片,请查看 sys.dm_db_index_physical_stats。
【讨论】:
要添加到@Ben Thuls 的答案,您可以使用扩展事件跟踪页面拆分,从而间接跟踪碎片。查看 this 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';
【讨论】: