2010-08-24 25 views
21

मैं ओरेकल में क्वेरी निष्पादन समय प्राप्त करना चाहता हूं। मैं नहीं चाहता कि ओरेकल को परिणामों को मुद्रित करने की आवश्यकता हो - केवल निष्पादन समय।ओरेकल क्वेरी निष्पादन समय

MySQL में खोल से निष्पादन समय प्राप्त करना आसान है।

मैं इसे एसक्यूएल * प्लस में कैसे कर सकता हूं?

उत्तर

19

दीवार घड़ी के समय प्राप्त करने के लिए एसक्यूएल * प्लस कमांड SET TIMING ON जारी कर सकता है, लेकिन कोई नहीं ले सकता है, उदाहरण के लिए, उस छोटे से समय निकाल दें।

SET AUTOTRACE TRACEONLY के रूप में उपयोग किए जाने पर ऑटोरेटेस सेटिंग आउटपुट को दबाएगी, लेकिन फिर भी क्वेरी को पूरा करने के लिए सभी काम निष्पादित करेगी और परिणामों को वापस SQL ​​* प्लस पर भेजें, जो इसे दबाएगा।

अन्त में, एक एसक्यूएल प्लस सत्र ट्रेस कर सकते हैं, और मैन्युअल रूप से समय इस तरह के "ग्राहक के लिए एसक्यूएल नेट संदेश", "एसक्यूएल * ग्राहक से नेट संदेश" के रूप में किसी घटना के समय ग्राहक इंतजार कर रहे हैं, पर इंतजार कर खर्च की गणना।

13

उपयोग:

set serveroutput on 
variable n number 
exec :n := dbms_utility.get_time; 
select ...... 
exec dbms_output.put_line((dbms_utility.get_time-:n)/100) || ' seconds....'); 

या संभवतः:

SET TIMING ON; 

-- do stuff 

SET TIMING OFF; 

... सेकंड कि बीता हो सैकड़ा मिलता है।

किसी भी मामले में, समय बीतने से सर्वर लोड/आदि द्वारा प्रभावित किया जा सकता है।

संदर्भ:

2

मैं लगातार देखने की सलाह देते होता हो जाता है/तार्किक रन समय की तुलना में 'काम' के लिए एक बेहतर प्रॉक्सी के रूप में पढ़ता है। डेटाबेस सर्वर पर और क्या हो रहा है, रन टाइम को कैश आदि में कितना हो रहा है,

लेकिन यदि आप वास्तव में SQL निष्पादन समय चाहते हैं, तो V $ SQL व्यू में CPU_TIME और ELAPSED_TIME दोनों हैं।

+0

इसके अलावा, क्योंकि एसक्यूएल साझा किया जा सकता आप भी फांसी की संख्या को देखो और काम करने के लिए इस विभाजित करने की आवश्यकता एक औसत से अन्यथा आपको सभी निष्पादन के लिए ELAPSED_TIME मिल जाएगा और आपको आश्चर्य हो सकता है कि क्यों एक साधारण 1 सेकंड एसक्यूएल बीतने वाले घंटों का उपभोग करता था। – Stellios

5
select LAST_LOAD_TIME, ELAPSED_TIME, MODULE, SQL_TEXT elapsed from v$sql 
    order by LAST_LOAD_TIME desc 

अधिक जटिल उदाहरण (मत भूलना नष्ट करने के लिए या PATTERN विकल्प):

select * from (
    select LAST_LOAD_TIME, to_char(ELAPSED_TIME/1000, '999,999,999.000') || ' ms' as TIME, 
     MODULE, SQL_TEXT from SYS."V_\$SQL" 
    where SQL_TEXT like '%PATTERN%' 
    order by LAST_LOAD_TIME desc 
) where ROWNUM <= 5; 
संबंधित मुद्दे