暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server 执行计划优化一例

云趣科技 2016-10-27
754

背景

SQL Server 数据库在批量数据同步时,出现严重的锁等待。从面板页面发现出现负载波峰,超过一百个会话处于蓝色的阻塞等待。


分析

从数据库的顶级活动会话中可以看到,出现阻塞等待的会话正在执行一条更新语句,阻塞等待类型为LCK_M_U
,会话因为更新锁被阻塞。


从 SQL 的详情页面发现 SQL 的平均执行时间为17毫秒,平均 CPU 时间为4毫秒,因此 SQL 执行时大部分时间处于等待状态。


从 SQL 的执行计划可以发现异常,条件[requestid]=@2
的访问路径为 Clustered index scan, 而不是 index seek,requestid
列上很可能没有索引,因此 SQL Server 选择对主键索引进行全扫描。

  • index scan: 需要扫描索引上的所有数据,相当于 Oracle 的index full scan
    .

  • index seek:通过索引树精确命中满足过滤条件的记录,相当于 Oracle 的 index unique scan
    或者index range scan
    .


从表结构上可以确认表workflow
requestid
上没有索引,索引导致对主键索引进行全扫描。


解决方法

推荐客户在表workflow
requestid
列上创建索引,加快更新语句执行速度,降低或更新锁等待。

文章转载自云趣科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论