首页 > 数据库 > SQL Server > 链接服务器查询导致的阻塞




会话331对表执行UPDATE操作,阻塞其它会话对该表的写入和查询,这是正常的,也是好理解的。分析的重点是为什么执行时间这么长,而且全部都是链接服务器的等待(OLEDB)。

下载 并 打开执行计划 , 看到各表之间使用嵌套循环来关联。嵌套循环联接也称为嵌套迭代,它将一个联接输入用作外部输入表(显示为图形执行计划中的顶端输入),将另一个联接输入用作内部(底端)输入表。外部循环逐行处理外部输入表。内部循环会针对每个外部行执行,在内部输入表中搜索匹配行。因此推断链接服务器查询循环次数太多导致执行时间长 。 关于 嵌套 循环联接 和其他 的联接方式 参考 官方文档: https://docs.microsoft.co m/zh- cn/sql/relational-database s/performance/joins?view=sql-server-ver16。

在链接服务器的目标端8.56中,查看会话589在不同采集时间点的活动会话,看到该会话的请求开始时间、最后请求开始时间、最后请求结束时间三个数据是变化的, 执行的SQL语句是一样的,说明在循环执行同一查询语句。粗略计算执行了3000次左右,从而验证推断是正确的。


链接服务器的查询要跨越网络,响应时间是毫秒甚至是秒级的,如果交互次数太多就会导致执行时间指数级的增加。 不能把它当本地查询一样使用,使用时一定 要仔细分析执行计划 。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70023658/viewspace-2940671/ ,如需转载,请注明出处,否则将追究法律责任。