共用方式為


刪除有許多連結的 Active Directory 物件會導致復寫失敗

本文針對刪除包含許多轉寄連結的 Active Directory 物件時所發生的問題提供因應措施。

原始 KB 編號: 3149779

摘要

本文討論刪除包含許多轉寄連結的 Active Directory 物件時所發生的問題。 以下是一些常見的範例:

  • 群組成員資格(成員屬性)
  • 漫遊使用者認證 (ms-PKI-AccountCredentials 屬性)
  • 唯讀域控制器 (RODC) 公開的使用者連結 (mds-revealedusers 屬性)

您開始看到問題的連結數目可能高達 50,000。 在單一物件上,可能會有數百萬個連結。

本文所討論的登錄機碼應該僅適用於遇到「徵兆」一節中所述問題的域控制器(DC)和輕量型目錄服務(LDS)伺服器。 依照此處提供的建議,您可以降低 Active Directory 複寫效能,但提高正確處理這類大型物件刪除的可靠性。

徵兆

當您刪除包含許多轉寄連結的 Active Directory 物件時,可能會遇到復寫失敗。 例如,您可以刪除具有大型成員資格集合的群組,或降級,然後刪除具有許多連結的 RODC 計算機帳戶,這些帳戶具有在 RODC 上公開其密碼的用戶帳戶。

下列條件是此解決方案套用至問題的關鍵指標:

  • 樹系功能等級是 Windows Server 2003 或更新版本的 Windows Server,因此會使用連結值復寫。

  • 事件 2094(複寫延遲)發生數次,參考相同的已刪除物件。

  • 事件 1083 和 1955(寫入衝突)會與參考相同已刪除物件的 2094 事件記錄相近的時間記錄。

  • 受影響的域控制器 (DC) 也可能報告版本存放區已耗盡 (事件標識碼 623)。 在此案例中,版本存放區的耗盡並不一定會發生。 增加版本存放區耗盡的可能性其他因素包括 Active Directory 物件的變更率很高,包括本機和複寫,以及其他長時間執行的作業,例如深層查詢。

  • Active Directory 複寫失敗,錯誤為 8409、錯誤「發生資料庫錯誤」,或其他事件會引用下表所述的相關狀態代碼:

    Hex Decimal 符號 易記
    000020D9 8409 ERROR_DS_DATABASE_ERROR 發生資料庫錯誤

    如果已啟用 Active Directory 回收站,在刪除對象之後,複寫錯誤可能不會發生 60 到 180 天(已刪除的物件存留期)。 當物件從已刪除狀態轉換為回收狀態時,就會發生問題。

事件記錄檔專案

發生問題時,會記錄下列事件:

記錄檔名稱:目錄服務
來源:Microsoft-Windows-ActiveDirectory_DomainService
事件標識碼:2094
工作類別:複寫
層級:警告
關鍵字:傳統
描述:效能警告:將變更套用至下列物件時,複寫已延遲。 如果此訊息經常發生,表示復寫發生速度緩慢,而且伺服器可能難以跟上變更。
物件 DN: <物件名稱>
物件 GUID: <物件 GUID>
分割區 DN:DC=contoso,DC=com
伺服器:xxxx-xxxx-xxxx-xxxx-xxxxxxx._msdcs.contoso.com
經過時間(秒):11
使用者動作
看到此延遲的常見原因是,此物件的大小、其值大小或值數目特別大。 您應該先考慮是否可以變更應用程式,以減少儲存在 對象上的數據量,或值數目。 如果這是大型群組或通訊組清單,您可能會考慮將樹系功能等級提升為 Windows Server 2003 或更新版本,因為這可讓復寫更有效率地運作。 您應該評估伺服器平臺是否在記憶體和處理能力方面提供足夠的效能。 最後,您可以將資料庫和記錄移至不同的磁碟分區,以考慮調整 Active Directory 網域服務 資料庫。
如果您想要變更警告限制,登錄機碼會包含在下方。 值為零將會停用檢查。
其他資料
警告限制 (秒): 10
限制登錄機碼:System\CurrentControlSet\Services\NTDS\Parameters\Replicator 等候更新物件上限 (secs)
記錄檔名稱:目錄服務
來源:Microsoft-Windows-ActiveDirectory_DomainService
事件標識碼:1083
工作類別:複寫
層級:警告
關鍵字:傳統
描述:
Active Directory 網域服務 無法更新下列對象,因為 Active Directory 網域服務 處理資訊忙碌中,所以從下列網路位址的目錄服務收到的變更。
物件: <物件名稱>
網路位址:xxxxx-xxxx-xxxx-xxxx-xxxxxxx._msdcs.contoso.com
稍後會再次嘗試此作業。
記錄檔名稱:目錄服務
來源:Microsoft-Windows-ActiveDirectory_DomainService
事件標識碼:1955
工作類別:複寫
等級:資訊
關鍵字:傳統
使用者:匿名登入
描述:將復寫的變更套用至下列物件時,Active Directory 網域服務 發生寫入衝突。
物件: <物件名稱>
秒為單位的時間:48
這個專案前面的事件記錄檔專案會指出是否已接受更新。
寫入衝突可能是同時變更相同物件,或同時變更參考這個物件之屬性的其他物件所造成。 當物件代表具有許多成員的大型群組,且樹系的功能等級設定為Windows 2000 時,通常會發生這種情況。 此衝突觸發了更新的其他重試。 如果系統看起來很慢,可能是因為發生這些變更的複寫。
使用者動作
針對這項作業使用較小的群組,或將樹系功能等級提升為 Windows Server 2003。

其他相關資訊

根據預設,當您刪除具有異常大量向前和回溯連結的 Active Directory 物件時,會一次刪除 10,000 個連結。 在此期間,如果其他線程更新這些鏈接的目標物件,則會暫停鏈接刪除交易,直到物件再次可用為止。 此暫停可能會導致整個刪除交易需要很長的時間才能完成。 在此期間,此長時間執行的工作會保留其他複寫工作。 例如,您可能會注意到密碼和群組成員資格更新不會在整個樹系中進行。

當此更新擱置時,系統管理員可能會看到寫入衝突和交易失敗事件。 此外,由於復寫會處理其他物件,因此會配置越來越多的版本存放區,因為擱置的大型交易在刪除交易完成之前不會釋放其配置的版本存放區。 這可能會導致版本存放區錯誤和復寫警告事件。

注意

  • 垃圾收集與處理群組成員資格連結刪除無關。
  • 減少 TSL 不是加速連結刪除的有效方法。
  • 鏈接進程批次大小的舊版值在 Windows Server 2008 R2 之前的版本為 1,000。 在更新版本中,批次大小會增加到10,000,以改善已啟用回收站之樹系中未刪除的效能。
  • 檢查連結進程批次大小參數的值。 如果是非預設值,請將值設定回其預設值,或將值設定為較小的值,例如 1,000 或 100。

較小的值會藉由刪除每個刪除的較小物件數目來減少版本存放區使用量,藉此減少執行單一刪除交易的總時間。 這具有減少版本存放區和寫入衝突時間範圍的積極副作用,同時增加正確反映目錄中群組成員資格所需的時間。

Active Directory 服務會檢查下列登錄機碼。

針對 AD DS:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Links process batch size

針對 AD LDS:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<adam instance>\Parameters\Links process batch size
類型: DWORD
最小值:100
最大值:10000

此值會覆寫預設值 10,000,做為一次處理不可部分完成的連結數目。 您不需要重新啟動 NTDS 或 LDS 實例服務,或重新啟動電腦,讓設定生效。

在每個不可部分完成的作業之後,就會釋放對應的版本存放區。 只有在繼續處理相同物件的下一個不可部分完成作業期間,才會重新取得版本存放區。 您可能對大幅關閉連結批次大小有第二個想法。 您可以將它與增加 ESE 版本存放區結合。 如果可能基於您增加版本存放區的原因,您可能會決定增加版本存放區一些或更多,或不會減少 連結程式批次大小 值這麼多。

如需詳細資訊,請參閱下列文章:

因應措施

若要解決此問題,請將鏈接進程批次大小的值設定為小於 10,000。 這樣可減少發生物件存取衝突的可能性。 如此一來,您就可以讓大型物件刪除的複寫程式更加可靠。 此外,現在完成整個交易需要較長的時間。 這也有助於避免版本存放區耗盡。

資料收集

如果您需要Microsoft支援方面的協助,建議您遵循使用 TSS 收集 Active Directory 複寫問題的資訊中所述的步驟來收集資訊。

參考資料

如需詳細資訊,請參閱下列文章: