He tenido este problema antes.
- Tiene una gran base de datos y una pequeña unidad de registro. Desea reorganizarse (por una variedad de razones).
- Cuando intente esto en una tabla fragmentada grande, el registro se llenará hasta que la unidad de registro esté llena y luego el comando se cancele.
- Si está en modo simple, otras transacciones pueden fallar hasta que se borre el registro en el siguiente punto de control, y si está en modo completo, otras transacciones pueden fallar hasta la próxima copia de seguridad del registro. ¡Corte!
- Si está en modo completo, aumenta la frecuencia de la copia de seguridad del registro, pero no ayuda a evitar el problema porque la reorganización se realiza en una transacción implícita, el registro no se borra hasta que esa transacción finaliza o cancela o se detiene.
- Y REALMENTE desea que la reorganización se ejecute hasta su finalización.
Eso es un poco contra-intuitivo porque sabe que si cancela la reorganización, puede continuar desde donde se quedó, es solo que un aborto confirma la transacción en lugar de retroceder.
Esto es lo que haces. Es un poco largo pero sencillo.
- Precrezca su archivo de registro a un tamaño relativamente grande, pero no al máximo. Básicamente, desea dejar suficiente espacio para hacer un trabajo útil, además de algunos pequeños crecimientos si ocurren, para que las operaciones normales no se detengan.
- Cree un trabajo para ejecutar su índice de reorganización ('Reorganizar').
Cree una alerta de agente WMI ('Reorganizar la válvula de alivio') en una condición de rendimiento.
- Objeto: SQLServer: Bases de datos
- Contador: Porcentaje de registro utilizado
- Instancia: (el nombre de su gran base de datos)
- Alerta si el contador sube por encima de: 80
- Respuesta: Ejecutar trabajo ('Reorganizar verificación')
Crear un trabajo ('Reorganizar verificación')
- En el trabajo, compruebe msdb.dbo.sysjobactivity para ver si se está ejecutando el trabajo 'Reorganizar'. Y si es ...
- Detenga el trabajo y realice una encuesta hasta que se detenga. Esto puede demorar unos segundos.
- (Si está en modo completo) Inicie su trabajo de copia de seguridad de registro y confirme cuando finalice.
- Vuelva a verificar los sys.dm_os_performance_counters que su contador de espacio libre de registro ha reducido por debajo de su umbral.
- Inicie el trabajo 'Reorganizar'.
Pruebe todo esto en algún lugar, incluso en un entorno limitado de desarrollo, para asegurarse de que funcione correctamente antes de pegarlo en su servidor de producción.
Lo que verá es que el trabajo 'Reorganizar' comienza y comienza a llenar el registro. Cuando el registro alcanza un porcentaje lleno, activa la alerta WMI (dentro de aproximadamente 30 segundos) que ejecuta su otro trabajo que ve que el trabajo 'Reorganizar' se está ejecutando y es muy probable que tenga la culpa. Luego detiene 'Reorganizar', realiza una copia de seguridad, confirma que el espacio libre de registro ha vuelto a un valor razonable, luego inicia nuevamente su trabajo 'Reorganizar' que continuará donde se quedó.
Entonces, como puede, la razón por la que cambia el tamaño de su registro a una cifra razonable en este escenario es para reducir el número de crecimiento / desencadenante / trabajo / detención / reinicio, para que pueda ser más eficiente y también mantener suficiente espacio para el crecimientos ocasionales que no son atrapados a tiempo.
Este es un tipo de escenario extraño. Estoy bastante seguro de que habría resuelto esto hace unos años y, obviamente, aquí hay problemas fundamentales subyacentes. Pero si se ocupa de cientos de servidores, surgirán algunos casos extremos como este que no pueden tratarse de ninguna manera, por cualquier razón comercial, excepto por MacGyver, una solución temporal que hace el trabajo.
Mientras sea seguro, lógico, probado y bien documentado, no debería haber ningún problema.