作为性能优化,我在数据库上进行了索引重建。
我在@table REBUILD上使用了ALTER TABLE ALL(FILLFACTOR = @fillfactor)。
我想将此作为代理工作安排。
现在我的要求为:
我需要在重建索引之前将索引统计信息导出到csv文件
重建索引
重建索引后索引导出到csv文件的统计信息。
我在代理作业中找到了重建索引脚本,并且我手动执行了索引统计信息查询,以查看代理作业之前和之后的状态。
我如何自动化
的过程我正在使用此脚本进行统计。
DECLARE @DATABASE VARCHAR(10)= 'AdventureWorksDW2008'
SELECT OBJECT_NAME(IPS.OBJECT_ID) AS [TABLENAME],
SI.NAME AS [INDEXNAME],
IPS.INDEX_TYPE_DESC,
IPS.AVG_FRAGMENTATION_IN_PERCENT,
IPS.AVG_FRAGMENT_SIZE_IN_PAGES,
IPS.AVG_PAGE_SPACE_USED_IN_PERCENT,
IPS.RECORD_COUNT,
IPS.GHOST_RECORD_COUNT,
IPS.FRAGMENT_COUNT,
IPS.AVG_FRAGMENT_SIZE_IN_PAGES
FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(N''+ @DATABASE +''), NULL, NULL, NULL , 'DETAILED') IPS
JOIN SYS.TABLES ST WITH (NOLOCK) ON IPS.OBJECT_ID = ST.OBJECT_ID
JOIN SYS.INDEXES SI WITH (NOLOCK) ON IPS.OBJECT_ID = SI.OBJECT_ID AND IPS.INDEX_ID = SI.INDEX_ID
WHERE ST.IS_MS_SHIPPED = 0
ORDER BY 1,5
并用于重建。
ALTER TABLE ALL ON @table REBUILD WITH (FILLFACTOR = @fillfactor).
感谢 prav
答案 0 :(得分:1)
嗯,如果你把你的脚本sql放到一个名为sp_IndexStats的proc中,那么你可以编写一个看起来像这样的第二个proc:
EXEC master..xp_cmdshell 'osql.exe -S YourServerName -U sa -P yourpassword -Q "EXEC sp_IndexStats" -o "C:\mypath\IndexBefore.csv"'
GO
ALTER TABLE ALL ON @table REBUILD WITH (FILLFACTOR = @fillfactor)
GO
EXEC master..xp_cmdshell 'osql.exe -S YourServerName -U sa -P yourpassword -Q "EXEC sp_IndexStats" -o "C:\mypath\IndexAfter.csv"'