sp_execute_remote有时不能返回-为什么?/解决方案



我有一个广泛的Azure SQL存储过程,定期从Azure数据工厂调用,它正在使用sp_execute_remote查询同一地区的另一个Azure SQL数据库。在99.5%的情况下,这可以正常工作,但在某些情况下,对sp_execute_remote的调用永远不会返回。

访问外部资源是通过数据库范围的凭据,使用授予只读权限的本地SQL登录。调用的形式为

insert into ##newrecs exec [sp_execute_remote] @external_server, @stmt, <params>

我已经要求DBA查看一下发生挂起时外部数据库上正在运行什么,但是他说他看不出有什么问题。我们所知道的与失败不一致。

调用进程显示状态为RUNNABLE,命令为EXECUTE。看看sys。Dm_tran_locks显示我的进程对存储的凭据和结果的临时表具有锁。没有其他资源对相同的资源有锁。

如果我捕获@stmt并"手动"启动相同的远程查询,它会正常返回。

有人对

有什么看法吗?
  1. 为什么会发生这种情况
  2. 如何从主叫端检测/恢复情况
  3. 如何更深入地进行"远程"诊断Azure数据库(这是一个金融系统的生产环境,所以我不能太乱)。

这实际上是Azure SQL中的一个bug。在支持升级后,微软在2021年12月左右修复了这个问题。

相关内容

  • 没有找到相关文章

最新更新