Active directory garbage collection failure on PDCe

Ayu Lestari 20 Reputation points
2026-08-06T02:00:29.2666667+00:00

I once ran into a tricky situation where the Active Directory garbage collection process simply refused to execute on our Primary Domain Controller Emulator (PDCe). Normally, this task cleans up tombstoned objects after the 180‑day lifetime, but in our case, those deleted objects just sat there, lingering far beyond their expected expiration. It quickly became clear that replication health wasn’t the issue the garbage collection routine itself wasn’t firing. That left us with a directory cluttered with stale tombstones, which could eventually cause inconsistencies. To get things back under control, we had to look at ways to manually trigger the garbage collection task using ldp.exe, ensuring the cleanup ran as intended and the environment stayed healthy.

Windows for business | Windows 365 Business
0 comments No comments

1 answer

Sort by: Most helpful
  1. Domic Vo 28,760 Reputation points Independent Advisor
    2026-08-06T05:20:42.34+00:00

    Hello,

    What you encountered is a rare but documented situation where the Active Directory garbage collection process does not automatically trigger on the PDCe. Normally, the Directory System Agent (DSA) runs garbage collection every 12 hours to purge tombstoned objects past their tombstoneLifetime (default 180 days). If that cycle stalls, stale objects remain and can eventually cause replication inconsistencies or bloated database size.

    The most reliable way to force garbage collection is to use ldp.exe against the affected domain controller. Connect to the DC, bind with appropriate credentials, and then navigate to Browse > Object. Target the root of the domain naming context, and under Controls, enable the "Return Deleted Objects" control. Once bound, you can issue a StartGC extended operation. This forces the DSA to immediately run garbage collection rather than waiting for the scheduled interval.

    If ldp.exe does not expose the extended operation cleanly, you can also trigger garbage collection by restarting the NTDS service (net stop ntds followed by net start ntds) or rebooting the DC, since garbage collection runs at service startup. However, this is more disruptive, so ldp.exe is the preferred method.

    It’s also worth checking the registry key under HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters for any custom values that might be interfering with the garbage collection schedule. Specifically, confirm that GarbageCollPeriod is not set to an abnormally high value. If it exists, the value is in hours, and the default is 12. Resetting it to 12 or removing the key entirely will restore default behavior.

    Finally, ensure that the event logs under Directory Service show Event ID 1646 (garbage collection started) and 1647 (garbage collection completed). If those are missing, it confirms the process isn’t firing. After forcing GC, you should see those events logged.

    I hope you've found something useful here. If it helps you get more insight into the issue, it's appreciated to accept the answer. Should you have more questions, feel free to leave a message. Have a nice day!

    DV.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.