SqlServer 作业计时执行存储过程,杀超时进程

实现目标: 10秒执行一次存储过程,杀掉持续15秒的进程


第一步:写存储过程kill_lock_ps,代码如下
    IF(1=0) --开启1,关闭0
    BEGIN
        create table #tmp(id int IDENTITY (1,1) not null, spid varchar(20), tableName varchar(200), startTime datetime)
        insert into #tmp select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName, er.start_time startTime    from sys.dm_tran_locks lk, sys.dm_exec_requests er where lk.request_session_id=er.session_id and lk.resource_type='OBJECT'

        Declare @str NVarchar(4000) --存查询语句
        Declare @spid Varchar(500)    --进程号
        Declare @tableName Varchar(200)
        Declare @startTime datetime --开始时间
        Declare @count int            --总记录数      
        Declare @i int
        Set @i = 0 
        Select @Count = Count(1) from #tmp
        While @i < @Count 
            Begin
               Set @str = 'select top 1 @spid = spid,@tableName=tableName,@startTime=startTime from #tmp where id not in (select top ' + Str(@i) + 'id from #tmp)'
               Exec Sp_ExecuteSql @str,N'@spid Varchar(20) OutPut, @tableName Varchar(200) OutPut, @startTime DateTime OutPut',@spid Output,@tableName Output,@startTime Output

                 if ((GETDATE() - @startTime) > '1900-01-01 00:00:15.000' and @tableName is not NULL)
                 begin
                    declare @sql varchar(1000)
                    set @sql='kill '+cast(@spid as varchar)
                    exec(@sql)
                    
                    Select '已杀进程:',@spid,@tableName,@startTime,@i,@Count,(GETDATE() - @startTime) --一行一行显示出来
                 end
               Set @i = @i + 1
            End
        drop table #tmp
    END

第二步:设置定时作业

1、打开本地数据连接,在左边资源管理器中找到Sql Server代理(在最下面)

2、【新建】一个作业

3、在【常规】中填写名称即可,说明看个人习惯

4、打开【步骤】,点击【新建】,填写【名称】,选择【数据库】,在命令空白处填写T-sql语句,然后点分析。

5、打开【计划】,点击【新建】,设置你想要的定时计划,然后保存。

6、点击【Sql Server代理】,右键启动,即定时作业启动。

7、如果想让定时作业开机自动启动,则在 服务中找到SQL Server 代理 (MSSQLSERVER),设置成【自动】模式

 

第三步:把定时作业生成脚本

方法1、点击【SQL Server 代理】下的作业,选中你创建的作业——右键编写作业脚本——create到,然后复制脚本语言即可

方法2、发现有博主这样写的(管理-SQL Server代理-作业(鼠标右键)-所有任务-生成SQL脚本-保存到下的某个sql文件 [Page]),我没找到。

 

posted @ 2020-06-24 12:42  mapstar  阅读(739)  评论(0编辑  收藏  举报