El SQL Server 2008 incluye una nueva característica llamada el gobernador de recursos, el cual ofrece varias maneras de manejar sus cargas de trabajo en SQL 2008.

Básicamente, usted puede definir o limitar los recursos que pueden utilizar sus instancias de SQL Server mediante reglas, de esta manera, usted podrá hacer cosas como:

– Especificar una cantidad máxima de solicitudes para grupos específicos
– Cantidad máxima de tiempo (segundos) que puede correr una solicitud para grupos específicos
– Asignar % de memoria a grupos específicos
– Mínimo y máximo de % de CPU y % de memoria para grupos específicos
– Grado de paralelismo (cantidad de operaciones simultáneas que pueden ser ejecutadas) para grupos específicos

Por ejemplo, digamos que tengo un servidor con SQL Server 2008 recién instalado, y quiero separar claramente grupos de trabajo según su función, es decir, yo quiero establecer claramente grupos para los siguientes tipos de solicitudes:

– Las que son hechas por mi aplicación (quiero darles un mínimo de 50% de procesador y se caracterizarán por provenir de una aplicación llamada “MiAplicación” o desde el Management Studio)
– Las que son hechas desde mi servidor de reportes (quiero darles un máximo de 50% de procesador y se caracterizarán por ser enviadas desde mi servidor de Report Server)
– Las que son hechas por los administradores (quiero darles un máximo de 10% de procesador y se caracterizarán por ser enviadas utilizando el usuario “sa”)

La sintaxis para crear los grupos (sin especificar prioridades en el procesador de momento) sería la siguiente:

BEGIN TRAN

CREATE WORKLOAD GROUP groupAdhoc

CREATE WORKLOAD GROUP groupReports

CREATE WORKLOAD GROUP groupAdmin

GO

CREATE FUNCTION rgclassifier_v1() RETURNS SYSNAME

WITH SCHEMABINDING

AS

BEGIN

DECLARE @grp_name AS SYSNAME

IF (SUSER_NAME() = ‘sa’)

SET @grp_name = ‘groupAdmin’

IF (APP_NAME() LIKE ‘%MANAGEMENT STUDIO%’)

OR (APP_NAME() LIKE ‘%MiAplicacion%’)

SET @grp_name = ‘groupAdhoc’

IF (APP_NAME() LIKE ‘%REPORT SERVER%’)

SET @grp_name = ‘groupReports’

RETURN @grp_name

END

GO

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_v1)

COMMIT TRAN

GO

ALTER RESOURCE GOVERNOR RECONFIGURE

GO

En este punto, solo queda especificar las reglas de procesador para cada uno de los grupos. Para simplificar el ejemplo, solo crearemos la regla para las solicitudes de aplicación y queda a discreción del lector inferir las otras dos reglas:

BEGIN TRAN

ALTER RESOURCE POOL poolAdhoc

WITH (MIN_CPU_PERCENT = 50);

ALTER WORKLOAD GROUP groupAdhoc

USING poolAdhoc;

COMMIT TRAN

GO

ALTER RESOURCE GOVERNOR RECONFIGURE

GO


Hector Bejarano