2009-06-18 8 views
30

में वर्तमान खुले कर्सर कैसे खोजें नो नंबर खोजने के लिए क्वेरी क्या है। ओरेकल इंस्टेंस में वर्तमान खुले कर्सर का?ओरेकल

इसके अलावा, इस डेटा की सटीकता/अद्यतन आवृत्ति क्या है?

मैं Oracle 10gR2

उत्तर

39

कुल कर्सर खुला उपयोग कर रहा हूँ, सत्र से:

select a.value, s.username, s.sid, s.serial# 
from v$sesstat a, v$statname b, v$session s 
where a.statistic# = b.statistic# and s.sid=a.sid 
and b.name = 'opened cursors current'; 

स्रोत: http://www.orafaq.com/node/758

जहाँ तक मुझे वी $ विचारों पर प्रश्नों पता है छद्म तालिकाओं के आधार पर कर रहे हैं ("x $" टेबल) जो सीधे एसजीए के प्रासंगिक हिस्सों को इंगित करता है, ताकि आप उससे अधिक सटीक न हो; हालांकि इसका यह भी अर्थ है कि यह समय-समय पर (यानी गंदा पढ़ा जाता है)।

+6

ये 'खोला कर्सर वर्तमान' lazily ओरेकल तालिका सर्वर द्वारा काटा जाता है; तो आपके आवेदन के लिए जो संख्या आप देखते हैं वह बिना किसी गलती के अर्थ के बिना असामान्य रूप से उच्च हो सकती है। देखें http://www.orafaq.com/node/758 –

8

यहां खुले कर्सर को ढूंढने का तरीका बताया गया है जिन्हें पार्स किया गया है। आपको v $ open_cursor और v $ सत्र तक पहुंचने वाले उपयोगकर्ता के रूप में लॉग इन करने की आवश्यकता है।

COLUMN USER_NAME FORMAT A15 

SELECT s.machine, oc.user_name, oc.sql_text, count(1) 
FROM v$open_cursor oc, v$session s 
WHERE oc.sid = s.sid 
GROUP BY user_name, sql_text, machine 
HAVING COUNT(1) > 2 
ORDER BY count(1) DESC 
; 

यदि आपको SQL टेक्स्ट का हिस्सा देता है तो यह लीकी अनुप्रयोगों की पहचान के लिए उपयोगी हो सकता है। अगर एक कर्सर को पार्स नहीं किया गया है, तो यह यहां दिखाई नहीं देता है। ध्यान दें कि ओरलस कभी-कभी चीजों को आपके काम से अधिक लंबे समय तक रखेगा।

+1

असल में, यह एक जटिल स्थिति है। कैश किए गए बयान दिखाने के लिए v $ open_cursor होता है। ओपन कर्सर (यदि आपके पास कर्सर/परिणामसेट रिसाव है तो संसाधन को हथौड़ा लगाया जा सकता है) 'खोले कर्सर चालू' नाम की एक पंक्ति में v $ sessstat में है। –

+1

@ ओली: लेकिन यह आपको लीक करने वाले SQL कथन की पहचान करने में कैसे मदद करता है? –

+0

यह चयन आपको वास्तविक SQL कोड दिखाता है जो कर्सर खोलता है, डीबगिंग के लिए अच्छा है! मुझसे +1 –

8
select sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor 
group by sql_text, user_name order by count(*) desc; 

मेरे लिए काम करता प्रतीत होता है।

1

1) अपने आईडी sys में व्यवसाय करने पहुँच 2)

select sum(a.value) total_cur, avg(a.value) avg_cur, max(a.value) max_cur, 
s.username, s.machine 
from v$sesstat a, v$statname b, v$session s 
where a.statistic# = b.statistic# and s.sid=a.sid 
and b.name = 'opened cursors current' 
group by s.username, s.machine 
order by 1 desc; 
0

मैं कुछ इस तरह का उपयोग करें:

select 
    user_name, 
    count(*) as "OPEN CURSORS" 
from 
    v$open_cursor 
group by 
    user_name;