2012-01-31 9 views
6

net.sourceforge.jtds.jdbc. का उपयोग कर मेरे सभी अनुप्रयोगों के लिए MSSQL से मेरे ड्राइवर के रूप में ड्राइव किया गया। मुझे एक तैयार वक्तव्य में प्रदर्शन के साथ परेशानी थी, और सीखा कि प्रेषक पैरामीटर AsUnicode = झूठी समस्या को ठीक करना चाहिए। दुर्भाग्यवश, मुझे लगता है कि ड्राइवर को मूल्य स्वीकार करने के लिए नहीं मिल रहा है। मैं तो बस ठीक पैरामीटर को स्वीकार करने के लिए Microsoft ड्राइवर com.microsoft.sqlserver.jdbc.SQLServerDriver मिल सकती है: एक persistence.xml मेंप्रेषण स्वीकार करने के लिए जेटीडीएस चालक को प्राप्त करने के मुद्दे STRRINGParametersAsUnicode = false?

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

काम करता है, और मेरे ds.xml में। तैयार बयान जल्दी, 22 सेकंड में 100 जाओ।

हालांकि, मुझे जेटीडीएस से समान प्रदर्शन बढ़ाने की प्रतीत नहीं होती है। यह अभी भी तैयार कथन के आसपास लटकता है, प्रत्येक पुनरावृत्ति पर कई सेकंड लेता है।

मैंने स्ट्रिंग पर कई बदलावों की कोशिश की है, और मेरे परीक्षणों में एक ही अंतराल (Hibernate.connection.url के साथ persistence.xml) और जेटीए और 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 

सब कुछ मैं पढ़ा है कहा गया है माइक्रोसॉफ्ट चालक धीमी है, और मेरी कंपनी अतीत में इसके साथ मुद्दों था। यदि संभव हो तो मैं वास्तव में जेटीडीएस का उपयोग करना चाहता हूं, लेकिन 10 सेकंड के लिए तैयार कथन के लिए इंतजार नहीं कर सकता!

किसी के पास कोई विचार था?

धन्यवाद

उत्तर

2

documentationsendStringParametersAsUnicode के लिए कहता है:

तय करता है कि स्ट्रिंग पैरामीटर यूनिकोड में या डेटाबेस के डिफ़ॉल्ट वर्ण एन्कोडिंग में एसक्यूएल सर्वर डेटाबेस के लिए भेजा जाता है। यह गंभीर रूप से SQL Server 2000 प्रदर्शन को प्रभावित करता है क्योंकि यह स्वचालित रूप से प्रकारों (जैसे 7.0 करता है) नहीं डालता है, जिसका अर्थ है कि यदि कोई अनुक्रमणिका कॉलम यूनिकोड है और स्ट्रिंग को डिफ़ॉल्ट वर्ण एन्कोडिंग (या अन्य तरीकों के आस-पास) का उपयोग करके सबमिट किया जाता है तो SQLServer एक प्रदर्शन करेगा इंडेक्स की तलाश के बजाय इंडेक्स स्कैन करें। Sybase के लिए, यह निर्धारित करता है कि सर्वर के वर्णमाला में एन्कोड किए जाने वाले स्ट्रिंग को यूनिकोड स्ट्रिंग के रूप में भेजा जाता है या नहीं। एन्कोडिंग तर्क के लिए एक प्रदर्शन हिट है इसलिए इस विकल्प को गलत पर सेट करें यदि यूनिटेक्स्ट या अनवरार डेटा प्रकार उपयोग में नहीं हैं या यदि वर्णसेट utf-8 है।

तो अगर आपकी क्वेरी में शामिल अपने प्रदर्शन कर रही है बदतर, कि यह आपकी क्वेरी के लिए उपयुक्त नहीं है पता चलता है, और आप बिल्कुल समस्याओं प्रलेखन के बारे में चेतावनी दी है देख रहे हैं।

आप हैं एमएस ड्राइवर में एक प्रदर्शन को बढ़ावा देने दिख रहा है, तो संभव है कि sendStringParametersAsUnicode एमएस ड्राइवर पर से JTDS पर एक आसानी से अलग अर्थ नहीं है।

विकल्प के साथ और बिना प्रत्येक ड्राइवर का प्रदर्शन क्या है? आप SQL सर्वर का किस संस्करण का उपयोग कर रहे हैं? इन प्रश्नों के लिए आपका प्रश्न प्रोफाइलर क्या दिखाता है? आपकी क्वेरी क्या है और इसमें शामिल फ़ील्ड के प्रकार क्या हैं?

+0

अच्छे प्रश्न जॉन। MSSQL 2008. दोनों चालक सेटिंग के बिना तैयार कथन पर लगभग 9 सेकंड देरी करते हैं (डिफ़ॉल्ट रूप से सत्य पर सेट) लेकिन एमएस ड्राइवर 1 सेकंड से भी कम में सुधार करता है, जबकि JTDS ड्राइवर प्रदर्शन में परिवर्तित नहीं होता है। – javatestcase

+0

इसके अलावा, प्रोफाइल प्रोफाइलर में 1 सेकंड के तहत चलाता है (0 पर उपायों।00 सेकंड) – javatestcase

+0

@javatestcase: क्या आप यह निर्धारित करने के लिए सर्वर पर लॉग देख सकते हैं कि कथन कैसे भेजा गया था? मैं उम्मीद करता हूं कि विवरण में कहीं भी उपलब्ध हो। –

संबंधित मुद्दे

 संबंधित मुद्दे