Se necesita una solución alternativa de SQL Server Frozen Ghost Cleanup


15

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 CLEANUPproceso 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í:

Y lo mismo está aquí:

Respuestas:


12

Finalmente, MS ha reconocido el problema como un error: http://support.microsoft.com/kb/2622823

Brevemente: se repara en

  • SQL Server 2008 SP3 CU4
  • SQL Server 2008 R2 CU10
  • SQL Server 2008 R2 SP1 CU4

En Sql Server 2012 SP1 no estoy experimentando el problema durante más de un año de tiempo de ejecución.


3

Este es el tipo de pregunta que debe ir a CSS para que puedan resolver el problema con usted. Probablemente tenga garantía de software y un contrato de soporte. Si no tiene unos pocos cientos de dólares, no debería ser tan importante si reiniciar la instancia le cuesta miles de dólares por hora.

¿Has intentado permitir que la base de datos se cierre y luego se ponga en línea? Esto hará que se ejecute la recuperación de fallos y puede dar inicio a la limpieza fantasma.

¿Estás escribiendo en la mesa con frecuencia? ¿Con frecuencia me refiero a todo el tiempo?

En cuanto a MSKB 932115, ¿está viendo que los registros fantasma solo se dejan en todos los archivos, o está limpiando el primer archivo en el grupo de archivos?

¿Por qué el uso de -T1117 y el archivo instantáneo init?


1. Definitivamente iré al soporte de MS. 2. Si cierro la base de datos, sube unos 10-30 minutos rodando la transmisión hacia atrás y hacia adelante, lo cual es inaceptable. 3. El GC se está ejecutando, pero no está procesando entradas LOB fuera de fila eliminadas. 4. Escribir en tablas con un rendimiento constante según la hora del día de 20 a 600 escrituras por segundo y todo el tiempo. 5. El primer archivo de DB no está en uso: no tiene tablas grandes y solo se usa como almacenamiento del sistema, por lo tanto, simplemente no hay ningún registro fantasma.
Oleg Dok

con -T1117 Solo quiero repartir toda la carga entre varios archivos, en cambio, cuando solo queda un archivo del grupo de archivos, donde todavía existe espacio libre, comienza a disminuir la velocidad en los LATCH de PFS, el inicio instantáneo de archivos minimiza el tiempo de crecimiento de archivos, porque un incremento se establece en 10-50 Gb por turno. No puedo simplemente configurar los archivos tan grandes como pueda, porque es completamente impredecible: qué archivos obtendrán sus datos hoy y en qué volumen. Es más sencillo pedir a los administradores de SAN que agreguen más espacio, que predecir a quién debo agregar el espacio.
Oleg Dok
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.