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

ऑरैकल में पूर्ण तालिका स्कैन खोजने की क्वेरी

कई बार डेटाबेस का प्रदर्शन धीमा होगा। हमें पहले यह पता लगाना होगा कि क्या कोई बड़ी तालिका पूर्ण तालिका स्कैन चल रही है।

आइए पहले देखें कि फुल टेबल स्कैन क्या है और फिर हम ऑरैकल में फुल टेबल स्कैन खोजने के लिए क्वेरी देखेंगे

पूर्ण तालिका स्कैन क्या है

  • पूर्ण तालिका स्कैन ऑप्टिमाइज़र द्वारा उपयोग की जाने वाली पहुंच पद्धति में से एक है। इसमें तालिका के सभी ब्लॉक (HWM तक) स्कैन किए जाते हैं और WHERE क्लॉज फ़िल्टर शर्तें लागू की जाती हैं और फ़िल्टर की स्थिति को संतुष्ट करने वाली पंक्तियों को वापस कर दिया जाता है। समझाएं योजना इस तरह दिखाई देगी
Execution Plan
TABLE ACCESS FULL OF HZ_PARTIES
  • पूर्ण तालिका स्कैन ने एकाधिक ब्लॉक रीड का उपयोग करके तालिका को स्कैन किया। प्रत्येक आईओ के लिए स्कैन किए गए एकाधिक ब्लॉक -> कम आईओ संचालन किए जाते हैं
  • db_multiblock_read_count init.ora पैरामीटर मल्टीब्लॉक काउंट तय करते हैं। हाल का संस्करण, ऑरैकल स्वयं इस पैरामीटर को सिस्टम के अनुसार समायोजित करता है और आपको इसे परिभाषित करने की आवश्यकता नहीं है
  • HWM क्या है - हाई वाटर मार्क :यह वह सीमा है जो उन ब्लॉकों को अलग करती है जिनमें डेटा होता है या जिनमें डेटा होता है और जिन्हें कभी डाला नहीं गया है। HWM के नीचे के ब्लॉकों की संख्या dba_tables व्यू के ब्लॉक कॉलम के माध्यम से प्राप्त की जा सकती है

ऑरैकल में पूर्ण तालिका स्कैन खोजने के लिए क्वेरी

col event format a25
col module format a50
col File format 9999
col Block format 9999999
set lines 130
set trimspool on
select sessw.SID, sessw.EVENT, sessw.p1 "File",sessw.p2 "Block", s.MODULE
from v$session_wait sessw, v$session sess
where sessw.sid = sess.sid
and sessw.event like '%scattered%'
order by 1
/

उपरोक्त क्वेरी डेटाबेस में चल रहे किसी भी वर्तमान पूर्ण तालिका स्कैन की रिपोर्ट करेगी। आप नीचे दी गई क्वेरी से तालिका का नाम पा सकते हैं

select segment_name
from dba_extents
where file_id = &fileid
and &block between block_id and block_id + blocks - 1
;

यदि आप पूर्ण तालिका स्कैन के लिए डेटाबेस में सभी मौजूदा सत्र का इतिहास देखना चाहते हैं, तो हम नीचे दी गई क्वेरी का उपयोग कर सकते हैं

column user_process heading "Name |SID" format a20;
column long_scans heading "Long Scans" format 999,999,999;
column short_scans heading "Short Scans" format 999,999,999;
column rows_retreived heading "Rows Retrieved" format 999,999,999;
set linesize 1000
set timing on
select ss.username||'('||se.sid||') ' "USER_PROCESS",
sum(decode(name,'table scans (short tables)',value)) "SHORT_SCANS",
sum(decode(name,'table scans (long tables)', value)) "LONG_SCANS",
sum(decode(name,'table scan rows gotten',value)) "ROWS_RETRIEVED"
from v$session ss, v$sesstat se, v$statname sn
where se.statistic# = sn.statistic#
and (name like '%table scans (short tables)%'
or name like '%table scans (long tables)%'
or name like '%table scan rows gotten%' )
and se.sid = ss.sid
and ss.username is not null
group by ss.username||'('||se.sid||') '
order by LONG_SCANS desc
/

यदि आप फुल टेबल स्कैन स्टेटमेंट के लिए लाइब्रेरी कैश में कैश्ड सभी sql को खोजना चाहते हैं

select sql_id,object_owner,object_name from V$SQL_PLAN where
operation='TABLE ACCESS' and
options='FULL' and
object_owner <> 'SYS';

आप नीचे दी गई क्वेरी का उपयोग करके sql_id से पूरा टेक्स्ट प्राप्त कर सकते हैं

SELECT sql_text, parsing_schema_name, module
FROM v$sql
WHERE sql_id = '&1'

Oracle में फुल टेबल स्कैन से कैसे बचें

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

जाँच करने के लिए कुछ चीज़ें निम्नलिखित हैं
(a) पुराने अनुकूलक आँकड़े:कृपया जाँचें कि क्या तालिकाओं पर उपलब्ध अनुकूलक आँकड़े वर्तमान हैं और वास्तविक डेटा से अधिक भिन्न नहीं हैं
(b) अनुक्रमणिका और अनुक्रमणिका जाँचें क्लस्टरिंग कारक :हो सकता है कि आप सही अनुक्रमणिका खो रहे हों
(c) क्वेरी समानांतर खंड का उपयोग कर रही हो और इसलिए इष्टतम योजना के रूप में पूर्ण तालिका स्कैन का चयन कर रही हो
(d) Optimizer_mode,optimizer_index_cost_adj, Optimizer_index_caching<के लिए गलत पैरामीटर सेटिंग्स /पी>

कभी-कभी क्वेरी पर sql ट्यूनिंग सलाहकार चलाने से मदद मिलती है

संबंधित लेख
ओरेकल में योजना की व्याख्या करें:ओरेकल में योजना की व्याख्या के बारे में सब कुछ, ओरेकल को कैसे पढ़ा जाए, प्रदर्शन से संबंधित मुद्दे के लिए योजना की व्याख्या कैसे करें, कर्सर में क्वेरी के लिए व्याख्या योजना कैसे खोजें
ओरेकल में तार्किक रूप से क्या पढ़ा जाता है:क्या है ओरेकल में लॉजिकल रीड और ओरेकल में फिजिकल आई/ओ, जो प्रदर्शन के मामले में बेहतर लॉजिकल और फिजिकल आई/ओ है, फिजिकल रीड्स खोजने के लिए क्वेरीज
एसक्यूएल ट्यूनिंग एडवाइजर:कर्सर में sql_id के लिए sql ट्यूनिंग एडवाइजर कैसे चलाएं कैश, अनुशंसा प्राप्त करने के लिए एसक्यूएल ट्यूनिंग कार्य कैसे बनाया और निष्पादित किया जाता है
ओरेकल में एक टेबल पर इंडेक्स ढूंढें:ओरेकल में एक टेबल पर इंडेक्स कैसे ढूंढें, इस बारे में प्रश्नों को ढूंढने के लिए इस आलेख को देखें, स्कीमा में सभी इंडेक्स सूचीबद्ध करें ,इंडेक्स स्टेटस, इंडेक्स कॉलम
ऑरैकल में बाइंड वेरिएबल्स:बाइंड वैरिएबल एसक्लप्लस और पीएलएसक्यूएल में मानों के लिए प्लेसहोल्डर हैं और स्टेटमेंट निष्पादित होने पर इसे वैल्यू से बदल दिया जाता है
ओरेकल में एसक्यूएल प्रोफाइल कैसे जांचें:चेक करें इस पोस्ट को ओरेकल में एसक्यूएल प्रोफाइल की जांच कैसे करें, एसक्यूएल प्रोफेसर की सामग्री कैसे खोजें? ile, sql प्रोफ़ाइल को कैसे छोड़ें


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

  2. मैं ओरेकल में पीएल-एसक्यूएल के साथ कम विशेषाधिकारों के साथ कॉलम डेटाटाइप कैसे प्राप्त करूं?

  3. Oracle में किसी तिथि में AD/BC संकेतक कैसे जोड़ें?

  4. Oracle में बूलियन फील्ड

  5. ओरेकल के लिए सी # पैरामीटरयुक्त प्रश्न - गंभीर और खतरनाक बग!