【问题标题】:if a proc has last step as starting another proc does the first proc wait for the other one to finish before finishing?如果一个 proc 在启动另一个 proc 时有最后一步,第一个 proc 在完成之前是否等待另一个 proc 完成?
【发布时间】:2017-10-10 16:48:39
【问题描述】:

所以我有这个 proc 执行一堆删除和插入,然后在最后一步它在不同的服务器上启动另一个 proc。 我的问题是:第一个过程是否等待第二个过程完成?或者它只是启动另一个过程并完成? 因为我的 vb 代码中不断出现 sql 超时,并且不确定这是否是原因

【问题讨论】:

  • 我没有答案,但这可能更适合 dba.SE。您还应该标记这是用于哪个数据库。例如,SQL Server 中的存储过程可能与 Mongo 中的行为不同。
  • 尝试增加超时时间?这是一个死锁问题吗?运行 SQL 跟踪,你能看到它有多远吗? tbh,我们可以处理更多细节,比如一些 VB 代码。
  • 无权访问 vb 代码 atm。我确实将超时时间从 30 秒增加到 2 分钟,但这并没有帮助。
  • 超时...我猜是性能或锁定错误。在这种情况下您是否可以访问 SQL 代码,您可以在数据库上运行一些监控工具吗?
  • 它看起来像我通过运行启动第一个 proc 的作业进行了临时修复。我不是每 2 分钟运行一次,而是每 5 分钟运行一次,到目前为止还没有出现问题。

标签: sql tsql stored-procedures store database-administration


【解决方案1】:

第一个存储过程将等待第二个存储过程执行。这允许您使用从第二个过程返回的数据、处理错误并返回适当的值。

如果您不想要这种行为,请将第二个存储过程包装在一个作业中并触发该作业:

EXEC msdb.dbo.sp_start_job @job_name='RunMyProc'

【讨论】:

  • ohhg 我不需要那样,有没有办法让第一个过程完成而不等待第二个?因为它们都在不同的服务器和第一个 proc 锁表上。
  • 我为此添加了一种技术。
  • 但是我怎样才能将参数放入第二个 proc 的作业中?
  • 您必须编写作业脚本才能执行此操作,因此您可以注入值。
  • 你能详细说明一下吗?我该怎么做?每次我想启动它时,我是否需要使用动态 sql 来创建一个带有新 store proc 参数的作业?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多