6
GPI.- Confidencial Tel: (506) 297 8132 – 244-5849 | De la Basílica de Santo Domingo, Heredia; 200 mts norte y 900 mts este. Apto 103-1100, Costa Rica El Resource Governor Es una nueva funcionalidad del Sql Server 2008 Enterprise Edition. La idea del Resource Governor es la de controlar las consultas que llegan desde una aplicación X con el fin de que podamos asignarle algunos recursos (En este primer release de Sql Server 2008 podemos asignar recursos de procesador y memoria únicamente, no se descarta que posteriormente se puedan asignar recursos de disco, entre otros.) El funcionamiento del Resource Governor es relativamente sencillo, toda consulta que ingresa al Sql Server es analizada por una función que se encarga de Clasificar dicha sentencia e indicarle a qué grupo pertenece para su procesamiento, a dicho grupo se le asigna un pool de recursos para su procesamiento. Partes que componen el Resource Governor Resource Pools: Son contenedores de los recursos de memoria y procesador que pueden ser asignados a un grupo. Como se mencionó anteriormente es factible que más adelante se incorporen nuevos recursos para el control. Cada Pool tiene dos partes, una parte no se traslapa con otros pools lo que le permite indicarle un valor mínimo al recurso. La otra parte del Pool si es compartida con otros Pools, esto permite definir un valor máximo de consumo para los recursos. MIN o MAX para el CPU MIN o MAX en porcentajes de memoria. MIN representa la mínima disponibilidad de recursos garantizados para el CPU y la memoria, el MX representa el tamaño máximo del Pool. Existen dos Pool predefinidos Internal Pool: Representa los recursos consumidos por Sql Server, no puede ser modificado, pero si puede ser monitoreado. Default Pool: Incialmente solo contiene el default workload group, este pool no puede ser borrado pero si puede ser modificado y múltiples grupos pueden pertenecer a él. El default group no puede ser trasladado a ningún otro Pool. Workload Groups: Son simples nombres que el DBA define para permitir que múltiples conexiones compartan recursos definidos en un pool. Al igual que los pools existen dos grupos predefinidos en Sql Server. Internal Gruop: Utilizado por Sql Server a un novel interno, los usuarios no pueden agregar sesiones al grupo interno ni afectar la utilización de recursos. Al igual que el Internal Pool solamente puede ser monitoreado. Default Group: Las sesiones que ingresen y que no tengan especificado un grupo son remitidas a este grupo, ya sea por un fallo en la función de clasificación o porque el grupo especificado en la función no exista.

Sql tips 07_resource governor

Embed Size (px)

Citation preview

Page 1: Sql tips 07_resource governor

GPI.- Confidencial

Tel: (506) 297 8132 – 244-5849 | De la Basílica de Santo Domingo, Heredia; 200 mts norte y 900 mts este. Apto 103-1100, Costa Rica

El Resource Governor

Es una nueva funcionalidad del Sql Server 2008 Enterprise Edition.

La idea del Resource Governor es la de controlar las consultas que llegan desde una aplicación X

con el fin de que podamos asignarle algunos recursos (En este primer release de Sql Server 2008

podemos asignar recursos de procesador y memoria únicamente, no se descarta que

posteriormente se puedan asignar recursos de disco, entre otros.)

El funcionamiento del Resource Governor es relativamente sencillo, toda consulta que ingresa al

Sql Server es analizada por una función que se encarga de Clasificar dicha sentencia e indicarle a

qué grupo pertenece para su procesamiento, a dicho grupo se le asigna un pool de recursos para

su procesamiento.

Partes que componen el Resource Governor

Resource Pools: Son contenedores de los recursos de memoria y procesador que pueden ser

asignados a un grupo. Como se mencionó anteriormente es factible que más adelante se

incorporen nuevos recursos para el control. Cada Pool tiene dos partes, una parte no se traslapa

con otros pools lo que le permite indicarle un valor mínimo al recurso. La otra parte del Pool si es

compartida con otros Pools, esto permite definir un valor máximo de consumo para los recursos.

MIN o MAX para el CPU

MIN o MAX en porcentajes de memoria.

MIN representa la mínima disponibilidad de recursos garantizados para el CPU y la memoria, el MX

representa el tamaño máximo del Pool.

Existen dos Pool predefinidos

• Internal Pool: Representa los recursos consumidos por Sql Server, no puede ser

modificado, pero si puede ser monitoreado.

• Default Pool: Incialmente solo contiene el default workload group, este pool no puede ser

borrado pero si puede ser modificado y múltiples grupos pueden pertenecer a él. El

default group no puede ser trasladado a ningún otro Pool.

Workload Groups: Son simples nombres que el DBA define para permitir que múltiples conexiones

compartan recursos definidos en un pool.

Al igual que los pools existen dos grupos predefinidos en Sql Server.

• Internal Gruop: Utilizado por Sql Server a un novel interno, los usuarios no pueden agregar

sesiones al grupo interno ni afectar la utilización de recursos. Al igual que el Internal Pool

solamente puede ser monitoreado.

• Default Group: Las sesiones que ingresen y que no tengan especificado un grupo son

remitidas a este grupo, ya sea por un fallo en la función de clasificación o porque el grupo

especificado en la función no exista.

Page 2: Sql tips 07_resource governor

GPI.- Confidencial

Tel: (506) 297 8132 – 244-5849 | De la Basílica de Santo Domingo, Heredia; 200 mts norte y 900 mts este. Apto 103-1100, Costa Rica

Función de Clasificación: Es la que se encarga de destinar las aplicaciones a su respectivo

Workload Group, dicha función es aplicada a cada nueva sesión. La sesión se mantiene en el grupo

hasta que la misma termine su ejecución. Solamente puede existir una función de clasificación

activa en un determinado momento en el tiempo. Si no se define función de clasificación todas las

nuevas sesiones son asignadas al grupo DEFAULT. Las funciones son básicamente lo mismo que

una función definida por el usuario, utilizando funciones del sistema para determinar el grupo al

que pertenecen, hablamos de funciones de sistema como las siguientes SUSER_NAME(),

SUSER_SNAME(), IS_SRVROLEMEMBER(), LOGINPROPERTY, CONNECTIONPROPERTY, recordemos

que todas estas funciones pueden ser aplicadas a una sesión que es el verdadero objetivo del

resource governor.

Diagrama del Resource Governor

Sesiones

Clasificación

Internal Group Default Group

Default Pool Internal Pool

Grupo 1

Pool 1

Grupo 2

Aplicación 1

Grupo 3

Aplicación 2

Grupo 4

Aplicación 3

Pool 2

Page 3: Sql tips 07_resource governor

GPI.- Confidencial

Tel: (506) 297 8132 – 244-5849 | De la Basílica de Santo Domingo, Heredia; 200 mts norte y 900 mts este. Apto 103-1100, Costa Rica

Interesante la teoría, ahora hagamos la práctica. Les recomiendo ir ejecutando los scripts uno a la

vez, no lo ejecuten en un solo batch.

El ejemplo lo que hace es crear un pool y un workload group para todas aquellas tareas que

ejecutaría un DBA desde el Managment Studio, puede utilizarse también para querys que vaya a

ejecutar un desarrollador y que nosotros no deseamos darle mas recursos de los necesarios para

que no consuma recursos del servidor de base de datos de forma innecesaria.

--Activa el resource governor si no está activo

ALTER RESOURCE GOVERNOR RECONFIGURE;

GO

/****** Object: ResourcePool [DBA] Script Date: 04/17/2009 15:45:47

Crea el pool de recursos******/

CREATE RESOURCE POOL [DBA] WITH

(min_cpu_percent=0,

max_cpu_percent=55,

min_memory_percent=1,

max_memory_percent=25)

GO

/****** Object: WorkloadGroup [TUNNING] Script Date: 04/17/2009 15:46:19

Crea el grupo al que va a pertenecer las sesiones******/

CREATE WORKLOAD GROUP [TUNNING] WITH(group_max_requests=50,

importance=Medium,

request_max_cpu_time_sec=20,

request_max_memory_grant_percent=25,

request_memory_grant_timeout_sec=0,

max_dop=0) USING [DBA];

GO

--Se crea la funcion de clasificacion para determinar la aplicacion cliente.

CREATE FUNCTION UfnClasificador() RETURNS SYSNAME

WITH SCHEMABINDING AS

BEGIN

DECLARE @grupo SYSNAME

IF (APP_NAME() LIKE 'Microsoft SQL Server Management Studio - Query')

SET @grupo= 'TUNNING'

ELSE

SET @grupo= 'default' RETURN @grupo

END;

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = [dbo].[UfnClasificador]);

Page 4: Sql tips 07_resource governor

GPI.- Confidencial

Tel: (506) 297 8132 – 244-5849 | De la Basílica de Santo Domingo, Heredia; 200 mts norte y 900 mts este. Apto 103-1100, Costa Rica

GO

Una vez ejecutados los scripts y si abrimos el Managment Studio de Sql Server 2008 podemos

ejecutar sentencias y vamos a notar como realmente el consumo de recursos no sobrepasa los

límites establecidos por el resource governor. Desde el Performance Monitor seleccionamos el

contador SQLSERVER:Resource Pool Stats y luego seleccionamos el pool que deseamos monitorear

y presionamos el botón add. Una vez que presionamos el botón Ok iniciamos el proceso de

monitoreo que se presenta en las siguientes pantallas.

Page 5: Sql tips 07_resource governor

GPI.- Confidencial

Tel: (506) 297 8132 – 244-5849 | De la Basílica de Santo Domingo, Heredia; 200 mts norte y 900 mts este. Apto 103-1100, Costa Rica

Pongamos atención a la línea de color verde que presenta un consumo de alrededor de 35% de

consumo de CPU, con algunos altos y bajos, si recordamos los parámetros definidos podemos

constatar que lo definimos con un valor máximo de 35% lo que obliga a la consulta a respetar ese

consumo de recursos. Vean que al final de la pantalla se muestra un incremento en el consumo,

esto se debe a que se modificó dentro de la pantalla de propiedades el valor máximo de consumo,

siendo ahora de un 55%.

Page 6: Sql tips 07_resource governor

GPI.- Confidencial

Tel: (506) 297 8132 – 244-5849 | De la Basílica de Santo Domingo, Heredia; 200 mts norte y 900 mts este. Apto 103-1100, Costa Rica

Vista completa del monitoreo ya con el aumento de los recursos de procesador en un 55%.

Espero que les haya sido de utilidad dicho artículo.

Atte: Adrián Miranda Cordero, DBA, Gpi Consultores.