Sunday, November 13, 2016

Uso de Resource Governor con SQL Server 2016 R Services

SQL Server 2016 incluye nuevas características de análisis avanzado,  dichas características son muy útiles,  sin embargo, debido a que esas características utilizan mucha memoria y mucho  y mucho procesador se podría podría dar el caso que se consumen todos los recursos de una instancia de sql server.

Para controlar la cantidad de recursos que se asignan a la ejecución de scripts de R  se puede utilizar la característica del controlador de recursos conocida como resource governor.  El siguiente estatuto SQL obtiene la configuración actual que tiene el sql server para la ejecución y control de recursos y de los recursos.

-- Se verifica la cantidad de recursos que están asignados por default
SELECT * FROM sys.resource_governor_resource_pools WHERE name = 'default'

El siguiente estatuto verifica Cuáles son los recursos asignados para el pool recursos externos.  recordemos que los estatutos de R  son ejecutados como scripts externos asi que debemos utilizar un pool dedicado para esa ejecución

SELECT * FROM sys.resource_governor_external_resource_pools
WHERE name = 'default'
El siguiente estatuto modifica la asignación de recursos para que el máximo de utilización sea de un 70% de la memoria Total que tenga el servidor.  De esta forma si deseamos limitar la cantidad de memoria que está asignada lo podemos hacer con el estatuto que se muestra a continuación.

ALTER RESOURCE POOL "default" WITH (max_memory_percent = 70);  
Si lo que se desea es limitar la cantidad de memoria que es utilizada por los estatutos de scripts externos de R  entonces debemos modificarlo mediante el uso de Pool de recursos externos. El  el siguiente comando modifica la asignación de recursos para que la cantidad de memoria asignada a los estatutos externos no exceda un 50%.


ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 50);


Una vez que hemos hecho esos cambios  debemos ejecutar el siguiente Comando para que dichos cambios sean efectivos.

ALTER RESOURCE GOVERNOR reconfigure;
También tenemos la opción de crear una configuración especial para la asignación de recursos de estatuto de scripts externos. Por Ejemplo el siguiente Comando Establece que para los escritos externos se establezca un máximo de uso de memoria de un 30%.  También se crea un grupo en donde le establecemos la importancia que va a tener con respecto al uso de los recursos eso lo establecemos mediante la creación de un workload group.


CREATE EXTERNAL RESOURCE POOL pool_scripts_externos WITH (max_memory_percent = 30);

CREATE WORKLOAD GROUP grupo_scripts_externos WITH (importance = medium)
USING "default", EXTERNAL "pool_scripts_externos";  

Para continuar con la configuración debemos crear una función de clasificación en los comandos siguientes vamos a crear dicha función de clasificación,  pero primero debemos aplicar los cambios que hemos creado anteriormente lo cual se realiza con los siguientes comandos.


ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL);  
ALTER RESOURCE GOVERNOR reconfigure;  

A continuación vamos a crear una función de clasificación,  esa función nos va a servir para poder identificar los programas que Ejecutan código R  Y de esa forma le vamos a asignar un grupo de recursos,  de esta forma podemos filtrar aquellas solicitudes que vienen de las aplicaciones tales como R Studio  le asignamos los recursos correspondientes.



USE master  
GO  
CREATE FUNCTION aplicaciones_R_Externas()  
RETURNS sysname  
WITH schemabinding  
AS  
BEGIN  
   IF program_name() in ('Microsoft R Host', 'RStudio') RETURN 'grupo_scripts_externos';  
   RETURN 'default'  
   END;  
GO  

Una vez que la función ha sido creada tenemos que volver a configurar el grupo de recursos y le asignamos la función de clasificación que será utilizada para identificar las llamadas que se están haciendo a la instancia de sql server y se le van a asignar los grupos de recursos correspondientes a las aplicaciones externas que ejecuten lenguajes R. El  comando para poder aplicar los cambios se muestra a continuación:
ALTER RESOURCE GOVERNOR WITH  (classifier_function = dbo.aplicaciones_R_Externas);  
ALTER RESOURCE GOVERNOR reconfigure;  
go  
Si deseamos verificar que los cambios han sido aplicados de forma correcta tenemos que ejecutar los siguientes comandos:


SELECT * FROM sys.resource_governor_workload_groups;  

SELECT * FROM sys.resource_governor_external_resource_pools;  


En resumen en este artículo hemos mostrado la forma en que podemos controlar la cantidad de recursos que se asigna a la ejecución de scripts externos y podemos controlar la cantidad de memoria también la cantidad de semen que van a utilizar este tipo de ejecución de scripts externos.  de esta forma podemos controlar el uso de los recursos de nuestro servidor SQL Server

No comments:

SQL Server 2016 Stretch Databases

El SQL Server Stretch Database permite que los datos históricos o de bitácoras puedan ser movidos hacia Azure, específicamente permite mover...