¿Por qué necesitamos reconstruir y reorganizar índices en SQL Server?


28

Después de buscar en Internet no pude encontrar la razón de

  1. ¿Por qué necesitamos reconstruir y reorganizar índices en SQL Server?

  2. ¿Qué sucede internamente cuando reconstruimos y reorganizamos?

Un artículo en un sitio dice:

El índice debe reconstruirse cuando la fragmentación del índice es superior al 40%. El índice debe reorganizarse cuando la fragmentación del índice se encuentra entre 10% y 40%. El proceso de reconstrucción de índice utiliza más CPU y bloquea los recursos de la base de datos. La versión de desarrollo de SQL Server y la versión Enterprise tienen la opción ONLINE, que se puede activar cuando se reconstruye Index. La opción EN LÍNEA mantendrá el índice disponible durante la reconstrucción.

No podía entender esto, aunque dice eso WHENpara hacer esto, pero me gustaría saber WHYsi necesitamos reconstruir y reorganizar índices.


1
Esta es la pregunta sobre por qué, y aquí está la pregunta sobre cuándo .
Nick Chammas

Respuestas:


29

A medida que inserta actualizaciones y eliminaciones, sus índices se fragmentarán tanto interna como externamente.

La fragmentación interna es que tiene un alto porcentaje de espacio libre en sus páginas de índice, lo que significa que SQL Server necesita leer más páginas al escanear el índice.

La fragmentación externa es cuando las páginas del índice ya no están en orden, por lo que SQL Server tiene que hacer más trabajo, especialmente en términos de E / S para leer el índice.

Si sus índices se fragmentan demasiado, en el mejor de los casos, sus consultas serán menos eficientes, pero en el peor de los casos, SQL Server dejará de usar todos los índices juntos, lo que significa que prácticamente todas las consultas tendrían que realizar un escaneo de tabla o un escaneo de índice agrupado. ¡Esto perjudicará mucho tu rendimiento!

Cuando reorganiza un índice, SQL Server usa las páginas de índice existentes y simplemente baraja los datos de esas edades. Esto aliviará la fragmentación interna y también puede eliminar una pequeña cantidad de fragmentación externa. Es una operación más liviana que la reconstrucción y siempre está en línea.

Cuando reconstruye un índice, SQL Server en realidad recurre a los datos del índice y utiliza un nuevo conjunto de páginas de índice. Obviamente, esto aliviará la fragmentación interna y externa, pero es una operación más pesada y, por defecto, hace que el índice se desconecte, aunque puede realizarse como una operación en línea, dependiendo de la versión y la configuración de su SQL Server.

Sin embargo, no espere tener 0 fragmentación después de una Reconstrucción. A menos que utilice una sugerencia de consulta MAXDOP, SQL Server paralelará la operación de reconstrucción y cuantos más procesadores participen, es probable que haya más fragmentación, porque cada procesador o núcleo reconstruirá su sección o fragmento del índice individualmente, sin tener en cuenta El uno al otro. Esta es una compensación entre los mejores niveles de fragmentación y el tiempo necesario para reconstruir el índice. Para una fragmentación cercana a 0, use MAXDOP 1 y ordene los resultados en TempDB.


Excelente...! Simplemente explica ...!
DineshDB

0

Para eliminar la fragmentación que causa problemas como lentitud en el nivel de la base de datos / consultas de larga duración, etc.

Para obtener una comprensión detallada sobre la fragmentación y cómo reconstruir y reorganizar índices (o reorganizar páginas de índice) funciona para esto, consulte el siguiente enlace: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation


1
Esta información se ha vuelto (en parte) obsoleta después de ver Por qué la fragmentación del índice no importa
John aka hot2use
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.