none
Consulta técnica hacerca de eliminar y crear un index RRS feed

  • Pregunta

  • Buenas,

       Amigos, espero me puedan ayudar.  Resulta que tengo una tabla de mas de 300 millones de registros. La misma Tiene dos tablas que estan relacionas (Error, CategoriaError).

    A la tabla Error le hice un DROP and CREATE del Index Non Cluster, pero como tenia mas de una hora decidí canselar el script, mismo que tardo alrededor de 30 minutos en detenerse. Despues de esto tuve un incidennte en la base de datos porque el CPU del server se disparo y las consultas que se estaban realizando hacia ese servidor (que consultaban dichas tablas) se bloqueaban o no se realizaban de la forma correcta. Para solventar el problema tuve que recrear las tablas.

    Alguien me puede decir que fue lo que paso durante el proceso de eliminar y recrear el index y si eso pudo probocar bloqueos ?

    Agradezco de antemano la ayuda.


    Jose Miguel Salas C

    sábado, 3 de septiembre de 2016 18:01

Respuestas

  • Para crear un índice, internamente se pone un bloqueo sobre la tabla, cosa que puede ser problemática si la tabla está ocupada con transacciones en ese momento. Si tienes una edición Enterprise de SQL Server, se puede poner la cláusula ONLINE en la creación del índice para que se ejecute en paralelo sin bloquear la tabla.

    La creación de índices es transaccional, por lo que si cancelas la operación tiene que deshacer desde el Log todo lo que llevaba hecho, por eso tarda. Si reinicias el servidor en ese momento, al rearrancar tiene que recuperarse desde el Log (completando o deshaciendo la transacción que estaba en curso), por lo que ese reinicio será lento.

    • Marcado como respuesta JoseSalas lunes, 5 de septiembre de 2016 19:20
    sábado, 3 de septiembre de 2016 21:30

Todas las respuestas

  • Para crear un índice, internamente se pone un bloqueo sobre la tabla, cosa que puede ser problemática si la tabla está ocupada con transacciones en ese momento. Si tienes una edición Enterprise de SQL Server, se puede poner la cláusula ONLINE en la creación del índice para que se ejecute en paralelo sin bloquear la tabla.

    La creación de índices es transaccional, por lo que si cancelas la operación tiene que deshacer desde el Log todo lo que llevaba hecho, por eso tarda. Si reinicias el servidor en ese momento, al rearrancar tiene que recuperarse desde el Log (completando o deshaciendo la transacción que estaba en curso), por lo que ese reinicio será lento.

    • Marcado como respuesta JoseSalas lunes, 5 de septiembre de 2016 19:20
    sábado, 3 de septiembre de 2016 21:30
  • Hola.

    En este post en este mismo foro técnico, Dudas con Rebuild y Reorganize, yo proporcioné un par de respuestas sobre como usar una consulta para establecer si se regenera o se reorganiza un índice y también sobre la ventana de tiempo en la cual se debe hacer, particularmente para ambientes en producción.

    Revisa dicha respuesta a ver si te ayuda en el tema de mantenimiento de índices.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    lunes, 5 de septiembre de 2016 16:32