ओरेकल डेटाबेस का उपयोग करने वाला मेरा एप्लिकेशन धीमा चल रहा है या पूरी तरह से बंद हो गया है।
मैं कैसे पता लगा सकता हूं कि कौन से प्रश्न सबसे महंगे हैं, इसलिए मैं आगे की जांच कर सकता हूं?
ओरेकल डेटाबेस का उपयोग करने वाला मेरा एप्लिकेशन धीमा चल रहा है या पूरी तरह से बंद हो गया है।
मैं कैसे पता लगा सकता हूं कि कौन से प्रश्न सबसे महंगे हैं, इसलिए मैं आगे की जांच कर सकता हूं?
जवाबों:
यह एक SQL दिखाता है जो वर्तमान में "सक्रिय" है: -
select S.USERNAME, s.sid, s.osuser, t.sql_id, sql_text
from v$sqltext_with_newlines t,V$SESSION s
where t.address =s.sql_address
and t.hash_value = s.sql_hash_value
and s.status = 'ACTIVE'
and s.username <> 'SYSTEM'
order by s.sid,t.piece
/
इससे ताले का पता चलता है। कभी-कभी चीजें धीमी होती जा रही हैं, लेकिन यह इसलिए है क्योंकि यह लॉक के इंतजार में अवरुद्ध है:
select
object_name,
object_type,
session_id,
type, -- Type or system/user lock
lmode, -- lock mode in which session holds lock
request,
block,
ctime -- Time since current mode was granted
from
v$locked_object, all_objects, v$lock
where
v$locked_object.object_id = all_objects.object_id AND
v$lock.id1 = all_objects.object_id AND
v$lock.sid = v$locked_object.session_id
order by
session_id, ctime desc, object_name
/
लंबे ऑपरेशन (जैसे फुल टेबल स्कैन) खोजने के लिए यह एक अच्छा है। यदि यह बहुत सारे छोटे ऑपरेशनों के कारण है, तो कुछ भी नहीं दिखाई देगा।
COLUMN percent FORMAT 999.99
SELECT sid, to_char(start_time,'hh24:mi:ss') stime,
message,( sofar/totalwork)* 100 percent
FROM v$session_longops
WHERE sofar/totalwork < 1
/
alter system kill session
यहां बताए अनुसार उपयोग कर सकते हैं : docs.oracle.com/cd/B28359_01/server.111/b28310/…
यह कोशिश करो, यह आपको वर्तमान में 60 सेकंड से अधिक समय तक चलने वाले प्रश्न देगा। ध्यान दें कि यदि SQL में कई लाइनें हैं, तो यह प्रति रनिंग क्वेरी में कई लाइनें प्रिंट करता है। एक साथ क्या है, यह देखने के लिए, धारावाहिक, धारावाहिक को देखें।
select s.username,s.sid,s.serial#,s.last_call_et/60 mins_running,q.sql_text from v$session s
join v$sqltext_with_newlines q
on s.sql_address = q.address
where status='ACTIVE'
and type <>'BACKGROUND'
and last_call_et> 60
order by sid,serial#,q.piece
वी $ session_longops
यदि आप सोफ़र को देखते हैं! = टोटलवर्क आप उन लोगों को देखेंगे जो पूर्ण नहीं हुए हैं, लेकिन ऑपरेशन पूरा होने पर प्रविष्टियाँ नहीं निकाली जाती हैं, इसलिए आप वहाँ बहुत सारा इतिहास देख सकते हैं।
Step 1:Execute the query
column username format 'a10'
column osuser format 'a10'
column module format 'a16'
column program_name format 'a20'
column program format 'a20'
column machine format 'a20'
column action format 'a20'
column sid format '9999'
column serial# format '99999'
column spid format '99999'
set linesize 200
set pagesize 30
select
a.sid,a.serial#,a.username,a.osuser,c.start_time,
b.spid,a.status,a.machine,
a.action,a.module,a.program
from
v$session a, v$process b, v$transaction c,
v$sqlarea s
Where
a.paddr = b.addr
and a.saddr = c.ses_addr
and a.sql_address = s.address (+)
and to_date(c.start_time,'mm/dd/yy hh24:mi:ss') <= sysdate - (15/1440) -- running for 15 minutes
order by c.start_time
/
Step 2: desc v$session
Step 3:select sid, serial#,SQL_ADDRESS, status,PREV_SQL_ADDR from v$session where sid='xxxx' //(enter the sid value)
Step 4: select sql_text from v$sqltext where address='XXXXXXXX';
Step 5: select piece, sql_text from v$sqltext where address='XXXXXX' order by piece;
आप डेटाबेस से AWR (स्वचालित वर्कलोड रिपॉजिटरी) रिपोर्ट जनरेट कर सकते हैं।
SQL * प्लस कमांड लाइन से चलाएँ:
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
AWR रिपोर्ट कैसे जनरेट करें और समझें से संबंधित दस्तावेज़ पढ़ें। यह डेटाबेस प्रदर्शन और संसाधन मुद्दों का एक पूरा दृश्य देगा। एक बार जब हम AWR रिपोर्ट से परिचित हो जाते हैं तो यह टॉप SQL खोजने में सहायक होगा जो संसाधनों का उपभोग कर रही है।
इसके अलावा, 12C EM एक्सप्रेस UI में हम एक AWR जेनरेट कर सकते हैं।
आप निम्न क्वेरी का उपयोग करके लंबे समय से चल रहे प्रश्नों के विवरण जैसे% पूर्ण और शेष समय की जांच कर सकते हैं:
SELECT SID, SERIAL#, OPNAME, CONTEXT, SOFAR,
TOTALWORK,ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK;
समस्या निवारण चरणों की पूरी सूची के लिए, आप यहाँ जाँच कर सकते हैं: लंबे समय तक चलने वाले सत्रों का निवारण
5 सेकंड से अधिक समय तक चलने वाले प्रश्नों को खोजने के लिए आप v $ sql_monitor दृश्य का उपयोग कर सकते हैं। यह केवल Oracle के एंटरप्राइज़ संस्करणों में उपलब्ध हो सकता है। उदाहरण के लिए यह क्वेरी मेरी TEST_APP सेवा से धीमी गति से चलने वाले प्रश्नों की पहचान करेगी:
select to_char(sql_exec_start, 'dd-Mon hh24:mi'), (elapsed_time / 1000000) run_time,
cpu_time, sql_id, sql_text
from v$sql_monitor
where service_name = 'TEST_APP'
order by 1 desc;
नोट elapsed_time microseconds में है / 1000000 कुछ और पठनीय पाने के लिए