zoukankan      html  css  js  c++  java
  • 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]),我没找到。

  • 相关阅读:
    如何对抗信息茧房?
    术语
    2021.07.17软件更新公告
    【C#】C#中使用GDAL3(二):Windows下读写Shape文件及超详细解决中文乱码问题
    【C#】C#中使用GDAL3(一):Windows下超详细编译C#版GDAL3.3.0(VS2015+.NET 4+32位/64位)
    k8s使用私有镜像仓库
    四、Abp vNext 基础篇丨领域构建
    Abp vNext 番外篇-疑难杂症丨认证授权
    三、Abp vNext 基础篇丨分层架构
    知识全聚集 .Net Core 目录篇
  • 原文地址:https://www.cnblogs.com/mapstar/p/13186990.html
Copyright © 2011-2022 走看看