sqlserver存储过程查询缓慢锁表问题分析步骤
作者:菜鸟上路_lbz
这篇文章给大家介绍sqlserver存储过程查询缓慢锁表问题分析步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
背景
生产环境用户查询项目文件夹报错:
org.springframework.dao.DataAccessResourceFailureException: ### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Read timed out ### The error may exist in com/ht/dp/doc/query/dao/DocQueryDao.xml ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: EXEC Sp_GetCadFolderPriviAll ?, ?, ?, ?, ?, ?, ? ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Read timed out ; Read timed out; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Read timed out
数据库执行存储过程发生了超时,根据用户反馈非必现
分析步骤
将存储过程解析为sql语句,打开sqlsever的执行计划:

可以看到16行 扫描行数达到了298w行,拿到该行:
OBJECT:(.[dbo].[PrjFolder].[ix_PrjFolder_8] AS [a]), SEEK:([a].[PrjID]=[@c_PrjID]) ORDERED FORWARD
可以发现使用了项目id的关联:

这里添加了项目id,导致检索了全项目文件夹;通过分析业务,用户在查询父子级文件夹, JOIN Folder b ON a.ParentID = b.FolderID,已经满足了获取所有的父子级文件夹,无需增加项目id,按需关联条件。
到此这篇关于sqlserver存储过程查询缓慢锁表问题分析步骤的文章就介绍到这了,更多相关sqlserver存储过程查询缓慢锁表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
