SQL Server 2016 Monitoreo de R Services con DMVs

SQL Server 2016 incluye características para ejecutar scripts de analítica avanzada dentro de la base de datos estos scripts son basados en el lenguaje R.

En este blog post vamos a ver cuáles son las vistas administrativas que podemos utilizar para poder monitorear el desempeño de nuestro servidor.

estas vistas administrativas nos dan información acerca de la cantidad de Script que se están ejecutando en este momento así como la duración de cada uno de ellos,  de esta forma podemos determinar Cuál es el impacto que tiene la ejecución de Scripts de R dentro de nuestra instancia de base de datos.

A continuación mostramos las vistas administrativas más comunes para monitorear el desempeño de los R Scripts.

-- DMV sys.dm_os_performance_counters
--  esta vista devuelve una fila por cada contador de desempeño que está siendo utilizado dentro del servidor

--Total Executions: Indica la cantidad de procesos iniciados localmente o de forma remota
--Parallel Executions:  indica la cantidad de veces que un script incluye una especificación de ejecución en paralelo
--Streaming Executions:  indica la cantidad de veces que fue utilizado la función de flujo de datos  
--SQL CC Executions:  esta columna indica la cantidad de R Scripts que fueron iniciados remotamente y que se utilizó a sql server como un contexto de ejecución
--Implied Auth. Logins:  esta columna nos indica la cantidad de veces que se utilizó autenticación implícita
--Total Execution Time (ms):  esta columna indica el tiempo que duró la ejecución desde su llamada hasta la finalización de la ejecución como tal
--Execution Errors:  indica la cantidad de errores que se presentaron durante la ejecución del script.



SELECT * from sys.dm_os_performance_counters
WHERE object_name LIKE '%Scripts%'

-- DMV sys.dm_external_script_requests

Esta vista administrativa devuelve una fila por cada cuenta de proceso que está siendo utilizada para ejecutar un Script externo.  debe resaltarse que la cuenta con la cual ejecuta el proceso no son los mismos credenciales de la persona que está enviando el script para su ejecución.

Esto quiere decir que si una persona envía varios trabajos para ser ejecutados dentro del servidor todos estos trabajos van a estar siendo ejecutados Bajo el mismo proceso utilizando una única cuenta de trabajo que fue asignada a todos los scripts enviados por el usuario. La salida de esta vista administrativa nos devuelve la siguiente información:

  • Identificador único qué se utiliza para identificar el script que se está ejecutando
  • Lenguaje en el cual está escrito el script,  en nuestro caso sería el lenguaje R
  • Un indicador que especifica si se están ejecutando operaciones en paralelo
  • El nombre de la cuenta de trabajo que se está utilizando para la ejecución, esta la cuenta es que utilizada por el servicio LaunchPad

SELECT external_script_request_id
 , [language]
 , degree_of_parallelism
 , external_user_name
FROM sys.dm_external_script_requests;

El resultado de la ejecución se ve en la siguiente figura,  podemos notar que en este momento sólo se está ejecutando un script y que el lenguaje de programación es el lenguaje R.


-- Obtener información sobre los scripts que están en ejecución

La siguiente consulta devuelve información acerca de todas las operaciones de lenguaje r que se están ejecutando en este momento.  Devuelve información valiosa,  por ejemplo identificación de la sesión,  información sobre si hay bloqueos,  base de datos que está siendo utilizada donde se están ejecutando el Script,  también información acerca de tiempo de espera, Tiempo que tardó la ejecución Información acerca de cantidad de lecturas y escrituras que Está realizando la consulta.

select r.session_id, r.blocking_session_id, r.status
    , db_name(s.database_id) as database_name, s.login_name
    , r.wait_time, r.wait_type, r.last_wait_type
    , r.total_elapsed_time, r.reads, r.logical_reads, r.writes
    , er.language as script_type, er.degree_of_parallelism, er.external_user_name
 from sys.dm_exec_requests as r
 join sys.dm_external_script_requests as er
   on r.external_script_request_id = er.external_script_request_id
 join sys.dm_exec_sessions as s
   on s.session_id = r.session_id





-- DMV sys.dm_external_script_execution_stats
Esta vista administrativa nos permite conocer Cuáles han sido las funciones de analíticas avanzadas que han sido utilizadas en la ejecución de Script que incluyen lenguaje R.  el resultado de esta consulta es una lista de las distintas bibliotecas de análisis avanzado y la cantidad de veces que han sido ejecutadas durante todo el periodo que ha estado en ejecución la instancia de sql server.  en la siguiente imagen se muestra el resultado de la ejecución y podemos ver que el algoritmo de bosques ha sido ejecutada por lo menos 132 veces.

SELECT counter_name, counter_value   
FROM sys.dm_external_script_execution_stats   
WHERE language = 'R';




Saludos,

Ing. Eduardo Castro, PhD
Microsoft Data Platform MVP

Comments

Popular posts from this blog

Cómo identificar consultas más pesadas en SQL Server

Permitiendo la administración de los jobs a usuarios que no son System Administrators en SQL Server Agent 2005 o superior

FileTable en SQL Server 2012