Hola a todos,
En la entrada de hoy en el Blog vamos a hablar de como desfragmentar (compactar) nuestra base de datos de AD DS de manera offline, sin necesidad de reiniciar el Controlador de dominio, aunque yo diría que más que centrarnos en como hacer la defragmentation, vamos a incidir más en algo que que está muy poco documentado, y es en CUANDO hacerlo, lo interesante sería tener constancia previa de cuanto espacio ganaríamos compactando nuestra base de datos, ¿verdad?, pues hay un procedimiento para que el sistema nos informe de cuanto ocupa nuestra base de datos de AD, y cuanto espacio está libre en realidad de todo lo ocupado, que sería la parte que se liberaría.
Esta tarea entraría en las denominadas “Tareas de mantenimiento de nuestro Directorio Activo” aunque sinceramente hay entornos en los cuales no es necesario llevarlo a cabo, y otros en los que si.
Un poco de historia respecto a la base de datos NTDS.DIT
Dentro del funcionamiento normal de la propia base de datos, se ejecuta de forma automática, y transparente para el usuario una desfragmentación cada 12 horas, la cual denominamos Online defragmentation y se lleva a cabo un par de veces al día. Pero claro la online defragmentation no es tan “potente” por así decirlo que la offline, en la Online se libera el espacio de los objetos eliminados de manera rápida, para ser reutilizados por nuevos objetos de AD DS, y en la medida de lo posible que no crezca la propia base de datos, pero no sirve para cuando se eliminan gran cantidad de objetos, en esos casos digamos que la desfragmentación Online no es tan efectiva.
¿Que hacemos al llevar a cabo la Defragmentation?
Con la denominada desfragmentación de la base de datos de AD DS, lo que hacemos es compactar de nuevo la base de datos, liberar espacio que se ha ido ocupando de más, y chequear la integridad de la base de datos.
Como he dicho al principio de la entrada, en la mayor parte de los escenarios no es necesario llevar a cabo está acción, pero hay otros entornos por ejemplo los que vienen de hacer un upgrade de los Controladores de dominio a una versión reciente de Windows Server, entornos muy grandes que han sufrido grandes variaciones donde si puede ser interesante desfragmentar la base de datos, también un tamaño desproporcionado del fichero ntds.dit es síntoma inequívoco de que hace falta compactar, aunque deberemos tener en cuenta que los Controladores de dominio que son además Catálogo Global tienen mayor tamaño de base de datos que el resto de DCs que no lo son, por lo que en ese caso la diferencia de tamaño de unos DCs respecto a otros está justificada.
¿Cuando debo realizar este procedimiento?
Como ya he comentado al comienzo de la entrada, la defragmentation online se lleva a cabo cada 12 horas, pero no cubre una acción en profundidad, es algo muy superficial, no siempre libera espacio. Durante los años de trabajo en un entorno con Directorio Activo la base de datos ntds.dit va aumentando de tamaño, cualquier objeto suma, aunque luego se eliminen van generando o consumiendo espacio, que la base de datos no es capaz de liberar por si sola en numerosas ocasiones, como en el borrado de objetos pasado el tombstone lifetime (tiempo en el que realmente se eliminan los objetos y ya no pueden ser recuperados.
Windows Server 2000 – 60 days
Windows Server 2003 – 60 days
Windows Server 2003 SP1 – 180 days
Windows Server 2003 R2 – 60 days
Windows Server 2003 R2 SP2 – 180 days
Windows Server 2008 – 180 days
Windows Server 2008 R2 – 180 days
Windows Server 2012 – 180 days
Windows Server 2012 R2 – 180 days
Para saber realmente cuando, o mejor dicho que espacio puedo liberar del fichero ntds.dit llevando a cabo la defragmentation hemos de modificar una clave del registry que nos mostrará de manera anticipada que ganancia obtenemos, y si realmente nos merece la pena hacer las defragmentation.
Para ello nos conectamos al DC sobre el que queremos ver el espacio a liberar, y modificamos la siguiente entrada del registro:
HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ NTDS \ Diagnostics
Como siempre ejecutamos regedit, y navegamos hasta la ruta
Como podemos observar, el valor por defecto de la entrada 6 Garbage Collection es 0, nosotros debemos modificarlo a 1. Con esta simple acción incrementaremos el Logging del proceso Garbage Collection el cual se ejecuta junto con la defragmentation online. Ahora deberíamos esperar a que la proxima defragmetation online se lleve a cabo (ya hemos comentado que sucede un par de veces al día cada 12 horas), y entonces podremos estudiar el log Active Directory Domain Services.
Dentro del log buscaremos el event id 1646, por normal general aparece junto a los event ids 700 and 701.
Como se puede ver en el log en mi ejemplo (es un dominio recién instalado para pruebas) de los 18MB que ocupa la base de datos, si la compactásemos ahora mismo ganaríamos o liberaríamos 4MB, con lo que se quedaría en 14MB.
En entornos reales de producción, podréis observar como se puede ahorrar bastante espacio en la BBDD, y además mejorar el rendimiento de una manera muy leve.
El procedimiento como tal para hacer la compactación es sencillo, y se puede seguir en el siguiente enlace de Microsoft: https://technet.microsoft.com/en-us/library/cc794920%28v=ws.10%29.aspx
Saludos
DGM
Para comentar debe estar registrado.