Tenemos varias máquinas en las que hemos asignado previamente el tamaño del registro de transacciones a 50 gb. El tamaño de la tabla que estoy tratando de reorganizar es de 55 a 60 gb, pero va a aumentar continuamente. La razón principal por la que quiero reorganizar es reclamar espacio y cualquier beneficio de rendimiento debido a eso es una ventaja adicional.
El nivel de fragmentación de la tabla es 30 - 35%. En algunas de estas máquinas recibo el error "registro de transacciones lleno" y la reorganización falla. El tamaño del registro de transacciones alcanza hasta 48 gb. ¿Cuál es una buena manera de contrarrestar esto? No tenemos activado el incremento automático y soy reacio a hacerlo.
Puedo aumentar el tamaño del registro a un valor mayor, pero a medida que aumenta el tamaño de la tabla en el futuro, el valor puede no ser suficiente. También anula el propósito de reorganizar para reclamar espacio si voy a aumentar el tamaño del registro por igual. ¿Alguna idea sobre cómo puedo contrarrestar esto de manera efectiva? Usar el modo masivo no es una opción ya que la pérdida de datos no es aceptable.
fuente
REORGANIZAR (como en ALTER INDEX ... REORGANIZE) es una operación muy rápida (bueno, principalmente ...), que requiere una pequeña cantidad de registro, puede interrumpirse en cualquier momento y reanudarse más tarde, y funciona internamente en transacciones de lotes pequeños :
¿Estás seguro de que no estás hablando de una reconstrucción ? Un índice RECONSTRUCCIÓN es lento, costoso, consume una cantidad enorme de registros (si no está fuera de línea y no se puede registrar mínimamente , la reconstrucción en línea no se puede registrar mínimamente), es una transacción gigante única y no se puede interrumpir sin perder todo el trabajo.
Me parece que está haciendo una reconstrucción, que es una operación realmente excepcional que no debe hacer a menos que tenga una razón muy bien pensada. ¿Qué tipo de reclamo espacial estás esperando? ¿Algo que
DBCC CLEANTABLE
no pueda manejar? ¿Ha verificado la estructura física de la tabla, se ha desviado de la estructura lógica (consulte las columnas de la tabla de SQL Server debajo del capó para obtener más detalles)?Si realmente tiene que reconstruir la tabla, me temo que no tiene más remedio que morder la bala y asignar el registro necesario. No dejes que crezca automáticamente, solo ralentizará el proceso. Precrezca hasta 2.5 veces el tamaño de la mesa.
Si la tabla está particionada, puede reconstruir sin conexión (y reorganizar) una partición a la vez. La reconstrucción en línea solo se puede realizar en todo el nivel de la tabla.
fuente
He tenido este problema antes.
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.
Cree una alerta de agente WMI ('Reorganizar la válvula de alivio') en una condición de rendimiento.
Crear un trabajo ('Reorganizar verificación')
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.
fuente
Esto es lo que solía hacer (también tengo algunas tablas con más de 80 GB cada una) para la reorganización del índice (porque la reorganización del índice se puede detener en cualquier momento sin perder el trabajo de reorganización anterior).
En mi marco de mantenimiento de índice, clasifico los índices en dos grupos, uno es para la reconstrucción del índice y otro para la restauración del índice. Para la reconstrucción del índice, utilizaré un enfoque algo diferente porque no quiero detener una sesión de reconstrucción del índice (lo que provocará una reversión y perderá todo el trabajo anterior). Durante la reconstrucción del índice, si mi sesión de monitoreo nota un escenario de espacio libre usado en el archivo tlog, la sesión de monitoreo aumentará automáticamente el archivo tlog y, en el peor de los casos (es decir, el disco está lleno), mi sesión de monitoreo creará otro archivo de registro ( pero luego lo dejaré caer) en otra unidad (la unidad de respaldo)
fuente
Tuve el mismo problema que el autor de la pregunta y, mirando sus comentarios, puedo decir que tuve la misma configuración. Mientras intentaba hacer un
REORGANIZE
, el registro crece hasta el tope, independientemente del tamaño, incluso varias veces el tamaño de toda la tabla.El problema fue causado por la replicación transaccional . Aparentemente, no se puede hacer una copia de seguridad del registro hasta que
REORGANIZE
finalice la operación. Leí en alguna parte que era un problema conocido de Microsoft, pero no estoy seguro de dónde.Una vez que desactivé la replicación transaccional, las copias de seguridad de registros funcionaron normalmente de nuevo, y hacer copias de seguridad de registros cada 30 segundos mientras la reorganización funcionó bien para mí.
fuente
Supongo que estás ejecutando algo en la línea de:
ALTERAR ÍNDICE SOBRE REORGANIZAR
Desafortunadamente, no hay forma de ejecutar una organización parcial (la forma en que puede reducir parcialmente un archivo de registro, por ejemplo). Las formas en que puedo pensar sobre estos problemas son:
1) configure la base de datos en modo de recuperación simple mientras ejecuta la reorganización, pero dijo que no es aceptable
2) particione el índice: si puede pensar en una forma de particionar el índice para obtener particiones de aproximadamente el mismo tamaño, podrá reorganizar (o reconstruir con la opción en línea) cada partición de forma independiente y, por lo tanto, limitar el crecimiento del archivo de registro
Estoy seguro de que está haciendo esto, pero si no lo está, es posible que desee iniciar una copia de seguridad del archivo de registro antes y después de hacer cualquier optimización de índice, lo que le permitirá recuperar el espacio utilizado.
fuente