2012-01-31 329 views
6

使用net.sourceforge.jtds.jdbc.Driver作为我的MSSQL驱动程序用于我的所有应用程序。我在准备好的语句中遇到了性能问题,并了解到sendStringParametersAsUnicode = false应该可以解决问题。不幸的是,我似乎无法让司机接受价值。我可以得到微软的驱动程序com.microsoft.sqlserver.jdbc.SQLServerDriver接受参数就好:在persistence.xml中JTDS驱动程序接受sendStringParametersAsUnicode = false的问题?

jdbc:sqlserver://servername:1433;databaseName=dbname;sendStringParametersAsUnicode=false 

作品,在我ds.xml中。准备好的陈述在22秒内快速完成。

但是,我似乎无法像JTDS一样获得相同的性能提升。它仍然挂在准备好的声明上,每次迭代需要几秒钟。

我已经尝试了几个字符串的变体,并在我的测试(persistence.xml与Hibernate.connection.url)和服务器与JTA和ds.xml看到相同的滞后。

jdbc:jtds:sqlserver://server:1433/dbname;sendStringParametersAsUnicode=false 

jdbc:jtds:sqlserver://server:1433;sendStringParametersAsUnicode=false;databaseName=dbname 

jdbc:jtds:sqlserver://server:1433;sendStringParametersAsUnicode=false;selectMethod=cursor;socketKeepAlive=true;databaseName=dbname 

一切我读过指出微软的驱动程序是慢,我公司与它的问题在过去。如果可能的话,我真的很喜欢使用JTDS,但不能等待10秒准备好的声明!

任何人有任何想法?

感谢

回答

2

documentationsendStringParametersAsUnicode状态:

确定是否字符串参数在Unicode或数据库的默认字符编码发送到SQL Server数据库。这会严重影响SQL Server 2000的性能,因为它不会自动转换类型(如7.0所示),这意味着如果索引列是Unicode并且字符串是使用默认字符编码提交的(或以其他方式)SQLServer将执行索引扫描而不是索引查找。对于Sybase,确定在服务器的字符集中不能编码的字符串是否作为unicode字符串发送。编码逻辑的性能受到影响,因此如果unitext或univarchar数据类型未使用或者charset为utf-8,则将此选项设置为false。

因此,如果包括它在你的查询让你表现糟糕,这表明它的适合您的查询,你看到确切的文件发出警告的问题。

如果你看到在MS驱动程序的性能提升,这是可能的sendStringParametersAsUnicode对JTDS比在MS驾驶员一个微妙的不同含义。

每个驱动程序的性能如何,有没有这个选项?你使用的是什么版本的SQL Server?您的查询分析器对这些查询显示什么?什么是你的查询,涉及的领域有哪些类型?

+0

好问题乔恩。 MSSQL 2008.这两个驱动程序在没有设置的情况下在准备好的语句中延迟约9秒(默认情况下设置为true),但MS驱动程序提高到少于1秒,而JTDS驱动程序的性能没有出现变化。 – javatestcase 2012-01-31 07:20:43

+0

此外,查询在探查器中运行时间小于1秒(度量值为0。00秒) – javatestcase 2012-01-31 07:23:21

+0

@javatestcase:您可以查看服务器上的日志以确定语句的发送方式吗?我希望能够在细节的某处获得。 – 2012-01-31 07:26:24