¿Cuál es la diferencia entre la reconstrucción de índices SIN CONEXIÓN y EN LÍNEA en SQL Server?


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 a su uso y luego reconstruye el índice original, rastreando los cambios utilizando el control de versiones para ambos (corrígeme si me equivoco).

Pero ¿qué hace SQL en modo SIN conexión?

Author: esac, 2011-06-10

3 answers

En el modo EN LÍNEA, el nuevo índice se construye mientras que el índice anterior es accesible para lecturas y escrituras. cualquier actualización del índice antiguo también se aplicará al nuevo índice. Una columna de antimateria se utiliza para rastrear posibles conflictos entre las actualizaciones y la reconstrucción (es decir. eliminar 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 el modo SIN CONEXIÓN, la tabla se bloquea por adelantado para cualquier lectura o escritura, y luego el nuevo índice se construye 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 realiza la operación se libera el bloqueo en la tabla y se permite leer y escribir de nuevo.

Tenga en cuenta que en SQL Server 2012 la restricción sobre LOB fue levantado, vea Operaciones de índice en línea para índices que contienen columnas LOB.

 59
Author: Remus Rusanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-11 10:14:08

Las reconstrucciones de índices en línea son menos intrusivas cuando se trata de bloquear tablas. Las reconstrucciones sin conexión causan un bloqueo pesado de las tablas que puede causar problemas de bloqueo significativos para las cosas que están tratando de acceder a la base de datos mientras se lleva a cabo la reconstrucción.

"Los bloqueos de tabla se aplican durante la duración de la operación de índice [durante una reconstrucción sin conexión]. Una operación de índice sin conexión que crea, reconstruye o elimina un índice agrupado, espacial o XML, o reconstruye o elimina un índice no agrupado, adquiere un bloqueo de modificación de esquema (Sch-M) en la tabla. Esto impide el acceso de todos los usuarios 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 evita las actualizaciones de 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 característica solo de la versión enterprise (o developer).

 6
Author: dunos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-10 17:37:22

Las principales diferencias son:

1) La reconstrucción del índice SIN conexión es más rápida que la reconstrucción EN LÍNEA.

2) Se requiere espacio adicional en disco durante las reconstrucciones de índices en línea de SQL Server.

3) Bloqueos de SQL Server adquiridos con las reconstrucciones de índices 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 muy corto de tiempo mientras se elimina el índice anterior y se actualizan las estadísticas.
 2
Author: Bhavin Katrodiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-17 12:00:57