ITPub博客

首页 > 数据库 > 数据库开发技术 > In PL/SQL,the statement of "into variable" wasn't appeared in statspack

In PL/SQL,the statement of "into variable" wasn't appeared in statspack

原创 数据库开发技术 作者:shiyihai 时间:2007-07-31 11:42:21 0 删除 编辑

一现网数据库cpu经常告警,从statspack报告中可以看到如下的语句消耗了大量的IO和CPU资源:

SELECT NVL(MAX(MENUSEQ),0) FROM MENU WHERE PORTALTYPEID = 4 AND PARENTMENUID = :B1;

初一看,这个查询语句明显应该是应用所发出的,不应该是后台程序,因为后台程序的话需有into variable才行。

[@more@]

查询后台程序的脚本,发现语句“select nvl(max(menuseq),0) into v_maxmenuseq from menu where portaltypeid = 4 and parentmenuid = v_parentmenuid;”确实存在,莫非statspack中的语句就是这个语句?
难道PL/SQL中的into variable不会体现在statspack中?
带着这个疑问我做了一个小测试,如下:
create table into_test
(
num number(8)
);


CREATE OR REPLACE PROCEDURE proc_test_select_into
AS
v_maxmenuseq number; --菜单序列号
v_a number;
BEGIN
for v_a in 1 .. 1000000
loop
select nvl(max(menuseq),0) into v_maxmenuseq from menu where portaltypeid = 4 and parentmenuid = v_a;
insert into into_test values(v_maxmenuseq);
commit;
end loop;


commit;
return;

EXCEPTION
when OTHERS then
rollback;

END proc_test_select_into;
/

exec proc_test_select_into;

在执行proc_test_select_into的前后,做了两次snap。
top sql中有如下的结果:

Module: PL/SQL Developer
SELECT NVL(MAX(MENUSEQ),0) FROM MENU WHERE PORTALTYPEID = 4 AND
PARENTMENUID = :B1

268,583 132,366 2.0 10.5 24.73 32.05 1630224389
Module: PL/SQL Developer
INSERT INTO INTO_TEST VALUES(:B1 )

174,919 29 6,031.7 6.8 2.72 3.53 69608699

可看出的确PL/SQL中的into variable不会体现在statspack中。
其他应用中发出的into variable是会体现在statspack中的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/38542/viewspace-929629/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORA-03135 & ORA-3136
请登录后发表评论 登录
全部评论
  • 博文量
    235
  • 访问量
    1707881