我有一个 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 中使用以下图标查看它:
现在遇到这个问题,这里有一些解决它的方法:
使用WITH RECOMPILE选项创建SQL Server存储过程
使用 SQL Server 提示选项(重新编译)使用 SQL Server 提示
选项(优化)在 SQL Server 存储上使用虚拟变量
在实例中禁用 SQL Server 参数嗅探的过程
对特定 SQL Server 查询禁用参数嗅探级别
为了更好地理解和实现,您可以引用以下链接: https://www.mssqltips.com/sqlservertip/3257/different-approaches-to-correct-sql-server-parameter-sniffing/
关于Java存储过程运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507623/