2010-11-28 21 views
0

パフォーマンスの最適化として、データベースに対してインデックス再構築を行いました。sqlエージェントジョブの結果を.csvファイルにエクスポートします。

私は@テーブルREBUILD WITH(FILLFACTOR = @fillfactor)でALTER TABLE ALLを使用しました。

私はこれをエージェントジョブとしてスケジュールしたいと思います。私は、インデックス

  • は、後にCSVファイルにインデックスにインデックス輸出の

  • 統計情報を再構築再構築する前に、CSVファイルにインデックスの統計情報をエクスポートする必要があり

    1. として今私の要件インデックスの再構築。

    私はエージェントジョブでリビルドインデックススクリプトをパレットにしました。インデックスジョブの前後のステータスを見るためにインデックス統計クエリを手動で実行しました。

    は、どのように私はrebuiling後

  • 統計情報を再構築
  • を再構築する前に、

    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

    うーん、あなたはprocのにスクリプトのSQLを置く場合は、次にようになります第二PROCを書くことができsp_IndexStatsと呼ば:

    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

    は、私が作成した、ありがとう1つのSSISパッケージを変更して問題を解決しましたが、あなたのソリューションは実装したものよりもはるかに簡単ですが、アプローチにはパフォーマンスの問題はありませんが、アプローチが私に影響を与えました。ありがとう – prav

    関連する問題