2010-03-15 18 views
6

Tengo dos servidores en los que he instalado SQL Server 2008SQL Server lenta

  • Producción: RAID 1 en discos SCSI
  • prueba: disco IDE

Cuando trato de ejecutar un script con aproximadamente 35,000 inserciones, en el servidor de prueba necesito 30 segundos y en cambio en el servidor de producción más de 2 minutos. ¿Alguien sabe por qué esa diferencia? Quiero decir, los DB están configurados de la misma manera y el servidor de producción también tiene una configuración RAID, un mejor procesador y memoria ...

GRACIAS!

+1

Andrew, podría responder, qué tipo de campo tiene la clave principal y qué tipo de índice tiene este campo (CLUSTERED or NONCLUSTERED). – garik

+0

El índice de clave principal está agrupado en ambos servidores – andrew0007

+0

¿qué tipo de campo (campo PK)? GUID? – garik

Respuesta

3

Tenga en cuenta que RAID 1 es redundante, y la velocidad varía según el escenario. Inserciones de 35k podrían causar una sobrecarga pesada de escritura aleatoria, ralentizando el rendimiento.

¿Cómo está insertando estas filas, están envueltas en una transacción SQL? Si aún no lo ha hecho, sepa que las transacciones almacenan en caché las consultas y realiza actualizaciones de disco por lotes, lo que aumenta la velocidad.

Si se trata de un archivo de script SQL, ajuste las inserciones en BEGIN TRANSACTION/END TRANSACTION. Para tantos registros importing from file is probably better.

+0

inserción masiva resuelto el problema! – andrew0007

2

Quizás algunos otros programas se estén ejecutando en el servidor de producción que consume recursos como el disco duro y el procesador.

También en el servidor de producción el momento en que está ejecutando los scripts al mismo tiempo, las operaciones se están realizando en la base de datos y algunas consultas se están ejecutando.

3

¿Cuáles son los índices y el relleno en el servidor? Es posible que necesite reconstruir sus índices con más espacio en sus páginas y/o considere qué índices realmente necesita. Si desea una prueba rápida intente ALTER INDEX ALL ON dbname.dbo.tablename REORGANIZE.

Considere también el uso en el servidor de producción. En su prueba, es probable que usted (o muy pocos) sean la única persona que lee/escribe. Obtenga una idea de qué más está sucediendo en el db mientras está haciendo esta inserción.

Si ambos fallan, ejecute una supervisión en el servidor de producción y vea si está siendo criticado por otros procesos.

+0

Tomó un simple inserto mío de 30 segundos a aproximadamente 30 ms. ¡Gracias! – tsilb

0

Realmente difícil de decir.

Primero, sí, la producción puede tener más recursos, pero ¿están DISPONIBLES? ¿O la producción ya se está ejecutando cerca del límite con las otras cosas cuando la golpeas? Es, después de todo, producción.

Esto sería como mi primera idea.

+0

Gracias por la respuesta ... Los recursos están disponibles y no hay otros usuarios conectados en el servidor. Además, el índice está configurado de la misma manera que en el otro servidor de prueba ... – andrew0007

+0

Me gustaría seguir para ver un registro perfmon primero. Tal vez algunos de sus subsistemas tengan problemas: el hecho de que el disco sea TEÓRICAMENTE más rápido no significa que realmente lo sea. La mierda sucede. Estado allí, visto eso. medir todas las características importantes. – TomTom

2

Hay tres cuestiones (de alto nivel) a considerar:

  1. Actividad en los vs. servidor de recursos disponibles: Parece que (a juzgar por sus respuestas) que este no es un problema
  2. configuración de los índices: de nuevo, parece que esto no es un problema si el entorno de desarrollo verdaderamente es idéntica en la configuración (como debe ser)
  3. el volumen de datos frente a fondo cómo sus índices son

Creo que el tercer punto podría ser su problema. Tenga en cuenta que cuantos más índices (no agrupados) coloque en su tabla (y cuanto más complejos sean), más lenta será la manipulación de sus datos. Los índices son (en general) una compensación entre velocidad de consulta y velocidad de modificación. Obviamente, esta es una generalización y la sintonía siempre es necesaria, pero es cierto en general.

Compara la cantidad de datos en los dos entornos; si el entorno de producción tiene una cantidad sustancial más (o si su tabla está altamente indexada), este podría ser su problema.

+0

En el servidor de prueba, importé el volcado del DB de producción, por lo tanto, los datos y el índice son los mismos .. Quizás haya algo relacionado con los discos ... Estoy usando RAID1 en la producción y no tengo RAID en el servidor de prueba .. – andrew0007

+1

@andrew: Dependiendo de su controlador RAID, esto podría ser parte del problema. RAID1 (especialmente implementado en software) escribe los mismos datos en ambas unidades. –

0

Si también hace selecciona sobre la base de datos al mismo tiempo, asegurarse de que se realizan con "con (nolock)"

0

¿Cuál es el volumen de datos existentes en los dos servidores?

El tiempo para INSERTAR se ampliará dependiendo del número de filas que ya están en la tabla y el número de índices. Si su tabla de servidor de prueba contiene menos filas antes de INSERTAR que el servidor de producción, se esperaría que el INSERT se ejecute allí más rápidamente.