2010-08-19 11 views
7

estoy acostumbrado a trabajar con esta cantidad de datos (20 millones de filas) y no sé lo que debo esperar en cuanto a la duración de consulta:instrucción Update funcionando durante demasiado tiempo o no

update table set field = '1234' 

n índice en el campo. Esta declaración tomó 25 minutos. La base de datos está configurada en Recuperación simple. ¿25 minutos parecen demasiado largos? La tabla tiene 9 columnas con tipos de datos pequeños < 50 varchar.

+1

¿Qué ocurre con la carga del servidor? ¿Has mirado a Profiler para ver si la caja está sujeta a impuestos para la CPU o la memoria? –

+0

¿Está actualizando 20 millones de filas? Por favor, dime que tienes una cláusula where en tu actual estado de actualización. – Beth

+0

@OMG Ponies: Acabamos de instalar Windows Server 2008 R2 y miré el proceso del servidor SQL, está utilizando todos menos 28 MB de RAM. –

Respuesta

12

SI actualizaste 20M filas en una sola transacción, tu tiempo fue manejado por tu subsistema IO: qué tipo de unidades tienes, qué diseño de archivos de disco, etc. si tienes 40 ejes en incursión 10 con 4 archivos equilibrados y una batería similar por separado para el registro, entonces el resultado es preocupantemente lento. Si ha probado esto con un solo MDF que comparte el husillo con el LDF en un solo HDD de 5000 rpm, entonces su tiempo es sorprendentemente rápido.

+0

+1: IO siempre es el problema para casos como estos, o hay un punto de inflexión impreciso? –

+1

Para las filas de 20M en una sola declaración de actualización, todo va a estar impulsado por la velocidad de descarga del registro, con algunos picos cuando los puntos de control DB se activan debido a la presión de la agrupación de almacenamiento intermedio para las páginas libres. –

+3

El signo revelador será 'Prom. Longitud de cola de disco' (> 2 por eje) y 'Prom. contadores de rendimiento sec/transfer' (> 10ms). http://msdn.microsoft.com/en-us/library/ms175903.aspx –

0
  • ¿Hay alguna vista indizada que haga referencia a ese campo?
  • ¿Está ese campo publicado en un esquema de replicación (transaccional)?
  • ¿Hay otras sesiones accediendo a esa tabla al mismo tiempo que se ejecuta la actualización?
  • ¿Los archivos de registro y de datos están almacenados en discos separados (físicos, no en dos particiones diferentes del mismo hardware)?
  • ¿Hay restricciones de verificación que hagan referencia a ese campo?
  • ¿Hay factores desencadenantes en esa tabla?

Todos estos, y probablemente muchos otros factores, afectarán el rendimiento de la modificación de datos.

De lo contrario, intente poner en parche la actualización utilizando TOP y una cláusula WHERE que solo encuentre filas umodificadas.

+0

No, no, no, no, no, no. :) –

+0

Intenté procesar por lotes, pero no estaba seguro del tamaño del lote. Intenté 10000 y me tomó más tiempo. –

2

Está actualizando 20 registros de Mio en aproximadamente 1500 con un promedio de aproximadamente 7000 actualizaciones por segundo. Suena bien.

+0

¿Simplemente por qué eso suena correcto? –

+1

porque el orden de magnitud está en el rango que esperaría, menos de 1000 sería extraño más de 40000 también. –

Cuestiones relacionadas