none
請問有關重建索引的相關問題 RRS feed

  • 問題

  • 請問各位前輩,為甚麼重建或是重整會產生大量交易紀錄檔呢?如果我的DB是7*24的若索引需要重建或是重整但是空間又是有限的除了停機外,還有其他做法嗎?
    2012年10月9日 上午 02:26

解答

  • Stopping sql doesn't help, you can reindex for one table then backup log. Or set db to bulklogged recovery mode before reindex.

    2012年10月9日 上午 03:30
  • n SQL Server 2005, all index rebuild operations use minimal logging. This means only page allocations are logged, instead of all row inserts into the new index. This drastically reduces the amount of transaction log records generated by the index rebuild operation. It also means the transaction log file itself doesn’t have to be as large (because it doesn’t have to accommodate a fully logged index-rebuild operation). This behavior only occurs when using the bulk-logged or simple recovery models. All operations are fully logged in the full recovery model—hence the name. The exception was online index operations, which used minimal logging even in the full recovery model.

    所以如果你觉得日志增长过快可以考虑将数据库恢复模式变为BULK-LOGGED。或者增加SQL Server 日志的备份频率,这样也可以减小日志的增长。 


    2012年10月12日 下午 01:49
  • 重建索引本來就會產生大量的交易記錄檔,而且大小將比你原本索引大小來的還要大,例如所以大小5GB,那麼執行重建索引將需要大於5GB的交易記錄檔空間,這是因為重建索引是會重新分配頁面,並且只使用單一交易來處理該作業,重建過程中,SQL SERVER還得預防未知錯誤(如停電)所造成作業失敗,所以又需要一些空間來存放相關操作紀錄(確保可以完整rollback)。

    我個人作法是盡量不重建索引(只重新組織索引),因為我正示環境未了要減少資料遺失的風險,我不太可能去變更資料庫復原模式為simple or bulk logged,所以我也只能在FULL模式下來執行這樣的操作,但這樣的前提就是你的交易記錄檔成長大小和一開始大小就需要合理的規劃和考量...


    保證解答-微軟技術支援服務

    2012年10月16日 上午 09:38
    版主

所有回覆

  • Stopping sql doesn't help, you can reindex for one table then backup log. Or set db to bulklogged recovery mode before reindex.

    2012年10月9日 上午 03:30
  • 不曉得你的SQL Server是哪個版本,或許你可以利用線上執行索引作業來降低維護索引時,對使用者的影響。

    http://technet.microsoft.com/zh-tw/library/ms177442(v=sql.105).aspx


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔

    2012年10月9日 下午 04:01
    版主
  • n SQL Server 2005, all index rebuild operations use minimal logging. This means only page allocations are logged, instead of all row inserts into the new index. This drastically reduces the amount of transaction log records generated by the index rebuild operation. It also means the transaction log file itself doesn’t have to be as large (because it doesn’t have to accommodate a fully logged index-rebuild operation). This behavior only occurs when using the bulk-logged or simple recovery models. All operations are fully logged in the full recovery model—hence the name. The exception was online index operations, which used minimal logging even in the full recovery model.

    所以如果你觉得日志增长过快可以考虑将数据库恢复模式变为BULK-LOGGED。或者增加SQL Server 日志的备份频率,这样也可以减小日志的增长。 


    2012年10月12日 下午 01:49
  • 重建索引本來就會產生大量的交易記錄檔,而且大小將比你原本索引大小來的還要大,例如所以大小5GB,那麼執行重建索引將需要大於5GB的交易記錄檔空間,這是因為重建索引是會重新分配頁面,並且只使用單一交易來處理該作業,重建過程中,SQL SERVER還得預防未知錯誤(如停電)所造成作業失敗,所以又需要一些空間來存放相關操作紀錄(確保可以完整rollback)。

    我個人作法是盡量不重建索引(只重新組織索引),因為我正示環境未了要減少資料遺失的風險,我不太可能去變更資料庫復原模式為simple or bulk logged,所以我也只能在FULL模式下來執行這樣的操作,但這樣的前提就是你的交易記錄檔成長大小和一開始大小就需要合理的規劃和考量...


    保證解答-微軟技術支援服務

    2012年10月16日 上午 09:38
    版主