www.Orasql.Com
 
用户名: 密码:  验证码: 注册|找回密码 oracleawen's blog  
 
         当前位置 >> 技术论坛  发表帖子     论坛版块     查找帖子
V$SQL 视图详解加几个实例-技术论坛||Oracle高手之路—Orasql.Com!
            V$SQL 视图详解加几个实例
 
发贴人:oracle_awen
oracleawen@gmail.com448315233127.0.0.1
用户级别:管理员
发贴总数:1245
注册时间:2011-05-05 09:23:03
2012-02-27 09:24:06


几个例子:
1、查询消费磁盘I/O最多的sql语句


SQL> select sql_text,executions,disk_reads from v$sql where disk_reads>400 order
 by disk_reads desc;

SQL> col sql_text for a50;
SQL> /

SQL_TEXT                                           EXECUTIONS DISK_READS
-------------------------------------------------- ---------- ----------
select count(*) from awen.ob_bak                            1     229051
select count(*) from ob_bak                                 1     229018
select count(*) from ob_com                                 1      87005
select count(*) from awen.ob_com                            1      86766
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHER          2        501
E_CLAUSE NO_PARALLEL(SAMPLESUB) opt_param('paralle
l_execution_enabled', 'false') NO_PARALLEL_INDEX(S
AMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),0), NVL(SUM(C
2),0) FROM (SELECT /*+ NO_PARALLEL("OB_COM") FULL(
"OB_COM") NO_PARALLEL_INDEX("OB_COM") */ 1 AS C1,
1 AS C2 FROM "AWEN"."OB_COM" SAMPLE BLOCK (0.07208
3 , 1) SEED (1) "OB_COM") SAMPLESUB


2、查询逻辑读取数最多的sql语句

SQL> select sql_text,buffer_gets,parse_calls from v$sql where buffer_gets>10000
order by buffer_gets desc;

SQL_TEXT                                           BUFFER_GETS PARSE_CALLS
-------------------------------------------------- ----------- -----------
begin for i in 1 .. 1000000 loop insert into over_     1122409           1
com values(i); end loop; end;

INSERT INTO OVER_COM VALUES(:B1 )                      1122406           1
select count(*) from awen.ob_bak                        265131           1
select count(*) from ob_bak                             265131           1
select count(*) from ob_com                              87049           1
select count(*) from awen.ob_com                         87047           1
DECLARE job BINARY_INTEGER := :job; next_date DATE       31077         160
 := :mydate;  broken BOOLEAN := FALSE; BEGIN EMD_M
AINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(); :mydate :=
 next_date; IF broken THEN :b := 1; ELSE :b := 0;
END IF; END;

select file#, block# from seg$ where type# = 3 and       15399         261
 ts# = :1

3、消耗CPU最多的SQL

SQL> select sql_text,cpu_time,buffer_gets from v$sql where cpu_time>500000 order
 by cpu_time desc;

SQL_TEXT                                             CPU_TIME BUFFER_GETS
-------------------------------------------------- ---------- -----------
begin for i in 1 .. 1000000 loop insert into over_   23426954     1122409
com values(i); end loop; end;

INSERT INTO OVER_COM VALUES(:B1 )                    14556875     1122406
select count(*) from awen.ob_bak                      3359889      265131
select count(*) from ob_bak                           3250529      265131
select count(*) from ob_com                           1640647       87049
insert into wrh$_sga_target_advice   (snap_id, dbi    1437772          95
d, instance_number,    SGA_SIZE, SGA_SIZE_FACTOR,
ESTD_DB_TIME, ESTD_PHYSICAL_READS)  select    :sna
p_id, :dbid, :instance_number,    SGA_SIZE, SGA_SI
ZE_FACTOR, ESTD_DB_TIME, ESTD_PHYSICAL_READS  from
    v$sga_target_advice

select count(*) from awen.ob_com                      1375021       87047
DECLARE job BINARY_INTEGER := :job; next_date DATE     632426       31317
 := :mydate;  broken BOOLEAN := FALSE; BEGIN EMD_M
AINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(); :mydate :=
 next_date; IF broken THEN :b := 1; ELSE :b := 0;
END IF; END;

 


V$SQL 视图字段的示意:

SQL_TEXT:SQL文本的前1000个字符
SHARABLE_MEM:占用的共享内存大小(单位:byte)
PERSISTENT_MEM:生命期内的固定内存大小(单位:byte)
RUNTIME_MEM:执行期内的固定内存大小
SORTS:完成的排序数
LOADED_VERSIONS:显示上下文堆是否载入,1是0否
OPEN_VERSIONS:显示子游标是否被锁,1是0否
USERS_OPENING:执行语句的用户数
FETCHES:SQL语句的fetch数。
EXECUTIONS:自它被载入缓存库后的执行次数 
USERS_EXECUTING:执行语句的用户数
LOADS:对象被载入过的次数
FIRST_LOAD_TIME:初次载入时间
INVALIDATIONS:无效的次数
PARSE_CALLS:解析调用次数
DISK_READS:读磁盘次数
BUFFER_GETS:读缓存区次数
ROWS_PROCESSED:解析SQL语句返回的总列数
COMMAND_TYPE:命令类型代号
OPTIMIZER_MODE:SQL语句的优化器模型
OPTIMIZER_COST:优化器给出的本次查询成本
PARSING_USER_ID:第一个解析的用户ID
PARSING_SCHEMA_ID:第一个解析的计划ID
KEPT_VERSIONS:指出是否当前子游标被使用DBMS_SHARED_POOL包标记为常驻内存
ADDRESS:当前游标父句柄地址
TYPE_CHK_HEAP:当前堆类型检查说明
HASH_VALUE:缓存库中父语句的Hash值
PLAN_HASH_VALUE:数值表示的执行计划。
CHILD_NUMBER:子游标数量
MODULE:在第一次解析这条语句是通过调用DBMS_APPLICATION_INFO.SET_MODULE设置的模块
名称。
ACTION:在第一次解析这条语句是通过调用DBMS_APPLICATION_INFO.SET_ACTION设置的动作名
称。
SERIALIZABLE_ABORTS:事务未能序列化次数
OUTLINE_CATEGORY:如果outline在解释cursor期间被应用,那么本列将显示出outline各类,否则
本列为空
CPU_TIME:解析/执行/取得等CPU使用时间(单位,毫秒)
ELAPSED_TIME:解析/执行/取得等消耗时间(单位,毫秒)
OUTLINE_SID:outline session标识
CHILD_ADDRESS:子游标地址 
SQLTYPE:指出当前语句使用的SQL语言版本
REMOTE:指出是否游标是一个远程映象(Y/N)
OBJECT_STATUS:对象状态(VALID or INVALID)
IS_OBSOLETE:当子游标的数量太多的时候,指出游标是否被废弃(Y/N) 

 

 

 

 

      
 
  
 Orasql.Com|E-Mail:oracleawen@gmail.com|Phone:15271942915|Copyright © 2011|All Rights Reserved|