Sé que un INSERT en una tabla SQL puede ser lento por varias razones:
- Existencia de disparadores de inserción en la mesa
- Muchas restricciones forzadas que deben verificarse (generalmente claves foráneas)
- La página se divide en el índice agrupado cuando se inserta una fila en el medio de la tabla
- Actualización de todos los índices no agrupados relacionados
- Bloqueo de otra actividad en la mesa
- Mal tiempo de respuesta de escritura de E / S
- ... algo que me perdí?
¿Cómo puedo saber cuál es el responsable en mi caso específico? ¿Cómo puedo medir el impacto de las divisiones de página frente a las actualizaciones de índice no agrupadas frente a todo lo demás?
Tengo un proceso almacenado que inserta alrededor de 10,000 filas a la vez (desde una tabla temporal), lo que toma alrededor de 90 segundos por cada 10k filas. Eso es inaceptablemente lento, ya que hace que otros spids se agoten.
He mirado el plan de ejecución, y veo la tarea INSERTAR ÍNDICE CLUSIFICADO y todas las BÚSQUEDAS DE ÍNDICE de las búsquedas de FK, pero todavía no me dice con certeza por qué lleva tanto tiempo. Sin desencadenantes, pero la tabla tiene un puñado de teclas F (que parecen estar indexadas correctamente).
Esta es una base de datos SQL 2000.