2010-11-28 79 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