দীর্ঘ চলমান প্রশ্নের জন্য কীভাবে ওরাকল ডাটাবেস চেক করবেন


99

আমার অ্যাপ্লিকেশন, যা একটি ওরাকল ডাটাবেস ব্যবহার করে, ধীরে ধীরে চলছে বা পুরোপুরি বন্ধ হয়ে গেছে বলে মনে হচ্ছে।

কোন অনুসন্ধানগুলি সবচেয়ে ব্যয়বহুল তা কীভাবে আবিষ্কার করতে পারি, তাই আমি আরও তদন্ত করতে পারি?

উত্তর:


136

এটি একটিতে এসকিউএল দেখায় যা বর্তমানে "সক্রিয়": -

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
/

4
এই জাতীয় প্রশ্নগুলি যদি তারা মিনিটেরও বেশি সময় ধরে চালায় তবে কী নিরাপদে হত্যা করার কোনও উপায় আছে? @ উম্বারফেরুল যদিও উত্তরের জন্য ধন্যবাদ
টম্মিটি ২

4
@ টমমিটি আপনি alter system kill sessionএখানে বর্ণিত হিসাবে ব্যবহার করতে পারেন : ডকস.ওরকল

37

এটি ব্যবহার করে দেখুন, এটি আপনাকে বর্তমানে 60 সেকেন্ডেরও বেশি সময় ধরে চলমান প্রশ্নগুলি দেবে। মনে রাখবেন যে এসকিউএল এর একাধিক লাইন থাকলে এটি চলমান ক্যোয়ারি প্রতি একাধিক লাইন মুদ্রণ করে। একসাথে কী আছে তা দেখতে সিরিড, সিরিয়াল দেখুন Look

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

আমি এই ক্যোয়ারীটি চালাচ্ছি এবং এটি আমাকে অবৈধ বিবৃতি হিসাবে জানিয়েছে

এটি বৈধ আমি এটি পরীক্ষা করেছি। কোয়েরিতে আপনি কোন সরঞ্জামটি ব্যবহার করছেন? এটি # সাইন দিয়ে বিভ্রান্ত হয়ে উঠছে। শুরু এবং শেষটিকে এভাবে পরিবর্তন করার চেষ্টা করুন: "থেকে * নির্বাচন করুন ... সিড দ্বারা আদেশ করুন, q.piece"
কার্লোস এ। ইবাররা

4
এছাড়াও, আপনাকে এটিকে এমন একটি সরকারী অ্যাকাউন্ট দিয়ে চালিত করতে হবে যা v $ সেশনে, v $ sqltext_with_newlines

এটি কাজ করে তবে ক্যোয়ারির এসকিউএল পাঠ্যটি খুব আশ্চর্যের সাথে ফর্ম্যাট করে দেয়।
বার্নহার্ড ডাবলার

7

v $ সেশন_লংপপস

আপনি যদি সোফার সন্ধান করেন! = মোট কাজ আপনি দেখতে পাবেন না যা সম্পন্ন হয়নি, তবে ক্রিয়াকলাপ শেষ হলে এন্ট্রিগুলি সরানো হয় না যাতে আপনি সেখানেও প্রচুর ইতিহাস দেখতে পাবেন।


ভাল ইঙ্গিত। এখানে বিস্তারিত আলোচনা ।
dma_k

4
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;

1

আপনি ডাটাবেস থেকে একটি AWR (স্বয়ংক্রিয় ওয়ার্কলোড রিপোজিটরি) প্রতিবেদন তৈরি করতে পারেন।

এসকিউএল * প্লাস কমান্ড লাইন থেকে চালান:

SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql

কীভাবে কোনও এডাব্লুআর রিপোর্ট উত্পন্ন এবং বুঝতে হয় সে সম্পর্কিত দস্তাবেজটি পড়ুন। এটি ডাটাবেস কর্মক্ষমতা এবং সংস্থান সংক্রান্ত সামগ্রীর একটি সম্পূর্ণ দর্শন দেবে। একবার আমরা এডাব্লুআর প্রতিবেদনের সাথে পরিচিত হয়ে গেলে শীর্ষস্থানীয় এসকিউএল যা সম্পদ গ্রহণ করছে তা সন্ধান করা সহায়ক হবে।

এছাড়াও, 12 সি ইএম এক্সপ্রেস ইউআইতে আমরা একটি এডাব্লুআর তৈরি করতে পারি।


0

আপনি নীচের ক্যোয়ারী ব্যবহার করে% সমাপ্ত এবং অবশিষ্ট সময় এর মতো দীর্ঘ-চলমান প্রশ্নের বিশদটি পরীক্ষা করতে পারেন:

 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;

সমস্যার সমাধানের পদক্ষেপের সম্পূর্ণ তালিকার জন্য আপনি এখানে যাচাই করতে পারেন: দীর্ঘ চলমান সেশনগুলির সমস্যা নিবারণ


0
select sq.PARSING_SCHEMA_NAME, sq.LAST_LOAD_TIME, sq.ELAPSED_TIME, sq.ROWS_PROCESSED, ltrim(sq.sql_text), sq.SQL_FULLTEXT
  from v$sql sq, v$session se
 order by sq.ELAPSED_TIME desc, sq.LAST_LOAD_TIME desc;

0

5 সেকেন্ডের চেয়ে বেশি সময় ধরে চলতে থাকা অনুসন্ধানগুলি খুঁজতে আপনি v $ sql_monitor ভিউটি ব্যবহার করতে পারেন। এটি কেবল ওরাকল এর এন্টারপ্রাইজ সংস্করণে উপলব্ধ। উদাহরণস্বরূপ এই কোয়েরিটি আমার 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;

দ্রষ্টব্য সময় অতিবাহিত মাইক্রোসেকেন্ডে তাই / 1000000 আরও কিছু পাঠযোগ্য get

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.