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存储过程查询缓慢锁表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
将表数据生成Insert脚本 比较好用的生成插入语句的SQL脚本
比较好用的生成插入语句的SQL脚本 将表数据生成Insert脚本2010-05-05
在SQL Server中使用 Try Catch 处理异常的示例详解
这篇文章主要介绍了如何在 SQL Server 中使用 Try Catch 处理异常,通过实例代码了解 SQL Server 中的 Try-Catch 实现,本文给大家介绍的非常详细,需要的朋友可以参考下2022-07-07
Spark SQL 2.4.8 操作 Dataframe的两种方式
这篇文章主要介绍了Spark SQL 2.4.8 操作 Dataframe的两种方式,方式一是通过dsl操作,方式二是利用sql方式操作,每种方式通过实例代码给大家介绍的非常详细,需要的朋友可以参考下2021-10-10


最新评论