1
4
您可以附加事件探查器并监视事件 SQL:BatchCompleted 和 SP:Completed ,持续时间为1000。从Java客户端和SSMS运行程序。比较两个事件的读取和写入(Java与SSMS)。它们显著不同吗?这表明执行路径或计划有很大的不同,I/O也有很大的不同。 同时尝试捕捉 Showplan XML 两个事件并比较计划(将事件另存为.sqlplan文件,在ssms中打开以便于分析)。他们有类似的计划吗?估计值与实际值(行、重绕、重绕)是否存在很大差异?它们有相同的平行度吗?这些计划可以从 sys.dm_exec_requests 查看。 是否出现任何警告事件,如 Missing Column Statistics , Sort Warnings , Hash Warning , Execution Warnings , Blocked Process ? 关键是你有一整套调查工具可以随时使用。一旦找到了差异的根本原因,就可以将其追溯到Java环境设置和SSM环境(ADO.Net SqlClient)之间的不同。例如默认事务隔离级别、ANSI设置等。 |
2
2
检查:您的问题是两个应用程序(SSMS,Java)对SQL Server的调用完全相同,而SQLServer对每个服务器的作用不同吗?如果是这样的话,我每年或两年都会碰到这样的事情,它们会伤到我的大脑好几天。 有一次,我最终隔离了每个进程调用和日志记录 一切 对于探查器中的整个进程。我最终注意到登录事件(在textdata下)显示了大量信息,比如:
“现有连接”事件也将显示此信息,但有时会立即发送后续调用(批处理、rpcs、i dismember刚才)。[ 我想是ISQL或OSQL做的 ]要立即重置其中一些--arithabort和带引号的\标识符似乎是最受欢迎的,其他设置选项也会根据应用程序数据库接口使用的任何连接协议的设置或要求进行修改。 另一种方法:一些设置在“创建”时作为过程的属性保存,而其他设置在编译时作为因子。一方面,您的连接的设置值可能会被创建过程时保存的配置覆盖;另一方面,您的两个连接可能差异很大,以至于为一个过程生成了两个执行计划。(经过充分研究,所有这些信息在系统中都可用。表格和DMV。) 简言之,在我看来,SQL的模糊性把你搞得一团糟。直到今天,我都讨厌这些高棉设置。我注意不到的事情一直在和他们纠缠不清[我的意思是,真的,什么傻瓜会为一个 连接池 在?但一旦他们这样做了…]而且当地面(规则)不断从你下面改变时,很难建造结构。毕竟,记住那个家伙说的关于在沼泽地建城堡的事… |
3
2
我记得不久前也遇到过类似的问题,因为JTD正在将字符串参数静默地转换为Unicode或类似的东西。转换的结果是,SQL Server无法使用从SSMS运行存储过程时使用的索引。 缺氧缺血性脑病 |
4
0
Java案例包括将结果传输到Java服务器(网络开销)和一些Java处理吗?12分钟的查询可能会产生相当大的数据量。 |
5
0
如果您正在查看探查器,并且执行之间没有差异,那么差异必须与客户机系统有关。 4分钟似乎只是为了准备一个要发送的语句,所以12分钟的等待必须产生一些其他效果——不知道它是什么。 |
6
0
对不起,我找不到正确的答案,所以我不想把这些都分配为正确的,所以我要把这个答案标记为正确的,并祝遇到类似情况的人好运! |
7
0
我不确定这篇文章是否仍然相关。我们在应用程序中遇到了类似的问题。 在SQL Management Studio中运行存储过程和从JDBC运行存储过程的一个关键区别是事务上下文。如果在Java中使用ORM,默认情况下,存储过程在事务上下文中运行。直接在SQL Management Studio中运行存储过程时,事务将关闭。性能差异很大。 |
8
-1
你知道微软为他们的数据库提供JDBC驱动程序吗? 这些可能更具性能。 显然…你现在可能已经解决了这个问题。 |
Rogue258 · 在DB2SQL中使用存储过程/宏进行声明和循环 2 年前 |
Moyura · 如何从存储过程中获取最高值 2 年前 |
muhtarkator · 创建存储过程插入和更新 2 年前 |
DRUIDRUID · 执行SP时从表中获取值 6 年前 |
user416 · oracle中的组存储过程 6 年前 |