Tengo varias tablas con cantidad de filas entre 5M y 1.5G
Cada tabla tiene su campo BLOB, cuyo tamaño varía de 100 bytes a 30 MBytes y que se almacena como 'tipos de gran valor fuera de fila' = ON
Las tablas se almacenan en diferentes grupos de archivos con 3-4 archivos cada uno en un disco diferente @ LUN diferentes @ SAN muy rápido
Todos los días, estas tablas crecen con un tamaño de 5-100 Gb y con 600k - 1.5M filas
Después de cierto tiempo , que varía de 2 semanas a 6 meses, algunas de las filas se eliminan o mueven a la base de datos de archivo, por lo tanto, no hay filas en las tablas de trabajo que tengan más de 6 meses.
Configuración actual del servidor:
- El motor del servidor SQL es 2008 R2 SP1 Enterprise @ 24 núcleos, @ 64Gb RAM
- SQL Server se ejecuta con marcas de inicio adicionales:
-T 3640; (Elimina el envío de mensajes DONE_IN_PROC al cliente para cada instrucción en el procedimiento almacenado. Esto es similar a la configuración de sesión de SET NOCOUNT ON, pero cuando se establece como un indicador de seguimiento, cada sesión de cliente se maneja de esta manera)
-T 1118; (Cambia las asignaciones en tempDB de 1pg a la vez (para las primeras 8 páginas) en cierta medida).
-T 2301; (Permite optimizaciones avanzadas que son específicas para consultas de soporte de decisiones. Esta opción se aplica al procesamiento de soporte de decisiones de grandes conjuntos de datos)
-T 1117; (Crece todos los archivos de datos a la vez, de lo contrario, va por turnos).
-MI; (Aumenta la cantidad de extensiones que se asignan para cada archivo en un grupo de archivos. Esta opción puede ser útil para aplicaciones de almacenamiento de datos que tienen un número limitado de usuarios que ejecutan escaneos de índice o datos)
-T 834; (Hace que SQL Server use asignaciones de páginas grandes de Windows para la memoria asignada para el grupo de búferes, http://msdn2.microsoft.com/en-us/library/aa366720.aspx , http://support.microsoft. com / kb / 920093 )
- SQL Server utiliza extensiones de página grandes
- SQL Server utiliza la opción de inicialización rápida de archivos
- AUTOSHRINK está desactivado para todas las bases de datos
El problema es que, a partir de algún punto del tiempo de actividad del servidor (de un par de días a meses) el GHOST CLEANUP
proceso se niega a realizar limpiezas forzadas y simplemente hacer su trabajo habitual, limpia varias páginas en varios segundos ( which is seen thru Extended Events
), lo cual no es adecuado , porque no puede limpiar todas las filas eliminadas
El problema persiste desde los tiempos de SQL Server 2005 RTM Enterprise
Cómo intenté resolver el problema:
- Intenté forzar las operaciones de SCAN en índices agrupados de las tablas
- Intenté forzar las operaciones de SCAN, que involucraban todo el contenido de la columna BLOB en los índices agrupados de las tablas
- sistema sp_clean_db_free_space & sp_clean_db_file_free_space
- página de limpieza manual de dbcc (@dbid, @fileid, @page) para todos los archivos y páginas en DB
- reconstrucciones de índices agrupados y reorganización
- recreando la base de datos
DBCC FORCEGHOSTCLEANUP
Cuando ejecuto la consulta:
select * from sys.dm_db_index_physical_stats(db_id(), object_id('ProblemTable'), 1, 0, 'detailed')
Veo millones y decenas de millones de registros fantasmas, pero solo para el tipo de unidad de asignación de LOB_DATA
Las únicas cosas que ayudan:
- detener el servidor con el comando SHUTDOWN o reiniciar todo el host: es útil, después de reiniciar, el proceso GHOST CLEANUP se ejecuta algunas horas y en realidad limpia todos los registros fantasma
- DBCC SHRINKFILE con la opción EMPTYFILE: al mover todos los datos de un archivo a otro o a los archivos recién creados, se limpian los registros fantasmas solo en este archivo; el problema es que realmente odio las operaciones de reducción. Y esto toma 3-4 días para UN archivo
la pregunta : ¿existe alguna programática (preferible) o de mantenimiento para forzar la LIMPIEZA DE FANTASMA sin tiempo de inactividad del servidor, porque el tiempo de inactividad del servidor cuesta demasiado, incluso inaceptable, es de miles a decenas de miles de dólares por hora
Se notaron problemas similares a los míos aquí:
- http://support.microsoft.com/kb/932115
- http://www.sqlservercentral.com/Forums/Topic496244-149-1.aspx
Y lo mismo está aquí: