問題現象:
1. 重建索引耗時400秒時,會產生大約3GB的日誌,同時日誌讀取器報錯“The process could not execute sp_replcmds on 'servername' ”。
這種情況連續出現了三次,重建索引耗時、日誌大小、日誌讀取器報錯併發概率爲100%。
2. 重新組織索引耗時800秒,產生了大約9GB的日誌,但日誌讀取代理並沒有報錯。
這種情況只連續出現了一次,重建索引耗時、日誌大小、日誌讀取器沒有報錯併發概率爲100%。
由於發生的次數比較少,目前並不能說明什麼問題。
如果這兩種現象有規律的出現,大膽假設以下:
重建索引長時間鎖定了部分資源,造成日誌讀取器報錯。由於日誌讀取器只讀取COMMIT的事務,而且像重建索引這類事務也是不會讀取的。重建索引能影響到複製發佈說明是在日誌讀取器解析日誌的時候出現的問題。這就產生一個新的問題,日誌讀取器什麼時候解析日誌?是在COMMIT之前?還是之後?
假設:
當重建索引或組織索引的事務完成後,日誌讀取器纔開始解析日誌。但這一邏輯和“重新組織索引耗時800秒,產生了大約9GB的日誌,但日誌讀取代理並沒有報錯。”的現象相違背。重新組織索引產生了更多的日誌,但日誌讀取器並沒有報錯,這應當說明解析工作是在COMMIT之前就開始了,可能是重建索引長時間鎖定相關的資源,或則解析超時,從而造成解析工作失敗。
複製日誌讀取代理參數:
ReadBatchSize:500
QueryTimeout:300
解決辦法參考:
http://support.microsoft.com/kb/811030
爲什麼重建會出錯,而組織不會出錯?
應當是重建是作爲一個事務運行,而組織是當作許多連續的小事務運行的。
處理方法:調整參數
ReadBatchSize:100
QueryTimeout:1000
結果:暫時沒有出現這個ERROR message。