índices script reconstruir index desfragmentar change sql indexing

script - sql server alter index reorganize



¿Cuál es la diferencia entre la reconstrucción del índice OFFLINE y ONLINE en SQL Server? (3)

Al reconstruir un índice, hay una opción para ONLINE = OFF y ONLINE = ON. Sé que cuando el modo EN LÍNEA está activado, hace una copia del índice, cambia las nuevas consultas para utilizarlo y luego reconstruye el índice original, haciendo un seguimiento de los cambios usando el control de versiones para ambos (corríjanme si me equivoco).

Pero, ¿qué hace SQL en modo OFFLINE?


En el modo ONLINE, el nuevo índice se genera mientras que el índice anterior es accesible para lecturas y escrituras. cualquier actualización en el índice anterior también se aplicará al nuevo índice. Se usa una columna antimateria para rastrear posibles conflictos entre las actualizaciones y la reconstrucción (es decir, eliminación de una fila que aún no se ha copiado). Ver operaciones de índice en línea . Cuando se completa el proceso, la tabla se bloquea durante un breve período y el nuevo índice reemplaza al anterior. Si el índice contiene columnas LOB, las operaciones en línea no son compatibles con SQL Server 2005/2008 / R2.

En modo OFFLINE, la tabla está bloqueada por adelantado para cualquier lectura o escritura, y luego el nuevo índice se genera a partir del índice anterior, mientras mantiene un bloqueo en la tabla. No se permite ninguna operación de lectura o escritura en la tabla mientras se reconstruye el índice. Solo cuando se finaliza la operación se libera el bloqueo de la tabla y se vuelven a leer y escribir.

Tenga en cuenta que en SQL Server 2012 se eliminó la restricción en LOB, consulte Operaciones de índice en línea para índices que contienen columnas LOB .


Las principales diferencias son:

1) La reconstrucción del índice OFFLINE es más rápida que la reconstrucción en línea.

2) Espacio de disco adicional requerido durante las reconstrucciones de índice en línea de SQL Server.

3) bloqueos de SQL Server adquiridos con las reconstrucciones de índice en línea de SQL Server.

  • Este bloqueo de modificación de esquema bloquea todos los demás accesos simultáneos a la tabla, pero solo se mantiene durante un período de tiempo muy corto mientras se descarta el índice anterior y se actualizan las estadísticas.

Las reconstrucciones de índices en línea son menos intrusivas cuando se trata de bloquear tablas. Las reconstrucciones fuera de línea provocan el bloqueo pesado de las tablas, lo que puede causar problemas de bloqueo significativos para las cosas que intentan acceder a la base de datos mientras se lleva a cabo la reconstrucción.

"Los bloqueos de tabla se aplican durante la operación de índice [durante una reconstrucción fuera de línea]. Una operación de índice sin conexión que crea, reconstruye o descarta un índice agrupado, espacial o XML, o reconstruye o descarta un índice no agrupado, adquiere un Esquema bloqueo de modificación (Sch-M) en la tabla. Esto impide que todos los usuarios accedan a la tabla subyacente durante la operación. Una operación de índice sin conexión que crea un índice no agrupado adquiere un bloqueo Compartido (S) en la tabla. a la tabla subyacente pero permite operaciones de lectura, como las instrucciones SELECT ".

http://msdn.microsoft.com/en-us/library/ms188388(v=sql.110).aspx

Además, las reconstrucciones de índices en línea son solo una versión de empresa (o desarrollador).