首页 > 代码库 > PLSQL_在执行1亿条资料插入长脚本如何判断需耗时多久v$sql / v$sqltext / v$sqlarea / v$sql_plan(案例)(监控SQL效率)

PLSQL_在执行1亿条资料插入长脚本如何判断需耗时多久v$sql / v$sqltext / v$sqlarea / v$sql_plan(案例)(监控SQL效率)

2014-08-27 BaoXinjian

一、摘要


当执行耗时时间较长的PLSQL时,有时需要查看程式运行的进度,目前已经处理了多少资料,还需处理多上资料

如果程式中专门的Log Module管控这一块,问题就不太大

如果没有这个这块的管控,可能就需要通过跟踪session,并查询动态性能视图,大概猜测出系统的运行情况,特别是undo表空间的变化

 

二、案例


案例:

Step1. 创建测试表bxj_test

create table bxj_test (    invoice_id number,    invoice_num varchar2(100),    total number,    company varchar2(100),    description varchar2(500),    creation_date date)

 

Step2. 创建测试程式,杀入1以一条

declare  i integer;begin  for i in 1 .. 100000000 loop    insert into apps.bxj_test    values      (i,       INVOICENUM_ || lpad(to_char(i), 10, 0),       dbms_random.value(1, 100000000),       Gavin Corporation,       Invoice Description || to_char(sysdate, YYYYMMDD HH24:MI:SS),       sysdate);  end loop;  commit;end;

 

 

Step3. 动态性能视图1  -> v$session

SELECT   sid,         --serial#,         --username,         --command,         --status,         --osuser,         --sql_address,         --sql_hash_value,         sql_id,         sql_exec_start,         prev_sql_id,         prev_exec_start,         event,         wait_class,         state,         sql_trace,         program  FROM   v$session WHERE   terminal = GAVIN-PC  AND sid = 373 AND status = ACTIVE AND program like plsqldev.exe

 

Step4. 动态性能视图2 - v$sql

select sql_id, sql_text, executions, cpu_time, elapsed_time from v$sqlwhere sql_id = 3rf19a6yjvz18 

 

Step5. 动态性能视图3 - v$sqltext

select * from v$sqltextwhere sql_id = 3rf19a6yjvz18order by piece

 

Step6. 动态性能视图4 - v$sql_plan

select sql_id, operation, optimizer, id, parent_id, depth, position, search_columns, cost from v$sql_planwhere sql_id = 3rf19a6yjvz18

 

Step7. 其他动态性能视图

select * from V$SESSION_LONGOPSwhere 1=1and target = APPS.BXJ_TEST_INVOICEand sid = 38select * from V$SESSION_WAITwhere sid = 24select * from V$SESSION_WAIT_CLASSselect * from V$SESS_IOwhere sid = 24select * from V$SESSION_EVENTwhere sid = 24

 

 

 

 

 

Step6. 通过确认undo空间的大小变化,确定已操作记录条数

 

 

三、案例 - nohup转入后台运行脚本


nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。

在注销后使用 nohup 命令运行后台中的程序。

要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

 

1. 重定向日志文件

如 果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

 

2. 主要概念

(1). 功能:使进程在退出登录后仍旧继续执行。

(2). 格式:$ nohup <程序名>  &

(3). 结果:如果程序program有结果输出,输出结果将会被保存到当前目录下的一个文件名为 nohup.out的文件中,如果用户在当前目录没有写的权限, 则结果将会被保存到用户主目录下的nohup.out文件中。

(4). 查看:jobs

 

********************作者:鲍新建********************

 

 

参考:http://cc59.itpub.net/post/1845/286133

PLSQL_在执行1亿条资料插入长脚本如何判断需耗时多久v$sql / v$sqltext / v$sqlarea / v$sql_plan(案例)(监控SQL效率)