分享
 
 
 

监控当前并行查询运行状况脚本

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

简介:这个脚本创建一个简单的存储过程查看当前单实例的并行运行SQL状态,假如需要收集更多信息,可以修改此脚本。目前此脚本会统计每个会话的等待状态和物理I/O以及CPU信息。有助于在PX操作中找出繁忙和空闲的会话。

适用范围:适用于任何平台上的7.3.X 到9.2.X的Oracle数据库。

脚本说明:

必须用sys用户来执行这个脚本。

使用下面命令创建存储过程:

sqlplus sys/passWord @scriptfile

用sys用户给相应的用户执行此存储过程的权限:

grant execute on pqstat to user

用户使用下面的命令执行脚本:

set serveroutput on

execute PQSTAT; 给出所有PX会话的摘要信息

execute P QSTAT(1); 给出针对每个PX会话运行的当前SQL语句

execute PQSTAT(0,SID) 给出指定SID的PQ slaves的摘要信息

execute PQSTAT(1,SID) 给出上述所有信息并加上当前运行的SQL语句

脚本内容:

Create or Replace Procedure PqStat( detail number := 0, forsid number:=0 ) is

--

SepLine varchar2(80) := '-------------------------------';

nqueries number := 0;

doprint boolean;

--

-- Get Query Coordinators or a specific one (by SID)

--

Cursor QCcursor( insid number ) is

select distinct KXFPDPCPR , qc.SID

from X$KXFPDP qs, V$SESSION qc

where KXFPDPCPR!=hextoraw('0') and KXFPDPPRO!=hextoraw('0')

and bitand(KXFPDPFLG,16)=0 /* Slave not Idle */

and qc.paddr=qs.KXFPDPCPR

and (insid=0 or qc.sid=insid) ;

--

-- Get all local Query Slaves for a given QC

--

Cursor QScursor( creator raw ) is

select KXFPDPNAM, qs.KXFPDPPRO

from X$KXFPDP qs

where qs.KXFPDPCPR=creator

and KXFPDPPRO!=hextoraw('0') ;

--

-- Show Useful Stats for a session (CPU + Physical IO)

--

Procedure ShowPhys(prefix varchar2, insid number ) is

Cursor IOcursor is

select n.name, v.value

from v$sesstat v, v$statname n

where (n.name like 'physical%' or n.name like 'CPU used by this%')

and v.statistic#=n.statistic#

and v.sid=insid ;

i number:=0;

Begin

For IO in IOcursor

Loop

dbms_output.put_line(prefixIO.name'='IO.value);

i:=i+1;

End Loop;

dbms_output.put_line(' ');

End;

--

-- Show wait status of given session

--

Procedure ShowWait(prefix varchar2, insid number ) is

WaitInfo VarChar2(20);

Cursor SWcursor is

select *

from v$session_wait

where sid=insid ;

Cursor DQcursor(dqcode number) is

select indx'='reason

from X$KXFPSDS

where indx=dqcode ;

Begin

For SW in SWcursor

Loop

--

-- When we run this script on Versions later than 8.0.3

-- this IF clause never should be true.

-- But on the other this IF clause not hurt the script.

-- So I do not remove it.

--

if (SW.event='parallel query dequeue wait')

then

open DQcursor( SW.p1 );

fetch DQcursor into SW.event;

SW.p1text:=null;

SW.p1:=null;

close DQcursor;

end if;

if (SW.wait_time=0) then

dbms_output.put_line(prefix

'WAITING 'SW.seconds_in_wait's for "'

SW.event'" '

SW.p1text'='SW.p1' '

SW.p2text'='SW.p2' '

SW.p3text'='SW.p3);

else

dbms_output.put_line(prefix'RUNNING (wait seq#='SW.seq#')');

end if;

End Loop;

End;

--

-- Show current SQL statement for the given session

--

Procedure ShowSQL(prefix varchar2, addr raw, hash number ) is

Cursor SQLcursor is

select sql_text

from v$sqltext

where address=addr

and hash_value=hash

order by piece;

Begin

dbms_output.put_line(' ');

For SQ in SQLcursor

Loop

dbms_output.put_line(prefixSQ.sql_text);

End Loop;

dbms_output.put_line(' ');

End;

Procedure ShowSid(prefix varchar2, inpaddr raw ) is

Cursor SIDcursor is

select s.sid, spid, pid, c.terminal, s.process, osuser ,

s.username username, s.machine, s.sql_address,

s.sql_hash_value

from v$process c, v$session s

where c.addr=inpaddr

and c.addr=s.paddr ;

Begin

For SID in SIDcursor

Loop

dbms_output.put_line(prefix' Sid='SID.sid' ServerPid='SID.spid);

if (prefix='QC') then

dbms_output.put_line(' User='SID.username

' Client='SID.process' on 'SID.machine );

end if;

dbms_output.put_line(' ');

ShowPhys(' ',SID.sid);

ShowWait(' ',SID.sid);

if (detail>0) then

ShowSQL(' ', SID.sql_address, SID.sql_hash_value);

end if;

End Loop;

End;

Begin

dbms_output.enable(1000000);

dbms_output.put_line('Parallel Queries Running');

if (forsid!

=0) then

dbms_output.put_line(' for QC SID='forsid);

end if;

dbms_output.put_line(' ');

For QC in QCcursor( forsid )

Loop

doprint:=TRUE;

For QS in QScursor( QC.kxfpdpcpr )

Loop

If DoPrint Then

nqueries:=nqueries+1;

dbms_output.put_line(SepLine);

ShowSid('QC',QC.kxfpdpcpr );

DoPrint:=FALSE;

End If;

ShowSid(QS.kxfpdpnam,QS.kxfpdppro);

End Loop;

End Loop;

dbms_output.put_line(SepLine);

dbms_output.put_line(nqueries' Parallel Queries Found');

End;

/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有