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

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

適用:Windows Server 2012 R2
原始 KB 編號: 3149779

摘要

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

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

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

本文中討論的登錄機碼應該只套用至遇到「徵兆」一節所述之問題之 LDS (LDS) 伺服器 (DC) 和輕量型目錄服務的域控制器。 此問題可能會發生在 Windows Server 2012、Windows Server 2012 R2 和 Windows Server 2016 DC 上。 遵循此處提供的建議,您可能會降低 Active Directory 複寫效能,但提高正確處理這類大型物件刪除的可靠性。

徵狀

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

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

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

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

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

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

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

    Hex 小數 符號 友好
    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
Elapsed Time (secs) : 11
使用者動作
看到此延遲的常見原因是這個物件特別大,不論是其值的大小,還是值的數目。 您應該先考慮是否可以變更應用程式,以減少儲存在對象上的數據量或值數目。 如果這是大型群組或通訊組清單,您可以考慮將樹系功能等級提升至 Windows Server 2003 或更高版本,因為這可讓復寫更有效率地運作。 您應該評估伺服器平臺在記憶體和處理能力方面是否提供足夠的效能。 最後,您可以考慮將資料庫和記錄移至不同的磁碟分區,以調整 Active Directory 網域服務 資料庫。
如果您想要變更警告限制,登錄機碼會包含在下方。 值為零會停用檢查。
其他資料
Warning Limit (secs) : 10
限制登錄機碼:System\CurrentControlSet\Services\NTDS\Parameters\Replicator 更新物件的最大等候 (秒)
記錄檔名稱:目錄服務
來源: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,以改善已啟用回收站的樹系中取消刪除的效能。
  • 檢查 Links 進程批次大小 參數的值。 如果不預設,請將值設回預設值,或甚至是較小的值,例如 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
類型:D WORD
最小值:100
最大值:10000

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

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

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

因應措施

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

資料收集

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

參考資料

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