2011-06-10 24 views
39

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).¿Cuál es la diferencia entre la reconstrucción del índice OFFLINE y ONLINE en SQL Server?

Pero, ¿qué hace SQL en modo OFFLINE?

+2

Para el registro, puede usar la opción EN LÍNEA = ENCENDIDO al agregar también nuevos índices, no solo cuando los está reconstruyendo. – datagod

Respuesta

53

En el modo EN LÍNEA, 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 Online Index Operations. 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 los LOB, consulte Online Index Operations for indexes containing LOB columns.

+1

"Si el índice contiene columnas LOB, las operaciones ONLINE no son compatibles con SQL Server 2005/2008/R2.". Pregunta: ¿fallará la operación REBUILD, o simplemente se degradará a un RECONSTRUCCIÓN OFFLINE? – esac

+1

¿Error con el error 2725. –

+0

todos los índices que contienen columnas LOB, o solo índices agrupados? – esac

6

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 bloqueo de modificación de esquema (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 Esto impide las actualizaciones en la tabla subyacente, pero permite operaciones de lectura, como las instrucciones SELECT ".

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

reconstrucciones índice Adicionalmente línea son una empresa (o promotor) versión única característica.

1

Las principales diferencias son:

1) índices sin conexión es más rápida que la reconstrucción LÍNEA reconstruir.

2) Espacio en 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 esquema de bloques de bloqueo de modificación de todos los demás accesos concurrentes a la mesa, pero sólo se mantiene durante un período muy corto de tiempo, mientras que el índice de edad se deja caer y las estadísticas actualizadas.
Cuestiones relacionadas