2010-11-28 101 views
0

作为性能优化,我做了索引重建数据库。将sql代理作业结果导出到.csv文件

我用ALTER TABLE ALL ON @table REBUILD WITH(FILLFACTOR = @fillfactor)。

我想将此作为代理工作安排。

现在,我的要求是:

  1. 我需要重建索引

  2. 重建索引的索引出口

  3. 统计到CSV文件后,之前的索引统计信息,以CSV文件导出重建索引。

我重复了代理作业中的重建索引脚本,并且我手动执行了索引统计查询以查看代理作业前后的状态。

怎么办,我需要重建

  • 后的重建重建
  • 统计之前的

    1. 指数统计过程自动化。

    我正在使用此脚本进行统计。

    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

  • 回答

    1

    嗯,如果你把你的脚本的SQL到一个进程叫sp_IndexStats然后你可以编写一个看起来像第二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"' 
    
    +0

    谢谢你,我创建一个SSIS包以一种交替的方式,它已经解决了这个问题,但是你的解决方案比我实现的要简单得多,但是在方法中没有性能问题,但是你的方法激励了我。谢谢 – prav 2010-11-29 03:54:25