En días pasados estaba identificando posibles cuellos de botella en una base de datos SQL Server 2012, pues se reportaban problemas serios de rencimiento en la aplicación a la misma hora todos los días de la semana.
Aunado a la configuración de contadores de rendimiento, ejecución de SQL Server Profiler, utilicé algunas de las vistas de Su Magestad Glen Berry de SQLSkills para identificar cuales procesos automáticos se ejecutan durante el día. La vista original de una idea general de los Jobs que se ejecutan en SQL Server. Sin embargo la vista no descarta aquellos jobs inactivos y tampoco muestra las horas de ejecución. por lo que me tomé la libertad de modificar la vista e incluir un par de columnas necesarias. La fecha y hora de la próxima ejecución del Job, además de modificar para que únicamente despliegue aquellos Jobs activos. De esta forma podemos identificar claramente cuales son los procesos que se ejcutan en determinado momento.
Ya de esta manera logramos identificar cuales procesos nos estaban generando los problemas de sobrecarga en el servidor de base de datos y moverlos a horas en que la carga es menor y de paso afinar los SP que se ejecutan.
Acá les dejo el script modificado.
--******************************************************************************
--* Copyright (C) 2014 Glenn Berry, SQLskills.com
--* All rights reserved.
--*
--* For more scripts and sample code, check out
--* http://sqlskills.com/blogs/glenn
--*
--* You may alter this code for your own *non-commercial* purposes. You may
--* republish altered code as long as you include this copyright and give due credit.
--*
--*
--* THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
--* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
--* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
--* PARTICULAR PURPOSE.
--*
--******************************************************************************
--Modified by Adrian Miranda in order to include next Exection Date, time and status
-- Get SQL Server Agent jobs and Category information (Query 4) (SQL Server Agent Jobs)
SELECT sj.name AS [JobName], sj.[description] AS [JobDescription], SUSER_SNAME(sj.owner_sid) AS [JobOwner],
sj.date_created, sj.[enabled],jq.next_run_date,CASE WHEN LEN(jq.next_run_time)= 6 THEN SUBSTRING(CAST((jq.next_run_time) AS VARCHAR),1,2) + ' hour(s), ' ELSE SUBSTRING(CAST((jq.next_run_time) AS VARCHAR),1,1) + ' hour(s), ' END + SUBSTRING(CAST(( jq.next_run_time) AS VARCHAR),3,2) + ' min ' + SUBSTRING(CAST(( jq.next_run_time) AS VARCHAR),5,2) + ' sec' AS Next_Run_Time, sj.notify_email_operator_id, sc.name AS [CategoryName]
FROM msdb.dbo.sysjobs AS sj WITH (NOLOCK)
INNER JOIN msdb.dbo.syscategories AS sc WITH (NOLOCK)
ON sj.category_id = sc.category_id
INNER JOIN msdb.dbo.sysjobschedules jq
ON sj.Job_id = jq.job_id
INNER JOIN msdb.dbo.sysschedules s ON s.schedule_id=jq.schedule_id
WHERE sj.[enabled] = 1 AND s.enabled=1
ORDER BY sj.name OPTION (RECOMPILE);
No hay comentarios:
Publicar un comentario