统计当前JOB的执行计划

目前我的情况是job分散在多个服务器,近400个JOB都是单独执行的,为了统计出所有JOB的执行计划,我分了四种情况,分别如下:每天执行一次的,每天循环执行的,按星期和按月份执行的四类。SQL 语句如下:

SELECT JOB.name,SysSche.name, substring(right(‘00‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘00‘+cast(active_start_time as varchar(6)),6),3,2) active_start_time, 215 server_name, ‘Occurs every day at ‘+ substring(right(‘00‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘00‘+cast(active_start_time as varchar(6)),6),3,2) +‘.Schedule will be used starting on ‘ +cast(active_start_date as varchar(10)) DescriptionStr FROM [dbo].[sysjobs]  JOB LEFT JOIN [dbo].[sysjobschedules] SysJobSche ON JOB.job_id = SysJobSche.job_id LEFT JOIN [dbo].[sysschedules] SysSche ON SysJobSche.schedule_id=SysSche.schedule_id WHERE JOB.enabled=1 and SysSche.name is not null --20 and SysSche.freq_type = 4 and SysSche.freq_subday_type = 1  --- order by SysSche.freq_subday_interval

USE msdb GO

SELECT JOB.name JobName,SysSche.name ScheduleName, substring(right(‘000‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘000‘+cast(active_start_time as varchar(6)),6),3,2) StartTime, substring(right(‘000‘+cast(active_end_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘000‘+cast(active_end_time as varchar(6)),6),3,2)+‘:‘ +substring(right(‘000‘+cast(active_end_time as varchar(6)),6),5,2) EndTime, freq_subday_interval,‘Hours‘ unit, ‘215‘ ServerName,‘Occurs every day every ‘+cast(freq_subday_interval as varchar(2))+‘ hour(s) between ‘+ cast(active_start_time as varchar(10))+‘ and ‘+cast(active_end_time as varchar(10))+‘ .Schedule will be used starting on ‘+ cast(active_start_date as varchar(10)) DescriptionStr FROM [dbo].[sysjobs]  JOB LEFT JOIN [dbo].[sysjobschedules] SysJobSche ON JOB.job_id = SysJobSche.job_id LEFT JOIN [dbo].[sysschedules] SysSche ON SysJobSche.schedule_id=SysSche.schedule_id WHERE JOB.enabled=1 and SysSche.name is not null --20 and SysSche.freq_type = 4 and SysSche.freq_subday_type = 8  --- --order by SysSche.freq_subday_interval

union

SELECT JOB.name,SysSche.name, substring(right(‘000‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘000‘+cast(active_start_time as varchar(6)),6),3,2) active_start_time, substring(right(‘000‘+cast(active_end_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘000‘+cast(active_end_time as varchar(6)),6),3,2)+‘:‘ +substring(right(‘000‘+cast(active_end_time as varchar(6)),6),5,2) active_end_time, freq_subday_interval,‘Minutes‘ unit, ‘215‘  ServerName,‘Occurs every day every ‘+cast(freq_subday_interval as varchar(2))+‘ Minute(s) between ‘+ cast(active_start_time as varchar(10))+‘ and ‘+cast(active_end_time as varchar(10))+‘ .Schedule will be used starting on ‘+ cast(active_start_date as varchar(10)) DescriptionStr FROM [dbo].[sysjobs]  JOB LEFT JOIN [dbo].[sysjobschedules] SysJobSche ON JOB.job_id = SysJobSche.job_id LEFT JOIN [dbo].[sysschedules] SysSche ON SysJobSche.schedule_id=SysSche.schedule_id WHERE JOB.enabled=1 and SysSche.name is not null --20 and SysSche.freq_type = 4 and SysSche.freq_subday_type = 4 --每天 几分钟循环一次 --------------freq_subday_type = 4----

---------------------------------By weekly-------------------------------------------- SELECT JOB.name,SysSche.name,--freq_interval, substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),3,2) active_start_time, case freq_interval when 1 then ‘Sunday‘ when 2 then ‘Monday‘ when 4 then ‘Tuesday‘ when 8 then ‘Wednesday‘ when 16 then ‘Thursday‘ when 32 then ‘Friday‘ when 64 then ‘Saturday‘ when 62 then ‘Monday,Tuesday,Wednesday,Thursday,Friday‘ when 63 then ‘Monday,Tuesday,Wednesday,Thursday,Friday,Sunday‘ when 18 then ‘Monday,Thursday‘ when 19 then ‘Sunday,Monday,Thursday‘ when 3 then ‘Sunday,Monday‘ end ExcuteDate, 215 server_name, ‘Occurs every week on ‘+ case freq_interval when 1 then ‘Sunday‘ when 2 then ‘Monday‘ when 4 then ‘Tuesday‘ when 8 then ‘Wednesday‘ when 16 then ‘Thursday‘ when 32 then ‘Friday‘ when 64 then ‘Saturday‘ when 62 then ‘Monday,Tuesday,Wednesday,Thursday,Friday‘ when 63 then ‘Monday,Tuesday,Wednesday,Thursday,Friday,Sunday‘ when 18 then ‘Monday,Thursday‘ when 19 then ‘Sunday,Monday,Thursday‘ when 3 then ‘Sunday,Monday‘ end +‘ at  ‘+ substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),3,2) +‘. Schedule will be used starting on ‘ +cast(active_start_date as varchar(10)) DescriptionStr FROM [dbo].[sysjobs]  JOB LEFT JOIN [dbo].[sysjobschedules] SysJobSche ON JOB.job_id = SysJobSche.job_id LEFT JOIN [dbo].[sysschedules] SysSche ON SysJobSche.schedule_id=SysSche.schedule_id WHERE JOB.enabled=1 and SysSche.name is not null --20 and SysSche.freq_type = 8 and SysSche.freq_subday_type = 1  --- order by SysSche.freq_subday_interval

---------------------------------By Month-------------------------------------------- SELECT JOB.name,SysSche.name,freq_interval, substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),3,2) active_start_time, 215 server_name, ‘Occurs every month on day ‘+cast(freq_interval as varchar(3))+‘ at ‘+ substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),1,2)+‘:‘ +substring(right(‘0000‘+cast(active_start_time as varchar(6)),6),3,2) +‘. Schedule will be used starting on ‘ +cast(active_start_date as varchar(10)) DescriptionStr FROM [dbo].[sysjobs]  JOB LEFT JOIN [dbo].[sysjobschedules] SysJobSche ON JOB.job_id = SysJobSche.job_id LEFT JOIN [dbo].[sysschedules] SysSche ON SysJobSche.schedule_id=SysSche.schedule_id WHERE JOB.enabled=1 and SysSche.name is not null --20 and (SysSche.freq_type = 16 or SysSche.freq_type = 32) and SysSche.freq_subday_type = 1  --- order by SysSche.freq_subday_interval

不同的服务器需要修改serverName.

时间: 2024-12-28 05:16:07

统计当前JOB的执行计划的相关文章

统计信息不准导致执行计划出错跑不出结果,优化后只要1分钟

一天查看数据库长会话,发现1个sql跑得很慢,1个多小时不出结果,花了点时间把它给优化了. 优化前: SELECT 20131023, "A2"."ORG_ID", COUNT(DISTINCT NLSSORT(CASE "A2"."RES_TYPE" WHEN 'DP' THEN "A2"."RES_CODE" END, 'nls_sort=''BINARY''')), COUNT(D

SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段的统计信息做数据行数预估的算法原理,以及SQL Server 2012和SQL Server 2014该算法的差异情况, 这里暂时不涉及复合统计信息,暂不涉及统计信息的更新策略及优化相关话题,以及其他SQL Server版本计算方式. 统计信息是什么 简单说就是对某些字段的数据分布的一种描述,让SQ

Oracle获取执行计划方法

获取执行计划的6种方法 1. explain plan for获取: 2. set autotrace on : 3. statistics_level=all; 4. 通过dbms_xplan.display_cursor输入sql_id参数直接获取 5. 10046 trace跟踪 6. awrsqrpt.sql 适用场合分析 1.如果某SQL执行非常长时间才会出结果,甚至慢到返回不了结果,这时候看执行计划就只能用方法1: 2.跟踪某条SQL最简单的方法是方法1,其次就是方法2,方法2要执行

mysql查询优化器为什么可能会选择错误的执行计划

可能导致mysql优化器选择错误的执行计划的原因如下: A:统计信息不准确,mysql依赖存储引擎提供的统计信息来评估成本,但有的存储引擎提供的信息是准确的,有的引擎提供的可能就偏差很大,如:innodb因为其MVCC的架构,并不能维护一个数据表的行数的精确统计. B:执行计划中的成本估算不等同于实际执行的成本,所以即使统计信息精准,优化器给出的执行计划也可能不是最优的,如:有时候某个执行计划虽然需要读取更多的页,但它的实际执行成本却更小,因为如果这些页面都是顺序或者这些页面都在内存中,那么它的

MSSQLSERVER执行计划详解

序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博文给你:SqlServer性能检测和优化工具使用详细 ,sql语句的优化分析,T-sql语句查询执行顺序. 执行计划简介 1.什么是执行计划? 大哥提交的sql语句,数据库查询优化器,经过分析生成多个数据库可以识别的高效执行查询方式.然后优化器会在众多执行计划中找出一个资源使用最少,而不是最快的执行

【Oracle 优化器】自适应执行计划(Adaptive Execution Plans)

概述 自适应连接方法AJM AJM例 AJM的处理流程 自适应并行分配方法APDM APDM例 APDM的处理流程 关于分配方法 总结 参考 概述 我们知道在12c之前的版本,虽然有ACS.CFB等功能通过在SQL文执行时收集信息,来改善SQL文再次执行时的执行计划,但是在SQL文第一次执行时,只能根据统计信息做成的执行计划执行SQL,在执行过程中并不能改变. 如果统计信息不准确,访问的数据行数非常大并且选择的执行计划不是最优时,在SQL文第一次执行时可能会引起在灾难性的性能问题. 自适应执行计

oracle各种执行计划优缺点

一. 获取oracle执行计划的方法有6种,各自的优缺点如下,根据实际情况进行选择使用: explain plan for 方式 步骤1:explain plan for 后跟着SQL语句 步骤2:select * from table(dbms_xplan.display()); 优点: 1.不需要真正的去执行语句,快捷方便缺点: 1.虽然快捷但是因为没有真正去运行,所以没有输出运行时的相关统计信息(逻辑读,递归调用,物理读)2.不知道被处理的行数3.不知道表被访问的次数 set autotr

(转)MSSQLSERVER执行计划详解

原文地址:http://www.cnblogs.com/knowledgesea/p/5005163.html 序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博文给你:SqlServer性能检测和优化工具使用详细 ,sql语句的优化分析,T-sql语句查询执行顺序. 执行计划简介 1.什么是执行计划? 大哥提交的sql语句,数据库查询优化器,经过

为准确生成执行计划更新统计信息-analyze与dbms_stats

如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX SKIP SCAN)例子中,如果不对表EMPLOYEE 及索引收集一下统计信息,就不是INDEX SKIP SCAN策略了. 分析统计信息 analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有索引. 若不指定则全部都分析. ---table统计信息 analyze tab