小编ask*_*otl的帖子

如何防止 SQL 代理作业并行运行

设计一组作业以使它们永远不能同时运行的好方法是什么?

我正在寻找一个通用概念,例如信号量,它可以更轻松地确保某些作业永远不会同时运行。

例如,我正在考虑“信号表”。当作业开始时,它会设置信号,并在结束时重置信号。另外,每个作业都需要等待信号被设置。(如何实现CPU友好的等待?)但是,当作业崩溃时,必须有一个解决方案来自动重置信号,否则作业永远不会启动。

我们有 4 个工作,负责进行各种更新、导入、计算。它们都是由调度程序运行的,此外,如果需要特殊运行,其中一些也可以由超级用户手动启动。但是,它们不应该同时运行,因为这通常会导致锁定甚至死锁,并且数据库无法正确响应用户。

编辑:它是一个数据仓库,正在收集和整合来自多个外部数据源的数据。每个作业负责另一个数据源,如下所示:

  • 作业 #1 每 15 分钟运行一次
  • 工作 #2 每 3 小时一次
  • 作业 #3 和作业 #4 每天运行一次,或者在超级用户启动时额外运行。

sql-server jobs sql-server-2016

5
推荐指数
1
解决办法
1997
查看次数

死锁链,但没有死锁?

我已经设置了探查器来捕捉这些死锁事件:

  • 死锁图
  • 锁:死锁
  • 锁:死锁链

勾选所有可用列(Te​​xtData、LoginName、SPID 等)

到目前为止,我能够捕捉到一些僵局。

然而,有时我只会得到一个死锁链列表(比如几秒钟内有 30 个事件),但是没有死锁,也没有捕获到死锁图。

这样的案例意味着什么?是否发生了死锁?或者就像“僵局即将来临”但可以解决?

sql-server deadlock sql-server-2014

3
推荐指数
1
解决办法
325
查看次数

是否可以降低作业的 CPU 优先级?

我想在 SQL Agent 中运行一个后台作业,它将清理大量数据并运行多天。

基本上,一张表会删除4亿条记录。删除在循环中运行,因此总是删除大约 100.000 条记录的批次。

在删除过程中,此表中不会修改任何其他内容。

是否可以降低此类作业的 CPU 优先级,以免降低系统速度?

sql-server sql-server-2014

3
推荐指数
1
解决办法
394
查看次数

在后台作业中捕获死锁事件?

我目前正在使用分析器捕获死锁事件。(死锁,死锁图,死锁链)。

到目前为止一切顺利,但为此,客户端计算机需要不断运行和在线。

==> 有没有办法直接在 SQL Server 上捕获和收集死锁事件作为后台作业?

sql-server deadlock sql-server-2014

0
推荐指数
1
解决办法
71
查看次数