Query time-consuming statement

lsnrctl status     //查看Service name

sqlplus sys/oracle@cdb1 as sysdba    //登录cdb

col name format a16
col pdb format a16
select name,pdb from v$services;

alter session set container=pdb_easyee;
# 创建一亿条数据
SET LINESIZE 200
SET PAGESIZE 999
create table students
(
    ID int,
    userName varchar(100),
    userPass varchar(100),
    userAge int
)
/

create or replace Procedure Test2
as
num NUMBER;
v_begintime varchar2(20);
v_endtime varchar2(20);
v_str varchar2(10);
begin
v_begintime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
 FOR i IN 1..10000000 LOOP
       insert into students values(i,'jack','jjjaa',23);
       num:=num+1;
        IF Mod(num,5000)=0 THEN 
               COMMIT; 
        END IF;
 END LOOP;
 v_endtime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
 dbms_output.put_line('startTime:'||v_begintime);
 dbms_output.put_line('endTime:'||v_endtime);
end Test2;
/

exec Test2

SQL> select count(*) from students;

  COUNT(*)
----------
  10000000
select * from students where username='jack';

select b.*
 from v$session a, v$session_longops b
 where a.sid=b.sid
 and a.serial#=b.serial#
 /
 
 
OPNAME:		    指长时间执行的操作名.如:Table Scan
TARGET:		    被操作的object_name. 如:tableA 
TARGET_DESC:	    描述target的内容 
SOFAR:			    这个是需要着重去关注的,表示已要完成的工作数,如扫描了多少个块。
TOTALWORK:		    指目标对象一共有多少数量(预计)。如块的数量。
UNITS: 
START_TIME:	    进程的开始时间
LAST_UPDATE_TIM:   最后一次调用set_session_longops的时间
TIME_REMAINING:    估计还需要多少时间完成,单位为秒
ELAPSED_SECONDS:   指从开始操作时间到最后更新时间
CONTEXT:
MESSAGE:			对于操作的完整描述,包括进度和操作内容。 
USERNAME:		    与v$session中的一样。
SQL_ADDRESS:	    关联v$sql
SQL_HASH_VALUE:    关联v$sql
QCSID:				主要是并行查询一起使用。


SET LINE 9999  PAGESIZE 9999
COL USERNAME FORMAT A10 
COL SESSION_INFO FORMAT A30
COL TARGET FORMAT A20
COL OPNAME FORMAT A35 
COL MESSAGE FORMAT A80 
COL SOFAR_TOTALWORK FORMAT A20 
COL PROGRESS FORMAT A8

SELECT A.USERNAME, 
       (SELECT NB.SID || ',' || NB.SERIAL# || ',' || PR.SPID || ',' ||NB.OSUSER|| ',' ||NB.STATUS|| ',' ||NB.EVENT
          FROM GV$PROCESS PR, GV$SESSION NB
         WHERE NB.PADDR = PR.ADDR
           AND NB.SID = A.SID
           AND NB.SERIAL# = A.SERIAL#
           AND PR.INST_ID = NB.INST_ID) SESSION_INFO,
       A.TARGET,
       A.OPNAME,
       TO_CHAR(A.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME,
       ROUND(A.SOFAR * 100 / A.TOTALWORK, 2) || '%' AS PROGRESS,
       (A.SOFAR || ':' || A.TOTALWORK) SOFAR_TOTALWORK,
       A.TIME_REMAINING TIME_REMAINING,
       A.ELAPSED_SECONDS ELAPSED_SECONDS,
       MESSAGE MESSAGE
  FROM GV$SESSION_LONGOPS A
 WHERE A.TIME_REMAINING <> 0
 ORDER BY  A.TIME_REMAINING DESC, A.SQL_ID, A.SID;