2012-06-11 13 views
6

मेरे पास एक कथन है जो ओरेकल डेटाबेस सर्वर पर चलता है। बयान में लगभग 5 शामिल हैं और वहां कुछ भी असामान्य नहीं है। यह काफी नीचे दिखाई देता है:ओरेकल संकेत प्रदर्शन को सुधारने के लिए ओरेकल संकेत "FIRST_ROWS" का उपयोग करना

SELECT field1, field2, field3, ... 
FROM table1, table2, table3, table4, table5 
WHERE table1.id = table2.id AND table2.id = table3.id AND ... 
     table5.userid = 1 

समस्या (और क्या दिलचस्प है) उपयोगकर्ता आईडी के लिए है कि बयान है = 1 1 सेकंड लेता है 590 रिकॉर्ड वापस जाने के लिए। उपयोगकर्ता आईडी = 2 के लिए वक्तव्य 70 रिकॉर्ड वापस करने के लिए लगभग 30 सेकंड लेता है।

मुझे समझ में नहीं आता कि अंतर इतना बड़ा क्यों है।

ऐसा लगता है कि अलग अलग कार्य योजना लागू करके userid = 1 और उपयोगकर्ता आईडी के लिए अलग से बयान के लिए चुना जाता है = 2.

बाद मैं Oracle सुझाव FIRST_ROW, प्रदर्शन में काफी बेहतर हो कार्यान्वित किया। दोनों कथन (आईडी 1 और 2 दोनों के लिए) 1 सेकंड से कम में वापसी करते हैं।

SELECT /*+ FIRST_ROWS */ 
     field1, field2, field3, ... 
FROM table1, table2, table3, table4, table5 
WHERE table1.id = table2.id AND table2.id = table3.id AND ... 
     table5.userid = 1 

सवाल:
1) क्या हैं खराब प्रदर्शन के लिए संभावित कारणों जब उपयोगकर्ता id = 2 (जब संकेत नहीं किया जाता है)?
2) एक बनाम दूसरे कथन के लिए निष्पादन योजना अलग क्यों होगी (जब संकेत का उपयोग नहीं किया जाता है)?
3) क्या ऐसी कोई चीज है जो मुझे अपने प्रश्नों में इस संकेत को जोड़ने का निर्णय लेने के बारे में सावधान रहना चाहिए?

धन्यवाद

+2

क्या आपके टेबल आंकड़े अद्यतित और सटीक हैं? – Tebbe

+0

प्रदर्शन तुलना चलाने पर कैशिंग के बारे में सावधान रहें। – tbone

+0

Tebbe - सांख्यिकी अद्यतित हैं। क्या वे सटीक हैं, मुझे नहीं पता। – bobetko

उत्तर

8

1) क्या बुरा प्रदर्शन के लिए संभावित कारण हैं जब उपयोगकर्ता id = 2 (जब संकेत नहीं किया जाता है)?

क्योंकि ओरेकल सोचता है कि (उपयोगकर्ता आईडी = 1) से योजना का उपयोग कर अंतरिम परिणाम सेट में से एक बहुत बड़ा होगा - शायद गलत तरीके से।

2) निष्पादन योजना एक बनाम दूसरे कथन के लिए अलग क्यों होगी (जब संकेत का उपयोग नहीं किया जाता है)?

हिस्टोग्राम आधारित अनुक्रमित

3) कुछ ऐसा है जिसे मैं जब मेरे प्रश्नों को यह संकेत जोड़ने के लिए निर्णय लेने से के बारे में सावधान रहना चाहिए है?

जब तक अभिलेखों की संख्या लौटाए जाने छोटा है के रूप में, यह संकेत failry सुरक्षित होना चाहिए - अनुकूलक धक्का एक विशिष्ट सूचकांक का उपयोग करने के विपरीत, इस दृष्टिकोण अगर अनुक्रमित बदल रहे हैं ओरेकल एक अलग योजना लेने के लिए अनुमति देता है।

+0

आपकी त्वरित प्रतिक्रिया के लिए धन्यवाद। सबसे परेशान बात यह है कि हमारे पास 1 महीने पहले तक 6 साल तक यह समस्या नहीं थी (जब हमने ओरेकल के नए संस्करण में अपग्रेड किया था)। तब से प्रदर्शन खराब और खराब हो रहा है (कुछ उपयोगकर्ताओं के लिए)। क्या प्रदर्शन करने के लिए ओरेकल सर्वर पर कोई भी क्रिया हो सकती है? धन्यवाद। – bobetko

+0

क्या आप अपने आंकड़ों को अद्यतित रखते हैं?वास्तव में यह विश्लेषण करना अच्छा होगा कि आपको हिस्टोग्राम की आवश्यकता है या नहीं – Sebas

+0

क्या आप बाध्य चर का उपयोग कर रहे हैं और एक डीबीएमएस पर स्विच कर रहे हैं जिसमें बाइंड-पिकिंग सक्षम है? – symcbean

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