设计一组作业以使它们永远不能同时运行的好方法是什么?
我正在寻找一个通用概念,例如信号量,它可以更轻松地确保某些作业永远不会同时运行。
例如,我正在考虑“信号表”。当作业开始时,它会设置信号,并在结束时重置信号。另外,每个作业都需要等待信号被设置。(如何实现CPU友好的等待?)但是,当作业崩溃时,必须有一个解决方案来自动重置信号,否则作业永远不会启动。
我们有 4 个工作,负责进行各种更新、导入、计算。它们都是由调度程序运行的,此外,如果需要特殊运行,其中一些也可以由超级用户手动启动。但是,它们不应该同时运行,因为这通常会导致锁定甚至死锁,并且数据库无法正确响应用户。
编辑:它是一个数据仓库,正在收集和整合来自多个外部数据源的数据。每个作业负责另一个数据源,如下所示:
我已经设置了探查器来捕捉这些死锁事件:
勾选所有可用列(TextData、LoginName、SPID 等)
到目前为止,我能够捕捉到一些僵局。
然而,有时我只会得到一个死锁链列表(比如几秒钟内有 30 个事件),但是没有死锁,也没有捕获到死锁图。
这样的案例意味着什么?是否发生了死锁?或者就像“僵局即将来临”但可以解决?
我想在 SQL Agent 中运行一个后台作业,它将清理大量数据并运行多天。
基本上,一张表会删除4亿条记录。删除在循环中运行,因此总是删除大约 100.000 条记录的批次。
在删除过程中,此表中不会修改任何其他内容。
是否可以降低此类作业的 CPU 优先级,以免降低系统速度?
我目前正在使用分析器捕获死锁事件。(死锁,死锁图,死锁链)。
到目前为止一切顺利,但为此,客户端计算机需要不断运行和在线。
==> 有没有办法直接在 SQL Server 上捕获和收集死锁事件作为后台作业?