在尝试帮助应用开发团队在SQL 2000服务器(来自单独的应用服务器上的一堆Java应用程序)上出现性能问题的过程中,我运行了一条SQL跟踪并发现所有对数据库的调用都充满了API Server Cursor语句(sp_cursorprepexec,sp_cursorfetch,sp_cursorclose)。
看起来他们正在指定一些强制使用服务器端游标的连接字符串属性,一次只能检索128行数据:(来自 http://msdn.microsoft.com/en-us/library/Aa172588)
当API游标属性或 属性设置为其他任何东西 比它们的默认值,OLE DB SQL Server和SQL的提供程序 Server ODBC驱动程序使用API服务器 游标而不是默认结果 集。每次调用API函数 获取行生成一个 往返服务器获取 API服务器游标中的行。
UPDATE:有争议的连接字符串是JDBC连接字符串参数, selectMethod=cursor
(这使得我们上面讨论过的服务器端游标)与替代方案相比 selectMethod=direct
。他们一直在使用 selectMethod=cursor
作为所有应用程序的标准连接字符串。
从我的DBA角度来看,这只是令人讨厌(它使用无用的垃圾混乱了跟踪),并且(我推测)导致许多额外的app-to-SQL服务器往返,降低了整体性能。
他们显然测试了改变(只有60个不同的应用程序连接中的一个) selectMethod=direct
但经历了一些问题(我没有详细说明),并担心应用程序中断。
所以,我的问题是:
- 可以用
selectMethod=cursor
正如我试图争辩的那样降低应用程序性能? (通过增加已经具有非常高查询/秒的SQL服务器上所需的往返次数) - 是
selectMethod=
JDBC连接上的应用程序透明设置?如果我们改变它,这会打破他们的应用吗? - 更一般地说,你何时应该使用
cursor
VSdirect
?
也 交叉发布到SF。
编辑:收到实际的技术细节,保证对标题,问题和标签进行重大编辑。
编辑:添加了赏金。还为SF问题添加了赏金(这个问题主要关注应用程序行为,SF问题主要集中在SQL性能上。)谢谢!!