के साथ प्रदर्शन समस्याएं वर्तमान में मुझे एक समस्या का सामना करना पड़ रहा है जहां एक विशिष्ट SQL-query को मेरे जावा एप्लिकेशन के भीतर से लगभग 30 सेकंड का समय लगता है लेकिन SQL-क्लाइंट (SQL डेवलपर) में < 1 सेकंड।जेडीबीसी
सवाल में,
Slow query in Java by JDBC but not in other systems (TOAD), यह सुझाव दिया है कि एक PreparedStatement जावा चर के लिए बाध्य का उपयोग कर क्वेरी SQL-क्लाइंट (उस मामले टोड इन द) की तुलना में काफी धीमी निष्पादित क्योंकि ओरेकल जो के बारे में उलझन हो रही है कर सकता है उपयोग करने के लिए सूचकांक। क्या यह पैरामीटर के बिना तैयार किए गए स्टेटमेंट के साथ भी एक मुद्दा हो सकता है?
अन्यथा समस्या क्या हो सकती है?
क्वेरी
select
sum(col1),
sum(col2),
max(select ...)
from view_
where time_id = get_time_id(to_date('2010-10-10','yyyy-mm-dd'))
जहां view_ एक जटिल तालिकाओं और अन्य जटिल विचारों एकत्रित युक्त दृश्य है की तरह कुछ लग रहा है। क्वेरी को प्रीपेर्डस्टेटमेंट के रूप में निष्पादित किया जाता है लेकिन बिना किसी पैरामीटर के। ऐसा कोई फर्क नहीं पड़ता कि हम तैयार कथन या सिर्फ सादा बयान का उपयोग करते हैं या नहीं।
के बाद से कार्य योजना लागू करके काफी बड़ा है मैं सभी पोस्ट नहीं कर सकते, तो इसे यहाँ, लेकिन प्रासंगिक अंतर प्रतीत हो रहा है:
UNION-ALL TABLE ACCESS FULL GVC_WH.PLAYER_FACT_DAILY TABLE 37 6717151 596,934.317 19940 240 7621178231 19502
UNION-ALL TABLE ACCESS BY INDEX ROWID GVC_WH.PLAYER_FACT_DAILY TABLE 38 2657 236.120 2429 30 20544658 2428 INDEX RANGE SCAN GVC_WH.PK_AGG_PLAYER INDEX (UNIQUE) 37 2657 16 1 638743 16
कहाँ पहले टुकड़ा जब यह साथ चलने से है जेडीबीसी पतला ग्राहक और एसक्यूएल डेवलपर के अंदर इसे चलाने के बाद से दूसरा। जेडीबीसी थिन क्लाइंट के साथ एक कथन के रूप में चलते समय यह सही सूचकांक नहीं उठा रहा है (कोई फर्क नहीं पड़ता कि मैं तैयार कथन का उपयोग करता हूं या नहीं)। समय के अंतर में मैं 30 सेकंड के लिए पहले और 0.5 सेकंड के लिए अंतर।
क्या यह हो सकता है कि फ़ंक्शन का उपयोग करके get_time_id जेडीबीसी के बावजूद इंडेक्स के उपयोग को प्रतिबंधित करता है, भले ही यह कॉलम पर काम न करे और भले ही यह SQL डेवलपर में काम कर रहा हो?
क्या आप दो मामलों के लिए क्वेरी योजनाएं प्राप्त और पोस्ट कर सकते हैं?और केवल स्पष्टता के लिए, क्या आप इस बात के अनुरूप हैं कि आप प्रदर्शन को कैसे माप रहे हैं? एसक्यूएल डेवलपर पहली पंक्ति बनाम उस समय को मापने के लिए कुछ हद तक आम है जब आपका जावा कोड आखिरी पंक्ति प्राप्त करता है जो काफी अलग हो सकता है। –
मैं प्रत्येक विधि (TOAD बनाम जावा) द्वारा उत्पन्न निष्पादन योजना (dbms_xplan.display कर्सर के माध्यम से) को देखकर शुरू करूंगा। यह आपको बताएगा कि डेटाबेस अलग-अलग प्रश्नों का इलाज कर रहा है या नहीं। यदि ऐसा है, तो भविष्यवाणी अनुभाग पर ध्यान दें क्योंकि इससे आपको कुछ सुराग मिलेंगे (उदाहरण के लिए जावा संस्करण से अंतर्निहित डेटाटाइप रूपांतरण हो रहा है और ओरेकल इंडेक्स का उपयोग करने में सक्षम नहीं है) – Craig
यह भी देखें http://stackoverflow.com/questions/3976184/oracle-query-ora-01652-unable-to-extend-temp-segment-but-only-in-some-versions – symcbean