Skip to content

Limitar los recursos asignados a la ejecución de una consulta en SQL Server

01/07/2013
SQLServerLogo

Siempre aparecen en nuestras bases de datos y sistemas consultas que por su naturaleza consumen una gran cantidad de recursos durante su ejecución. Muchas veces se trata de consultas o procesos que generan reportes o que realizan importaciones o exportaciones masivas de datos. Cuando estas consultas se ejecutan, el rendimiento general del sistema se ve afectado por la caída en los recursos disponibles, lo que redunda en mayores tiempos de ejecución para los demás procesos y en mayores probabilidades de que se produzcan bloqueos.

Para mejorar esta situación tenemos varias alternativas. La primera que menciono es realizar una optimización detallada y profunda de estas consultas y procesos, a fin de mejorar sus métodos de acceso y minimizar la cantidad de lecturas y accesos a disco que requieran. Pero a veces, esto no es posible o ya fue realizado sin mejoras apreciables.

Una opción distinta es en estos casos restringir los recursos que la consulta puede utilizar. De esta forma, aunque su ejecución tomará más tiempo, la misma no interferirá de forma tan notable en el funcionamiento del servidor. Para ello aplicaremos una opción presente en la instrucción SELECT, que es la denominada MAXDOP.

Con el uso de la opción MAXDOP es posible indicar la cantidad de procesadores (núcleos en la actualidad) que una consulta tiene autorizados a utilizar durante su ejecución. Al disminuir esta cantidad de núcleos a un valor menos a la cantidad total presente en el servidor estamos liberando recursos para uso general. En el caso extremo, usando MAXDOP 1 forzamos a la ejecución serial de la consulta.

Les presento a continuación dos ejemplos sobre la base de datos AdventureWorks2012, para que puedan apreciar las diferencias según las opciones de paralelismo usadas.

Primero veamos la consulta original:

MAXDOP1

Se puede apreciar el uso de paralelismo en el plan de ejecución.

Ahora examinemos la consulta con la opción MAXDOP:

MAXDOP2Vemos que el plan de ejecución resulta ser serial, algo congruente con la indicación de que la consulta solo podía usar 1 núcleo (MAXDOP 1)

Queda para cada uno de nosotros evaluar el valor apropiado para el uso de núcleos, en base al rendimiento esperado para la consulta y la afectación que se genera en el servidor de datos.

 

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: