ओरेकल: प्रश्नों को ट्रेस करने के लिए एक उपकरण है, जैसे एसक्यूएल सर्वर के लिए प्रोइलर? [बन्द है]


84

मैं sql सर्वर के साथ काम करता हूं, लेकिन मुझे Oracle DB के साथ एक एप्लिकेशन में माइग्रेट करना होगा। Sql सर्वर मैं अद्भुत Profiler उपकरण का उपयोग करें, मेरे आवेदन प्रश्नों का पता लगाने के लिए। क्या ओरेकल के लिए कुछ समान है?


38
आपने गलत उत्तर क्यों स्वीकार किया? बताएं कि क्या करता है क्या नहीं करता है। यह पूरी तरह से असंबंधित है।
जैस्मीन

1
क्या आपको सबसे अच्छा टूल पसंद आया sql server profiler? अब आप क्या उपयोग कर रहे हैं?
शाहिद गफूर

मैंने ओरेकल एप्लिकेशन को ट्रेस करने के बारे में एक किताब लिखी है। यह method-r.com पर पीडीएफ फॉर्म में उपलब्ध है ।
Cary Millsap

कृपया, Devart से Oracle के लिए dbForge स्टूडियो में ओरेकल प्रोफाइलर की जाँच करें ।
डेवार्ट जूल

नीचे बहुत सारे उत्तर, लेकिन किसी ने भी पीएल / एसक्यूएल के लिए ओरेकल के दो प्रोफाइलर्स में से किसी का उल्लेख नहीं किया है : DBMS_PROFILER(मूल और सीमित, लेकिन सुपर-सुविधाजनक) या DBMS_HPROF(अधिक सटीक लेकिन अधिक सेटअप की आवश्यकता है)। हालाँकि, मैं एसक्यूएल सर्वर को नहीं जानता, इसलिए यह संभव है कि इसमें ओरेकल पैकेजों की तुलना में प्रोफाइलिंग की एक अलग अवधारणा है और जो आप चाहते हैं वह ओरेकल में अनुरेखण की तरह है।
विलियम रॉबर्टसन

जवाबों:


22

सक्रिय सत्रों की निगरानी के लिए आप ओरेकल एंटरप्राइज मैनेजर का उपयोग कर सकते हैं, जिस क्वेरी को निष्पादित किया जा रहा है, उसके निष्पादन की योजना, ताले, कुछ आंकड़े और यहां तक ​​कि लंबे कार्यों के लिए प्रगति पट्टी।

देखें: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955

इंस्टेंस -> सत्र पर जाएं और प्रत्येक सत्र के SQL टैब को देखें।

और भी तरीके हैं। एंटरप्राइज मैनेजर बस सुंदर रंगों के साथ रखता है जो पहले से ही उन दस्तावेजों की तरह विशेष दृश्यों में उपलब्ध है: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage

और, निश्चित रूप से आप इंस्ट्रूमेंटलाइजेशन के अन्य तरीकों के लिए स्पष्टीकरण प्लान फॉर, ट्रेक टूल और टन का भी उपयोग कर सकते हैं। शीर्ष सबसे महंगी SQL क्वेरी के लिए एंटरप्राइज़ प्रबंधक में कुछ रिपोर्ट हैं। आप कैश पर रखे गए हाल के प्रश्नों को भी खोज सकते हैं।


17

मुझे एक आसान उपाय मिला

चरण 1। PLSQL या sqldeveloper या किसी अन्य क्वेरी इंटरफ़ेस का उपयोग करके एक व्यवस्थापक उपयोगकर्ता के साथ DB से कनेक्ट करें

चरण 2। स्क्रिप्ट को चलाएं; S.SQL_TEXT कॉलम में, आप निष्पादित क्वेरीज़ देखेंगे

SELECT            
 S.LAST_ACTIVE_TIME,     
 S.MODULE,
 S.SQL_FULLTEXT, 
 S.SQL_PROFILE,
 S.EXECUTIONS,
 S.LAST_LOAD_TIME,
 S.PARSING_USER_ID,
 S.SERVICE                                                                       
FROM
 SYS.V_$SQL S, 
 SYS.ALL_USERS U
WHERE
 S.PARSING_USER_ID=U.USER_ID 
 AND UPPER(U.USERNAME) IN ('oracle user name here')   
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;

इसके साथ एकमात्र मुद्दा यह है कि मुझे इनपुट पैरामीटर मान (फ़ंक्शन कॉल के लिए) दिखाने का कोई तरीका नहीं मिल सकता है, लेकिन कम से कम हम देख सकते हैं कि ओरेकल में क्या चलता है और एक विशिष्ट उपकरण का उपयोग किए बिना इसका क्रम।


2
यदि SQL पाठ उस बिंदु पर कट जाता है, तो आप S.SQL_FULLTEXT को जोड़ सकते हैं, यदि क्वेरी पाठ 1000 वर्णों से अधिक है।
ट्रिडस

2
आपको LAST_ACTIVE_TIME द्वारा आदेश नहीं देना चाहिए क्योंकि यह VARCHAR2 (19) है। इसके बजाय इसका उपयोग करें: ORDER BY TO_DATE (S.LAST_LOAD_TIME, 'YYYY-MM-DD / HH24: MI: SS') desc
Igor Krupitsky

1
ORA-00942: तालिका या दृश्य 00942 मौजूद नहीं है। 00000 - "तालिका या दृश्य मौजूद नहीं है" * कारण: * क्रिया: पंक्ति में त्रुटि: 11 कॉलम: 6 इसका मतलब है कि मेरे पास कोई व्यवस्थापक नहीं है?
टोह

इसमें परम मान शामिल नहीं हैं। यदि आप भी ऐसा चाहते हैं, तो एक नज़र डालें: stackoverflow.com/a/14217618/6339469
HamedH

16
alter system set timed_statistics=true

--या

alter session set timed_statistics=true --if want to trace your own session

- काफी बड़ा होना चाहिए:

select value from v$parameter p
where name='max_dump_file_size' 

- सत्र और धारा # का पता लगाएं जिसमें आप रुचि रखते हैं:

 select sid, serial# from v$session
 where ...your_search_params...

- आप 10046 ईवेंट के साथ ट्रेस करना शुरू कर सकते हैं, चौथा पैरामीटर ट्रेस लेवल सेट करता है (12 सबसे बड़ा है):

 begin
    sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
 end;

- शून्य स्तर की स्थापना के साथ ट्रेसिंग बंद करें:

begin
   sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;

/ * संभव स्तर: 0 - बंद 1 - न्यूनतम स्तर। बहुधा सेट sql_trace = true 4 - बाइंड वैरिएबल वैल्यू को ट्रेस फ़ाइल 8 में जोड़ा जाता है - वेट्स को 12 जोड़ा जाता है - दोनों बाइंड वैरिएबल वैल्यू और वेट इवेंट में जोड़े जाते हैं * /

- यदि आप अपने स्वयं के सत्र को बड़े स्तर पर ट्रेस करना चाहते हैं, तो:

alter session set events '10046 trace name context forever, level 12';

--बंद करें:

alter session set events '10046 trace name context off';

- कच्चे ट्रेस जानकारी के साथ स्थित हो जाएगा:

 select value from v$parameter p
 where name='user_dump_dest'

फ़ाइल का नाम (*। trc) में स्पिड होगा:

 select p.spid from v$session s, v$process p
 where s.paddr=p.addr
 and ...your_search_params...

-तो आप खुद से नाम सेट कर सकते हैं:

alter session set tracefile_identifier='UniqueString'; 

- आमतौर पर, TKPROFट्रेस फ़ाइल को अधिक पठनीय बनाने के लिए उपयोग करें:

C:\ORACLE\admin\databaseSID\udump>
C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\ORACLE\admin\databaseSID\udump>

- ट्रेस फ़ाइल के उपयोग की स्थिति देखें:

set serveroutput on size 30000;
declare
  ALevel binary_integer;
begin
  SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
  if ALevel = 0 then
    DBMS_OUTPUT.Put_Line('sql_trace is off');
  else
    DBMS_OUTPUT.Put_Line('sql_trace is on');
  end if;
end;
/

बस एक तरह से अनुवाद http://www.sql.ru/faq/faq_topic.aspx?fid=389 मूल संपूर्ण है, लेकिन वैसे भी यह है कि क्या दूसरों IMHO पोस्ट से बेहतर है


अन्य उत्तरों की तुलना में बहुत अधिक उपयोगी!
एंडोमर

बहुत जटिल। कोई भी इसका उपयोग करने वाला नहीं है।
एडीएम-आईटी

7

जीआई ओरेकल प्रोफाइलर v1.2

यह Oracle के लिए SQL Server Profiler के समान निष्पादित प्रश्नों को पकड़ने के लिए एक उपकरण है। इस डेटाबेस सर्वर का उपयोग करने वाले अनुप्रयोगों के रखरखाव के लिए अपरिहार्य उपकरण।

आप इसे आधिकारिक साइट iacosoft.com से डाउनलोड कर सकते हैं


नमस्ते, क्या आपको इस सॉफ़्टवेयर का उपयोग करने के लिए ORACLE से एक विशेष लाइसेंस की आवश्यकता है? मुझे पता है कि ओरेकल आपको कुछ तालिका / विचारों को इंटरगेट करने की अनुमति देता है, और यदि आप इसे करते हैं और इसके लिए आपके पास कोई लाइसेंस नहीं है तो वे आपसे अतिरिक्त शुल्क लेते हैं।
सेरगुई

2
नमस्ते, आपको v $ sqlarea का भुगतान करना होगा? मैं उस लिंक को दर्ज कर सकता हूं जो कहता है कि क्या है?
पियो

महान धन्यवाद आदमी !!! आप मुझे बहुत काम
बचाते हैं

यदि मेरी क्वेरी विफल हो जाती है तो इसे प्रोफाइलर द्वारा नहीं दिखाया जाता है।
ADM-IT

6

पीएल / एसक्यूएल डेवलपर की कोशिश करें इसमें प्रोफाइलर के लिए एक अच्छा उपयोगकर्ता के अनुकूल जीयूआई इंटरफ़ेस है। यह बहुत अच्छा है कि परीक्षण को आजमाएँ। ओरेकल डेटाबेस पर काम करते समय मैं इस उपकरण की कसम खाता हूं।

http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw


5

यह देखकर कि मैंने हाल ही में एक प्रश्न को एक डुप्लिकेट के रूप में वोट दिया है और इस दिशा में इंगित किया है। । ।

कुछ और - एसक्यूएल * प्लस - सेट ऑटोट्रैस ऑन - में निष्पादित प्रत्येक विवरण के लिए व्याख्या योजना और आंकड़े देंगे।

TOAD क्लाइंट साइड प्रोफाइलिंग के लिए भी अनुमति देता है।

इन दोनों का नुकसान यह है कि वे आपको केवल कथन के लिए निष्पादन योजना बताते हैं, लेकिन यह नहीं है कि उस योजना में ऑप्टिमाइज़र कैसे पहुंचे - इसके लिए आपको निचले स्तर के सर्वर साइड ट्रेसिंग की आवश्यकता होगी।

एक और महत्वपूर्ण समझने के लिए स्टेटस्पैक स्नैपशॉट है - वे समग्र रूप से डेटाबेस के प्रदर्शन को देखने के लिए एक अच्छा तरीका है। समझा योजना, आदि, व्यक्तिगत एसक्यूएल बयानों को खोजने में अच्छे हैं जो अड़चन हैं। स्टैडस्पैक इस तथ्य की पहचान करने में अच्छा है कि आपकी समस्या यह है कि एक अच्छा निष्पादन योजना के साथ एक सरल कथन को एक मिनट में 1 मिलियन बार कहा जा रहा है।


3

कैच समय में दो बिंदुओं के बीच सभी SQL रन कैप्चर करता है। जिस तरह SQL Server भी करता है।

ऐसी स्थितियाँ हैं जहां SQL को कैप्चर करना उपयोगी होता है जो डेटाबेस में एक विशेष उपयोगकर्ता चला रहा है। आमतौर पर आप बस उस उपयोगकर्ता के लिए सत्र अनुरेखण सक्षम कर सकते हैं, लेकिन उस दृष्टिकोण के साथ दो संभावित समस्याएं हैं।

  1. पहला यह है कि कई वेब आधारित एप्लिकेशन लगातार डेटाबेस कनेक्शन का एक पूल बनाए रखते हैं जो कई उपयोगकर्ताओं के बीच साझा किए जाते हैं।
  2. दूसरा यह है कि कुछ एप्लिकेशन कनेक्ट होते हैं, कुछ एसक्यूएल चलाते हैं और बहुत जल्दी डिस्कनेक्ट हो जाते हैं, जिससे सत्र ट्रेसिंग को सक्षम करना मुश्किल हो जाता है (आप इस मामले में सत्र ट्रेसिंग को सक्षम करने के लिए लॉगऑन ट्रिगर का उपयोग कर सकते हैं)।

समस्या का एक त्वरित और गंदा समाधान समय में दो बिंदुओं के बीच चलने वाले सभी एसक्यूएल बयानों को कैप्चर करना है।

निम्न प्रक्रिया दो तालिकाओं का निर्माण करेगी, जिनमें प्रत्येक में एक विशेष बिंदु पर डेटाबेस का स्नैपशॉट होगा। उस अवधि के दौरान सभी SQL रन की एक सूची बनाने के लिए तालिकाओं को फिर से बताया जाएगा।

यदि संभव हो, तो आपको एक शांत विकास प्रणाली पर यह करना चाहिए - अन्यथा आप बहुत अधिक डेटा वापस पाने का जोखिम उठाते हैं।

  1. पहला स्नैपशॉट लें पहला स्नैपशॉट बनाने के लिए निम्न sql चलाएँ:

    create table sql_exec_before as
    select executions,hash_value
    from v$sqlarea
    /
    
  2. उपयोगकर्ता को एप्लिकेशन के भीतर अपना कार्य करने के लिए प्राप्त करें।

  3. दूसरा स्नैपशॉट लें।

    create table sql_exec_after as
    select executions, hash_value
    from v$sqlarea
    /
    
  4. परिणामों की जाँच करें अब जब आपने SQL पर कब्जा कर लिया है तो यह परिणामों को क्वेरी करने का समय है।

यह पहली क्वेरी उन सभी क्वेरी हैश को सूचीबद्ध करेगी जिन्हें निष्पादित किया गया है:

select  aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
  on aft.hash_value  =  bef.hash_value 
where aft.executions > bef.executions
   or bef.executions is null;
/

यह एक हैश और एसक्यूएल को ही प्रदर्शित करेगा: पेज 999 लाइनों को हैश_वल्यू पर 100 ब्रेक सेट करें

select  hash_value, sql_text
from    v$sqltext
where   hash_value in (
    select  aft.hash_value
    from sql_exec_after aft
    left outer join sql_exec_before bef
      on aft.hash_value  =  bef.hash_value
    where aft.executions > bef.executions
       or bef.executions is null;
)
order by
    hash_value, piece
/

5. ठीक होने के बाद स्नैपशॉट तालिकाओं को निकालना न भूलें:

drop table sql_exec_before
/

drop table sql_exec_after
/

पूरी स्क्रिप्ट के लिए धन्यवाद जो तकनीक को प्रदर्शित करता है।
रोमन पोक्रोव्स्कीज

2

ओरेकल, अन्य डेटाबेस के साथ, निष्पादन योजना बनाने के लिए दिए गए क्वेरी का विश्लेषण करता है। यह योजना डेटा प्राप्त करने का सबसे प्रभावी तरीका है।

ओरेकल ' explain plan' स्टेटमेंट प्रदान करता है जो क्वेरी का विश्लेषण करता है लेकिन इसे चलाता नहीं है, इसके बजाय एक विशेष टेबल को पॉप्युलेट करता है जिसे आप क्वेरी कर सकते हैं (प्लान टेबल)।

वाक्यविन्यास (सरल संस्करण, अन्य विकल्प हैं जैसे कि योजना तालिका में पंक्तियों को एक विशेष आईडी के साथ चिह्नित करना, या किसी अन्य योजना तालिका का उपयोग करना) है:

explain plan for <sql query>

उस डेटा का विश्लेषण एक और सवाल, या आपके आगे के शोध के लिए छोड़ दिया गया है।


2

एक वाणिज्यिक उपकरण FlexTracer है जिसका उपयोग Oracle SQL प्रश्नों का पता लगाने के लिए किया जा सकता है


1

यह एक Oracle डॉक है जिसमें बताया गया है कि कैसे एसक्यूएल क्वेश्चन को ट्रेस किया जाता है, जिसमें कुछ टूल्स (SQL Trace और tkprof) शामिल हैं

संपर्क


1

जाहिर तौर पर कोई छोटी सरल सस्ती उपयोगिता नहीं है जो इस कार्य को करने में मदद करे। हालांकि इसे जटिल और असुविधाजनक तरीके से करने का 101 तरीका है।

निम्नलिखित लेख कई का वर्णन करता है। संभवतः दर्जनों और हैं ... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.