Factor de relleno y paralelismo en los índices en SQL Server para mejorar el rendimiento

08/03/2012

Como ya sabemos, uno de los parámetros más críticos junto a la memoria y el log de una base de datos son los índices. Tener unos índices acordes a las consultas que estamos realizando y tenerlos actualizados (sin fragmentación) es valor seguro para que el rendimiento de nuestra base de datos sea óptimo.

Dos parámetros críticos de los índices son el Factor de relleno y el grado de paralelismo:

El Factor de relleno (FILLFACTOR) permite optimizar los índices de nuestra base de datos. Sino utilizamos este factor, las páginas de datos de los índices se llenan completamente, pero cuando hay muchas actualizaciones en dicho índice y necesitan de más espacio, dichas páginas tienen que romperse por la mitad y una parte de ella se traslada a una página de índice libre. Si esto ocurre muy a menudo, el rendimiento del índice decrece rápidamente.

Una solución para evitar esto es no completar las hojas de los índices y dejar un espacio vacío, precisamente para cuando hayan actualizaciones que “no quepan” en una fila normal, se pueda utilizar dicho espacio sin tener que “trocear” la página (split page es como se llama este proceso) y así no producir fragmentación interna. Este espacio es el denominado Fill Factor. Por ejemplo un fill factor de 80 indica que dejamos un 80% de espacio para el índice y un 20% de espacio libre. En esta página de Microsoft tenéis más información de cómo activarlo.

http://msdn.microsoft.com/es-es/library/ms177459(v=sql.90).aspx

El grado de paralelismo (MAXDOP) es un parámetro que nos permite indicar el nº de procesadores que utilizará ese índice. Existen instalaciones de sqlserver en donde tenemos máquinas con muchos procesadores y con tablas de 10 ó 20 millones de registros. Reorganizar los índices en estas tablas se vuelve prácticamente una tarea imposible por lo grandes que son y es por ello que o se realizan por la noche o en momentos que baje la actividad. De hecho si iniciamos la reorganización de dichos índices, utilizará todos los procesadores y dejará la máquina inactiva para el resto de usuarios durante mucho tiempo (fácilmente puede ser 1 hora) y en entornos 24×7 esto es inaceptable. Una solución a este problema es utilizar el parámetro MAXDOP que nos permite indicar el grado de paralelismo del índice. Si por ejemplo tenemos una máquina con 8 procesadores físicos, podemos indicar un valor de 4 en el parámetro de MAXDOP cuando reorganicemos el índice online. De esta forma la reorganización sólo utilizará la mitad de los procesadores y dejará los otros libres para el resto de tareas del sqlserver. En esta página tenéis más información sobre el grado de paralelismo.

http://msdn.microsoft.com/es-es/library/ms181007.aspx

En esta página tenéis la sintaxis de creación de índices donde se indica el FillFactor y el MAXDOP

http://technet.microsoft.com/es-es/library/ms188783.aspx

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: