执行特定作业,如何自动kill堵塞的语句

xingyu3838 2017-06-14 10:45:46
场景:运行一个重要的JOB(test),有可能被其他进程A,B.C...堵塞,但是需要确保其运行成功,需要强制KILL堵塞的脚本,请详细给出实现语句;
IF EXISTS(查询job(TEST)被A,B,C...堵塞)
begin
kill A,B,C...
end
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyu3838 2017-06-14
  • 打赏
  • 举报
回复
引用 1 楼 Merry0101 的回复:
dbo.sp_who_lock --查看当前死锁进程 kill spid --杀死死锁进程
这个是放进去job里面的,这样不能自动处理。。
0与1之间 2017-06-14
  • 打赏
  • 举报
回复
dbo.sp_who_lock --查看当前死锁进程 kill spid --杀死死锁进程
中国风 2017-06-14
  • 打赏
  • 举报
回复
把放在JOB里的T-SQL用到表,在动态视图里查找,条件加上锁类型,满足条件直接KILL掉,再执行的JOB命令
方法可放在一起,也可在JOB里分步执行
满足条件比如架构锁:request_mode=‘Sch-S’ 这样加
xingyu3838 2017-06-14
  • 打赏
  • 举报
回复
@中国风 谢谢大神解答,对非job引起的堵塞,用sys.dm_tran_locks 这个还是需要具体分析,如何做到自动运维?
中国风 2017-06-14
  • 打赏
  • 举报
回复
上面方法为有正在运行的JOB影响现有JOB时,可这样用 如果是你现有JOB运行,被其它进程非JOB时用 --用以下方法分析进程,有没有JOB用到的表,有就KILL掉进程 e.g.
USE master
go
select      
    request_session_id as spid,     
    resource_type,     
    db_name(resource_database_id) as dbName,     
    resource_description,     
    resource_associated_entity_id,    
    OBJECT_NAME(resource_associated_entity_id,DB_ID('PayCenter'))  AS TabName,
    request_mode as mode,     
    request_status as Status     
from      
    sys.dm_tran_locks 
中国风 2017-06-14
  • 打赏
  • 举报
回复
查看正在运行的JOB,直接停止就行了; e.g.
 DECLARE @is_sysadmin INT
    , @job_owner   sysname
    , @job_state   INT 
    , @job_id_as_char VARCHAR(36)
	,@Sql NVARCHAR(max)=''


    SET NOCOUNT ON
	IF OBJECT_ID('Tempdb..#xp_results') IS NOT NULL 
		DROP TABLE #xp_results
    CREATE TABLE #xp_results (job_id                UNIQUEIDENTIFIER NOT NULL,
                            last_run_date         INT              NOT NULL,
                            last_run_time         INT              NOT NULL,
                            next_run_date         INT              NOT NULL,
                            next_run_time         INT              NOT NULL,
                            next_run_schedule_id  INT              NOT NULL,
                            requested_to_run      INT              NOT NULL, -- BOOL
                            request_source        INT              NOT NULL,
                            request_source_id     sysname          collate database_default null,
                            running               INT              NOT NULL, -- BOOL
                            current_step          INT              NOT NULL,
                            current_retry_attempt INT              NOT NULL,
                            job_state             INT              NOT NULL)
  SELECT @is_sysadmin = ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0)
    SELECT @job_owner = suser_sname(suser_sid())
    INSERT INTO #xp_results
    EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
SELECT  @Sql=@Sql+'EXEC msdb.dbo.sp_stop_job @job_id='+QUOTENAME(a.job_id,'''')+';' FROM #xp_results AS a WHERE a.job_state=1 AND EXISTS(SELECT 1 FROM msdb.dbo.sysjobs WHERE job_id=a.job_id AND name IN('A',N'B','C'))
EXEC(@Sql)
奇虎360公司开源的Atlas是优秀的数据库中间件,美团点评DBA团队针对公司内部需求,在其上做了很多改进工作,形成了新的高可靠、高可用企业级数据库中间件DBProxy,已在公司内部生产环境广泛使用,较为成熟、稳定。 DBProxy的优点 支持多语言MySQL客户端 读写分离 负载均衡 Slave故障感知与摘除(Master需要MHA等其他联动) 后端连接池 自定义SQL拦截与过滤 流量分组与控制 丰富的监控状态 支持分表(分库版本正在内测中) Client IP限制 DBProxy对Atlas的改进 新增功能点 新增参数 backend-max-thread-running用于指定每个MySQL后台的最大thread running数 thread-running-sleep-delay用于指定在thread running数超过backend-max-thread-running时,客户端连接等待的时间 添加到黑名单中需要满足两个条件:SQL执行的时间和频率 提供了查看、修改、添加、删除黑名单的功能 黑名单管理提供了将黑名单保存到文件以及从文件中Load到内存中的功能 在手动添加黑名单时,只需要将用户的SQL语句输入,在内部自动转化成过滤条件,手动添加时是否生效由参数 manual-filter-flag 来控制,OFF:不生效,ON:立即生效 手动添加与自动添加两种情况下的过滤条件是否生效是分别由不同参数控制,这个要区分清楚。另外,也可以使用 admin 的命令来设置是否开启/关闭某个过滤条件 SQL执行的时间 由参数 query-filter-time-threshold 来指定,如果SQL执行时间超过此值,则满足条件 SQL执行频率 由参数 query-filter-frequent-threshold 来指定,如果SQL执行频率超过此值,则满足条件 频率就是在时间窗口内执行的次数。时间窗口则是由频率阈值和最小执行次数来计算出来的,当时间窗口小于60s时,扩展到60s 参数 access-num-per-time-window 用来指定在时间窗口内的最小执行次数,添加此参数是考虑到执行时间长的SQL在计算频率时同时参考其执行的次数,只有执行一定次数时才去计算其频率。当执行时间与执行频率都满足时条件时,会自动将查询作为过滤项放到黑名单中,加入到黑名单中是否生效由参数 auto-filter-flag 来控制,OFF:不生效,ON:立即生效 黑名单的管理 从库流量配置 指定查询发送到某个从库 参数动态设置(完善show proxy status/variables) 支持save config,动态增加、删除分表 响应时间percentile统计 统计最近时间段DBProxy的响应时间 kill session 支持DBProxy的admin接口kill session操作 backend平滑上下线 支持平滑的backend上下线 DBProxy非root用户启动 使用非root用户启动 admin账号的安全限制 admin账号密码的动态修改及host限制 增加异步刷日志的功能 增加日志线程、异步刷日志,提高响应时间 支持DBProxy平滑重启功能 支持SQL过滤的黑名单功能 支持对于MySQL后台的thread running限制功能 该功能通过在DBProxy内限制每个后台MySQL的并发查询,来控制对应MySQL的thread running数 当发向某个MySQL后台的的并发查询超过某个阈值时,会进行超时等待,直到有可用的连接,其中阈值与超时等待的时间都已经参数化,可以动态配置 set backend offline不再显示节点状态 支持set transaction isolation level 支持use db 支持set option语句 支持set session级系统变量 支持建立连接时指定连接属性 改进连接池的连接管理,增加超时释放机制。当连接池中的空闲连接闲置超过一定时

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧