2012-01-31 93 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