Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

संबंधपरक डेटाबेस में प्रदर्शन समस्या का वर्णन कैसे करें?

Oracle डेटाबेस . के लिए यह जानकारी प्रदान करें:

समस्या के लक्षणों का वर्णन करें

उस व्यवहार का वर्णन करें जो समस्या का कारण बनता है। क्या क्वेरी का व्यवहार स्थिर है या समस्या केवल कभी-कभी होती है, विशिष्ट पैरामीटर या साधारण यादृच्छिक के साथ। क्या आप इस व्यवहार को IDE (जैसे SQL डेवलपर) में पुन:पेश कर सकते हैं?

पर्यावरण का वर्णन करें

Oracle के सटीक संस्करण को परिभाषित करें

 select * from v$version

वर्णन करें कि आप डेटाबेस से कैसे जुड़ते हैं:ड्राइवर, ORM, प्रोग्रामिंग भाषा। नाम और/या संस्करण संख्या प्रदान करें।

क्वेरी का वर्णन करें

क्वेरी टेक्स्ट पोस्ट करें। सरल बनाने का प्रयास करें - एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण दिखाएं ।

उदाहरण - आप समस्याग्रस्त क्वेरी 10 टेबल से जुड़ते हैं। जांचें कि क्या आपको 9 या 8 जॉइन वाली क्वेरी में समान लक्षण दिखाई देते हैं। तब तक नीचे उतरें जब तक आपको समस्याएं दिखाई न दें और केवल कम की गई क्वेरी दिखाएं।

हां, यह महंगा है, लेकिन इससे आपको समर्थन मिलने की संभावना बहुत बढ़ जाती है! क्वेरी जितनी छोटी होती है, वह समर्थकों को उतनी ही अधिक आकर्षित करती है।

निष्पादन योजना का वर्णन करें

निष्पादन योजना प्राप्त करने के लिए इस कथन को चलाएं (अपना क्वेरी टेक्स्ट बदलें)

 EXPLAIN PLAN  SET STATEMENT_ID = '<some_id>' into   plan_table  FOR
     select * from ....   -- your query here 
 ;

निष्पादन योजना PLAN_TABLE . में संग्रहीत है , इसे देखने के लिए इस क्वेरी को चलाएं

 SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', '<some_id>','ALL')); 

पूर्ण परिणाम दिखाएं (न केवल निष्पादन योजना के साथ तालिका)। अत्यधिक महत्वपूर्ण विधेय अनुभाग और नीचे दिए गए नोट्स हो सकते हैं।

उदाहरण के लिए select * from dual where dummy = :1;

Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / [email protected]$1

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

   1 - filter("DUMMY"=:1)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "DUMMY"[VARCHAR2,1]

ग्राफ़िकल परिणाम को काटें और चिपकाएं नहीं अपने आईडीई की योजना की व्याख्या करें।

क्या यह निष्पादन योजना वास्तविक है जिसे निष्पादित किया गया है?

दुर्भाग्य से हमेशा नहीं। ऐसे कई कारण हैं जिनकी व्याख्या की गई . है निष्पादन योजना वास्तविक योजना से भिन्न हो सकती है।

यदि आप संदेह में हैं (विशेषकर जब आप एक अच्छी योजना देखते हैं, लेकिन क्वेरी खराब चलती है) तो आप एक SQL_ID प्रदान करते हुए DB कैश से योजना को निकाल सकते हैं। ।

 SELECT t.* FROM  table(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>',null,'ALL')) t; 

किसी क्वेरी के लिए SQL_ID जो वर्तमान में चल रही है (या शीघ्र ही चल रही थी और अभी भी कैश्ड है) टेक्स्ट मिलान और/या डेटाबेस उपयोगकर्ता के साथ मिल सकती है:

select sql_id, sql_fulltext from v$sql a where 
 lower(sql_text) like lower('%<some identifying part of the query text>%') 
  and parsing_schema_name = '<user running the query>';

यदि आपके पास AWR लाइसेंस है, तो इतिहास में चल रहे प्रश्नों के लिए भी, आप वहां से निष्पादन योजना प्राप्त कर सकते हैं।

SELECT t.*
FROM  table(DBMS_XPLAN.DISPLAY_AWR('10u2rj016s96k'  )) t;

SQL_ID का उपयोग करके पाया जा सकता है

select sql_id, sql_text 
from dba_hist_sqltext a 
where lower(sql_text) like lower('%<some identifying part of the query text>%')

डेटा का वर्णन करें

उन टेबल पर टेबल और इंडेक्स का डीडीएल दिखाएं।

उल्लेख करें कि क्या ऑप्टिमाइज़र आँकड़े हाल ही में एकत्र किए गए हैं और उपयोग किए गए dbms_stats . दिखाते हैं बयान इकट्ठा करें।

महत्वपूर्ण तालिका(यों) के लिए खंड आकार, पंक्ति संख्या, विभाजन,...

. के बारे में जानकारी प्रदान करें

एक्सेस या जॉइन में उपयोग किए जाने वाले कॉलम के लिए अलग-अलग मानों की संख्या के बारे में जानकारी प्रदान करते हैं। क्या मान समान रूप से वितरित या तिरछे होते हैं (जैसे कि बहुत कम संख्या में मान जो बहुत बार होते हैं और बड़ी संख्या में दुर्लभ मान)। क्या आप हिस्टोग्राम को परिभाषित करते हैं?

और कुछ?

बेशक यह केवल मूल बातें हैं और अन्य जानकारी की अभी भी आवश्यकता हो सकती है, जैसे कि सिस्टम आँकड़े या अनुकूलक पैरामीटर। लेकिन एक बार फिर न्यूनतम जानकारी प्रदान करने का प्रयास करें जो (आप चीज़) समस्या की पहचान कर सकते हैं। अनुरोध पर अतिरिक्त जानकारी पोस्ट करें। पी>

सफलता मिले!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लंबे समय तक चलने वाले प्रश्नों के लिए Oracle डेटाबेस की जाँच कैसे करें

  2. शून्य डेटा हानि पुनर्प्राप्ति उपकरण

  3. सर्वर को पुनरारंभ करने के बाद ORA-12514 त्रुटि

  4. प्रोग्रामिंग में व्यक्ति के नाम का कैपिटलाइज़ेशन

  5. रीयल टाइम में PL/SQL आउटपुट प्राप्त करें