Java存储过程运行缓慢

标签 java sql-server stored-procedures

我有一个 java web 应用程序,它使用 next 函数来执行存储过程,它连接到 SQL Server 2008:

Class.forName(sDriver_Reportes);
conn = DriverManager.getConnection(sDB_URL, sUSER, sPASS);
sQuery = "{call procGetResult(?)}";
proc = conn.prepareCall(sQuery);
proc.setString("pDate", sDate);
proc.execute();
rs = proc.getResultSet();

但是返回结果集大约需要7分钟,如果我执行sp只需要10秒就可以显示结果。

我正在寻找一些类似的案例,但只找到了有关参数嗅探和连接池的帖子,但似乎有人都喜欢我的案例,因为 sp 运行得很快,您能给我一些关于在哪里可以查看此问题的信息吗?

提前谢谢您。

最佳答案

这似乎是SQL Server参数嗅探的问题。您需要检查的第一件事是存储过程的执行计划。您可以在 SQL Server Management Studio 中使用以下图标查看它:

Click on the icon marked in Red

现在遇到这个问题,这里有一些解决它的方法:

  1. 使用WITH RECOMPILE选项创建SQL Server存储过程

  2. 使用 SQL Server 提示选项(重新编译)使用 SQL Server 提示

  3. 选项(优化)在 SQL Server 存储上使用虚拟变量

  4. 在实例中禁用 SQL Server 参数嗅探的过程

  5. 对特定 SQL Server 查询禁用参数嗅探级别

为了更好地理解和实现,您可以引用以下链接: https://www.mssqltips.com/sqlservertip/3257/different-approaches-to-correct-sql-server-parameter-sniffing/

关于Java存储过程运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507623/

相关文章:

java - 在数组列表中添加元素

java - "java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached"如果程序由 cron 启动

php - sybase_connect() 错误 - "Unable to connect: Adaptive Server is unavailable or does not exist"

mysql - 解释 SQL 连接语句

sql-server - 从 SQL 存储过程导出文本文件

sql-server - 是否可以授予执行它的用户没有的存储过程执行权限

java - 在多项目Gradle设置中引用子项目的主类

java - 什么类型返回get方法?

sql - mysql @@identity 与 sql-server last_insert_id()

MySQL 6.3 - 创建过程语法错误