2012-10-24 12 views
5

क्या कोई प्रश्न है कि कोई निष्पादन निष्पादित करते समय ओरेकल द्वारा किसी विशेष ओरेकल इंडेक्स का कभी भी उपयोग किया जाता है या नहीं?मॉनिटर इंडेक्स उपयोग

हमारे पास एक फ़ंक्शन आधारित इंडेक्स है, जिसे मुझे संदेह है कि ओरेकल द्वारा उपयोग नहीं किया जा रहा है और इसलिए कुछ प्रश्न धीमे चल रहे हैं। डेटाबेस के विरुद्ध चलने वाली कोई क्वेरी इस क्वेरी का उपयोग कर रही है तो मैं कैसे पता लगा सकता हूं?

+1

आप पूछ रहे हैं कि एक विशिष्ट क्वेरी सूचकांक का उपयोग करता है, या अगर कोई किसी भी प्रश्न है कि कभी इंडेक्स का उपयोग कर रहे हैं? –

+0

हां ... मैं पूछ रहा था कि किसी विशेष इंडेक्स का उपयोग करने वाले सभी प्रश्न हैं या नहीं। रॉबर्ट द्वारा नीचे दिया गया जवाब सही फिट लगता है :-) – Guddu

उत्तर

7

यदि प्रश्न है: यदि कोई प्रश्न है जो कभी भी इंडेक्स का उपयोग करता है?

ALTER INDEX myindex MONITORING USAGE; 

रुको कुछ ही दिनों/महीनों/वर्ष:

SELECT * 
FROM v$object_usage 
WHERE index_name = 'MYINDEX'; 

http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes004.htm#i1006905

+0

धन्यवाद रॉबर्ट ... इससे मदद मिलती है :-) – Guddu

5

यदि आप किसी प्रकार के आईडीई (जैसे ओरेकल के एसक्यूएल डेवलपर, पीएल/एसक्यूएल डेवलपर से ऑलराउंड ऑटोमेशन, टोड इत्यादि) का उपयोग कर रहे हैं तो उनमें से प्रत्येक को एक कथन के लिए योजना को डंप करने का कोई तरीका है - चारों ओर पोक मेनू और ऑनलाइन सहायता।

यदि आप एसक्यूएल * प्लस में जा सकते हैं (अपने दोस्ताना कमांड लाइन पर "एसक्यूएल" टाइप करने का प्रयास करें) तो आप ऑटोट्रेस चालू कर सकते हैं, अपना कथन निष्पादित कर सकते हैं, और योजना मुद्रित की जानी चाहिए।

SQL> set autotrace on 
SQL> select * from dept where deptno = 40; 
    DEPTNO DNAME   LOC 
---------- -------------- ------------- 
     40 OPERATIONS  BOSTON 

Execution Plan 
---------------------------------------------------------- 
    0  SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=18) 
    1 0 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=1 Card=1 Bytes=18) 
    2 1  INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) 

Statistics 
---------------------------------------------------------- 
      0 recursive calls 
      0 db block gets 
      2 consistent gets 
      0 physical reads 
      0 redo size 
     499 bytes sent via SQL*Net to client 
     503 bytes received via SQL*Net from client 
      2 SQL*Net roundtrips to/from client 
      0 sorts (memory) 
      0 sorts (disk) 
      1 rows processed 

यह मानता है कि आपके मित्रवत पड़ोस डीबीए ने इस सुविधा को सक्षम करने के लिए आवश्यक बदलाव किए हैं।

SQL> EXPLAIN PLAN FOR select * from dept where deptno = 40; 
Explained. 

SQL> set linesize 132 

SQL> SELECT * FROM TABLE(dbms_xplan.display); 

PLAN_TABLE_OUTPUT 
--------------------------------------------------------------------------------------- 
Plan hash value: 2852011669 

--------------------------------------------------------------------------------------- 
| Id | Operation     | Name | Rows | Bytes | Cost (%CPU)| Time  | 
--------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT   |   |  1 | 20 |  1 (0)| 00:00:01 | 
| 1 | TABLE ACCESS BY INDEX ROWID| DEPT |  1 | 20 |  1 (0)| 00:00:01 | 
|* 2 | INDEX UNIQUE SCAN   | PK_DEPT |  1 |  |  0 (0)| 00:00:01 | 
--------------------------------------------------------------------------------------- 

Predicate Information (identified by operation id): 
--------------------------------------------------- 

    2 - access("DEPTNO"=40) 

14 rows selected. 

साझा करें और आनंद लें: अगर यह नहीं किया गया है, या आप बस एक और रास्ता (टीएम) ऐसा करना चाहते हैं, तो क्वेरी आप ध्यान प्रतिस्थापन निम्नलिखित की तरह कुछ कोशिश,।

+0

धन्यवाद बॉब ... मेरा प्रश्न थोड़ा अलग था हालांकि यह जानकारी अभी भी उपयोगी थी। – Guddu

+0

@BobJarvis यह बहुत उपयोगी है। +10 अगर मैं –