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

पुराने आँकड़ों की जाँच कैसे करें

जब तालिका में डेटा पर्याप्त रूप से बदलता है तो आँकड़े पुराने हो सकते हैं। अच्छे निष्पादन योजनाएँ बनाने के लिए अद्यतित आँकड़े महत्वपूर्ण हैं

Oracle कैसे तय करता है कि क्या आँकड़े पुराने हो गए हैं

आँकड़ों को तब पुराना माना जाता है जब #(INSERTS + UPDATES + DELETES)>=dba_tables से NUM_ROWS का 10%:

तालिका परिवर्तनों को ट्रैक करने के लिए आवश्यक पैरामीटर सेटिंग

Oracle 10g से पहले, पुरानी हो चुकी वस्तुओं के आंकड़ों के स्वचालित संग्रह को टेबल पर MONITORING फ्लैग की सेटिंग द्वारा नियंत्रित किया जाता था। ध्वजांकित वस्तुओं पर।

10g में MONITORING और NOMONITORING कीवर्ड्स को हटा दिया गया है और उन्हें अनदेखा कर दिया जाएगा। टेबल-मॉनिटरिंग फीचर अब STATISTICS_LEVEL पैरामीटर द्वारा नियंत्रित किया जाता है।

जब STATISTICS_LEVEL को BASIC पर सेट किया जाता है, तो टेबल पर निगरानी अक्षम हो जाती है।
जब STATISTICS_LEVEL को TYPICAL पर सेट किया जाता है, तो निगरानी सक्षम हो जाती है।
डिफ़ॉल्ट रूप से STATISTICS_LEVEL को TYPICAL पर सेट किया जाता है और तालिकाओं की निगरानी सक्षम होती है। 10g और उससे अधिक में STATISTICS_LEVEL को TYPICAL पर सेट करने की दृढ़ता से अनुशंसा की जाती है
इन पैरामीटर को सेट करके, Oracle पिछली बार के आंकड़े एकत्र किए जाने के बाद से oracle तालिका के लिए INSERT, UPDATE, और DELETE संचालन की अनुमानित संख्या को ट्रैक करता है। "परिवर्तन किए गए" पर यह जानकारी SGA में रखी जाती है और समय-समय पर (लगभग हर 15 मिनट में) SMON डेटा को डेटा डिक्शनरी टेबल में फ़्लश करता है। आप dbms_stats.FLUSH_DATABASE_MONITORING_INFO() पर कॉल करके जानकारी को मैन्युअल रूप से फ़्लश कर सकते हैं। डेटा डिक्शनरी जानकारी को दृश्यों के माध्यम से दृश्यमान बनाया जाता है:DBA_TAB_MODIFICATIONS, ALL_TAB_MODIFICATIONS और USER_TAB_MODIFICATIONS।

Oracle इन दृश्यों का उपयोग उन तालिकाओं की पहचान करने के लिए करता है जिनमें पुराने आँकड़े हैं।
जब भी किसी तालिका में डेटा में 10% परिवर्तन होता है, Oracle अपने आँकड़ों को बासी मानता है।

पुराने आंकड़ों की जांच कैसे करें

नीचे दी गई PLSQL प्रक्रिया SCOTT स्कीमा में सभी तालिकाओं का पता लगाती है जो कि पुराने आँकड़े हैं

सेट सर्वरआउटपुट ऑनएसक्यूएल> DECLAREObjList dbms_stats.ObjectTab;BEGINDBMS_STATS.GATHER_SCHEMA_STATS(स्वयं का नाम=>'SCOTT', objlist=>ObjList, options=>'LIST STALE');ObjList.LASTLOOPdbms_output के लिए k. (ObjList(k).ownname || '.' || ObjList(k).ObjName || '' || ObjList(k).ObjType || '' || ObjList(k).partname);END LOOP;END;/

नीचे दिए गए sql का उपयोग इन्सर्ट, अपडेट, डिलीट का पता लगाने के लिए भी किया जा सकता है

 u.TIMESTAMP,t.last_analyzed,u.table_name,u.inserts,u.updates,u.deletes,d.num_rows,decode(d.num_rows,0,'Table Stats इंगित करता है कि कोई पंक्तियाँ नहीं हैं',nvl( TO_CHAR((((U.inserts+u.deletes+u.updates)/d.num_rows) * 100,'999.99'),'USER_TAB_MODIFICATIONS' में शून्य मान)) user_tables से प्रतिशत t,USER_TAB_MODIFICATIONS u,dba_tables dwhere u t.table_nameand d.table_name =t.table_nameand d.owner ='&स्वामी' और (u.inserts> 3000 या u.updates> 3000 or u.deletes> 3000)t.last_analyzed/
द्वारा ऑर्डर करें

अगर आप इसे पूरे डेटाबेस पर चलाना चाहते हैं

सेट सर्वरआउटपुट ऑनएसक्यूएल> DECLAREObjList dbms_stats.ObjectTab;BEGINDBMS_STATS.GATHER_DATABASE_STATS(objlist=>ObjList, options=>'LIST STALE'); के लिए ObjList.FIRST..Objms_output.put.OPnamedbms_output.LASTLO में k के लिए। || '।' 

यदि आप उन तालिकाओं को देखना चाहते हैं जहां आंकड़े खाली हैं, तो हम नीचे का उपयोग कर सकते हैं

सेट सर्वरआउटपुट ऑनएसक्यूएल> DECLAREObjList dbms_stats.ObjectTab;BEGINDBMS_STATS.GATHER_DATABASE_STATS(objlist=>ObjList, options=>'LIST EMPTY'); For k for k in ObjList.FIRST..Objms_output. || '।' 

अब जब आपको तालिकाओं की सूची मिल जाए, तो आप इन तालिकाओं पर आंकड़े उत्पन्न कर सकते हैं।

निष्पादित dbms_stats.gather_table_stats('OWNER', 'TABLE_NAME');

हम स्कीमा में सभी पुरानी वस्तु पर आंकड़े उत्पन्न करने के लिए कमांड के नीचे भी चला सकते हैं

exec dbms_stats.gather_schema_stats(ownername => '', cascade => TRUE, options => 'GATHER AUTO');

Oracle11g से शुरू होकर, STALE_PERCENT सांख्यिकी वरीयता का उपयोग करके स्टेलनेस थ्रेशोल्ड सेट किया जा सकता है। इसे DBMS_STATS.SET_GLOBAL_PREFS का उपयोग करके या तालिका स्तर पर DBMS_STATS.SET_TABLE_PREFS का उपयोग करके विश्व स्तर पर सेट किया जा सकता है।

संबंधित लेख

ora-38029:ऑब्जेक्ट आंकड़े लॉक हैं
ora-20001 11g पर स्कीमा आंकड़े इकट्ठा करें(FND_HISTOGRAM_COLS)
रिलीज़ 11i और R12 में आंकड़े एकत्र करना
11g में वृद्धिशील आंकड़े एकत्र करना
कैसे करें Oracle में टेबल मॉनिटरिंग सेट करें और STATISTICS_LEVEL के साथ संबंध


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीएल/एसक्यूएल में फंक्शन कैसे बनाएं?

  2. यहां कॉलम की अनुमति नहीं है INSERT स्टेटमेंट में त्रुटि

  3. संग्रहीत प्रक्रिया में पैरामीटर के रूप में तालिका नाम कैसे पास करें?

  4. SQL 'AND' या 'OR' पहले आता है?

  5. जावा में pl/sql सरणी वापसी मान प्राप्त करें