TN305WAS - Diagnóstico Rendimiento BBDD

TN305WAS - Diagnóstico Rendimiento BBDD

En esta TN usaremos el conocido Procedure sp_WhoIsActive.sql de SQL, que encontraréis adjunto en este documento. (2007-2019 © Adam Machanic) .  Al final, se trata de una potente herramienta para analizar el rendimiento y la actividad de SQL Server. Ideal para para administradores de sistemas o desarrolladores que necesiten diagnosticar problemas en el servidor, como lentitudes o consumos excesivos de las BBDD.

Info
  1. ¿Qué hace sp_WhoIsActive?

  2. Crear un Stored Procedure en la BBDD 

  3. Ejecutar el sp_WhoIsActive Procedure

  4. Ejemplos de filtros y parámetros en el Procedure

  5. Automatizar la ejecución y guardarlo en un archivo

  6. Actualizar el Procedure sp_WhoIsActive


1. ¿Qué hace sp_WhoIsActive?

sp_WhoIsActive proporciona una vista detallada de las sesiones y procesos actualmente activos en la base de datos SQL Server. Incluye información útil como:

Sesiones Activas:
Muestra las sesiones actualmente conectadas y ejecutando consultas.
Se puede filtrar por sesión, base de datos, programa, usuario, etc.


Consultas y Bloqueos:
Identifica consultas que están en ejecución y su estado.
Muestra bloqueos y bloqueadores para detectar posibles problemas de concurrencia.


Uso de Recursos:
Información sobre uso de CPU, memoria, y tiempo de espera.
Estadísticas de IO y duración de las consultas.


Información de Bloqueo y Esperas:
Muestra detalles sobre las esperas (waits) que afectan a las consultas.
Ayuda a entender por qué las consultas están bloqueadas o lentas.


Plan de Ejecución y Parámetros:
Se puede ver el plan de ejecución de las consultas activas haciendo click encima de la sql_text.




2. Crear un Stored Procedures en la BBDD
Para implementar y utilizar un Stored Procedures sp_WhoIsActive en SQL Server desde SQL Server Management Studio (SSMS), sigue estos pasos:

- Abrir el Archivo en SSMS:
Abre el archivo sp_whoisactive.sql que viene adjunto en esta TN Puedes copiar su contenido o simplemente abrirlo directamente en una nueva ventana de consulta en SSMS (Ctrl+O). 

- Ejecutar el Script:
Selecciona toda la consulta (Ctrl+A), elegir la BBDD donde queremos utilizarlo y luego ejecuta el script (F5). Esto creará un Stored Procedures en tu servidor.



- Verificar que se creó correctamente:
En la base de datos donde lo ejecutaste, navega usando el Explorador de Objetos:

Base de Datos > Programmability > Stored Procedures, y busca dbo.sp_WhoIsActive en la lista de Stored Procedures.




3. Usar sp_WhoIsActive
Para ejecutar el Procedure, es tan simple como crear una nueva Query;

Quote      EXEC sp_WhoIsActive;


Esto mostrará una lista de las sesiones activas en tu servidor con detalles como bloqueos, uso de recursos, el usuario, la query de ese momento, la maquina desde donde se lanza la consulta... de todas las BBDD que tenga el Servidor;



4. Ejemplos de filtros y parámetros en el Procedure
Se puede lanzar la query utilizando parámetros del Procedure para filtrar o ver más info detallada. Algunos ejemplos útiles:


- Filtrar por Base de Datos:
EXEC sp_WhoIsActive @filter_type = 'database', @filter = 'NombreDeTuBaseDeDatos';

- Incluir el SQL Completo:
EXEC sp_WhoIsActive @get_full_inner_text = 1;

- Mostrar Bloqueos :
EXEC sp_WhoIsActive @get_locks = 1;

- Información adicional de la memoria usada;
EXEC sp_WhoIsActive @get_memory_info= 1;

- Ver los parámetros y descripciones del Procedure;
EXEC sp_WhoIsActive @help = 1;




5. Automatizar la ejecución y guardarlo en una tabla
Si deseas, se puede automatizar la ejecución de este Procedure para obtener información periódica e incluso guardarlo en una tabla:

- Crear una tabla para almacenar los resultados Antes de ejecutar sp_WhoIsActive;

CREATE TABLE WhoIsActiveResults (
    session_id INT,
    login_time DATETIME,
    status NVARCHAR(50),
    query NVARCHAR(MAX),
    cpu_time INT,
    total_elapsed_time INT,
    -- Agrega más columnas según sea necesario
    capture_time DATETIME
);


- Crear un Procedure para insertar los resultados de sp_WhoIsActive en esta tabla;

CREATE PROCEDURE CaptureWhoIsActiveResults
AS
BEGIN
    -- Insertar los resultados en la tabla temporal
    INSERT INTO WhoIsActiveResults (session_id, login_time, status, query, cpu_time, total_elapsed_time, capture_time)
    EXEC sp_WhoIsActive;
END


- Crea un Job en SQL Server Agent para que ejecute el Procedure periódicamente.
Alert
*La opción de crear Jobs. no está disponible para versiones SQL Server Express

En la pestaña Steps, seleccionar el Type T-SQL y añadir el en Command;
 EXEC CaptureWhoIsActiveResults;


6. Actualizar el Procedure sp_WhoIsActive

Si el procedimiento almacenado es una versión antigua y/o estás usando una SQL muy moderna es posible no te funcione correctamente, siempre puedes comprobar en sus fuentes oficiales si estás en la ultima versión del Procedure y descargar en caso sea necesario en su repositorio;

  • URL oficial: GitHub - sp_WhoIsActive
  • Descarga la versión más reciente del script, elimina la versión existente en tu servidor y vuelve a crear el procedimiento almacenado ejecutándolo en SSMS.


    • Related Articles

    • TN288WAS - Mantenimiento BBDD de GR

      Proceso de mantenimiento de la BBDD de GR usando el SQL Server Management Studio (SSMS). - Asegurarse de que toda comunicación con la BBDD de GR está parada como IDEs, SMC o ObjectViewer abiertos. - Entrar al SSMS, ejecutar primero el script , 1. ...
    • TN303 OPC - Escritura a SQL o txt mediante OPCRouter

      Escritura a SQL mediante OPCRouter Introducción En este documento se pretende asentar las bases del Software, de lectura y escritura, sobre todo, teniendo en cuenta que se quiere escribir y/o a o de una base de datos SQL. De manera que tendremos un ...
    • TN155SQL - Guía de Instalación de Microsoft SQL Server 2012

      En este documento se plantean los pasos a seguir para la correcta instalación de Microsoft SQL Server 2012. La versión de SQL Server 2012 sólo está soportada a partir de System Plaform 2012 R2 tanto en 32 como en 64 bits. De todos modos, la versión ...
    • FAQ000121 - Problema al conectarse a la base de datos AVEVA Edge 2020

      PROBLEMA AVEVA Edge 2020 Embedded no muestra datos en el Grid Control o diferentes controles no funcionan como se esperaría. El problema también puede ocurrir al conectarse a una base de datos, en general. Database: Error: Could not load file or ...
    • TN152SQL - Guía de Instalación de Microsoft SQL Server 2008 R2 con orientación a productos Wonderware

      En este documento se plantean los pasos a seguir para la correcta instalación de Microsoft SQL Server 2008 R2 con Service Pack 1. La versión soportada de SQL Server 2008 R2 SP1 varía en función de la versión de System Plaform utilizada. - Wonderware ...