oracle sql资源消耗相关视图:v$sql,v$sqlarea,v$sqltext


今天要验证一个Full table scan问题的patch,需要分析一下sql执行情况,用到了v$sqlarea视图,感觉这篇文章讲得挺明白,摘抄一部分做个读书笔记。

1       常用视图说明

Oracle sql语句资源消耗监控,最常用的系统视图有:

v$sql

v$sqlarea

v$sqltext

v$session

 

v$sql与v$sqlarea基本相同,记录共享sql区(share pool)中sql统计信息,如内存消耗、IO(物流磁盘读和逻辑内存读)、排序操作、哈希ID等数据。不同之处在于v$sql为每一条sql保留一个条目,而v$sqlarea中根据sql_text进行group by,统计列进行sum(),通过version_count计算子指针的个数。

         Sql_text相同的sql语句在数据库中意义可能完全不同,此时,v$sql会有这两条完全一样的sql各自的统计信息,而在v$sqlarea中sql_text相同的2个指针会合并,执行次数,DISK_READS,BUFFER_GETS等统计信息会累加,这就是v$sqlarea的聚合作用

         v$sqltext中没有统计信息,却存储着完整的sql语言及其哈希ID等。

         v$session主要用来确定会话相关信息,如通过SID和SERIAL来确定一个Session、会话拥有者用户名username、会话状态、会话由哪个客户端发起、正在执行什么sql(通过sql_address、sql_hash_value、sql_id、sql_child_number确定,再借助v$sqltext就可以知道)、锁等待相关信息(如所在表、文件、块、被锁行)等。

        

查看视图原表:

SELECTview_definition FROM v$fixed_view_definition WHERE view_name='GV$SQL';

SELECTview_definition FROM v$fixed_view_definition WHERE view_name='GV$SQLAREA';

SELECTview_definition FROM v$fixed_view_definition WHERE view_name='GV$SQLTEXT';

        视图名为v$sql但该视图的源又是GV$sql,所以直接使用GV$SQL,其他两个也如此。

 

2       视图重要字段

2.1      v$sqlarea

sql_text: sql 语句的前1000个字符

sql_fulltext: sql语句的所有字符

sql_id:缓存在高速缓冲区中的sql父游标的唯一标识ID

sorts: 语句执行导致的排序次数

version_count:在缓存中以该语句为父语句的子游标总数

executions: 包含所有子游标在内该sql语句共执行次数

parse_calls:父游标下所有子游标解析调用次数

disk_reads: 该语句通过所有子游标导致的读磁盘次数

address:当前游标父句柄

hash_value: 该语句在library cache中的hash值

2.2      v$sqltext

address: 当前游标父句柄

hash_value:该游标在library cache中唯一hash值

3       高资源消耗sql定位

3.1      查看读硬盘多或占用内存可能多的sql

Selectsql_text,disk_reads,buffer_gets,parsing_scheme_name,executions

From v$sqlarea

Order by disk_reads desc

单纯从v$sqlarea 中无法查出每个sql消耗的内存量,但可以借助磁盘读次数间接反映可能的消耗内存较大的sql语句,然后借助执行计划(v$sql_plan)具体查看。

3.2      查看执行次数多的sql

Selectsql_text,executions,parsing_schema_name

From v$sqlarea

Order by executions desc;

3.3      查看排序多的sql

Select sql_text,sorts,parsing_schema_name

From v$sqlarea

Order by sorts desc;

 

摘自:http://www.ecdoer.com/post/oracle-highcost-sql-locate.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想查看Oracle数据库中执行过的SQL语句历史信息,可以通过以下两种方法实现: 方法一:查看V$SQL和V$SQLTEXT视图 1. 连接到Oracle数据库实例,并使用sysdba权限登录。 2. 执行以下查询语句查看V$SQL视图中的SQL语句信息: ``` SELECT * FROM V$SQL; ``` 该视图包含了所有执行过的SQL语句的信息,包括SQL语句的文本、执行次数、执行时间、执行计划等。 3. 如果需要查看SQL语句的具体内容,可以通过查询V$SQLTEXT视图实现: ``` SELECT * FROM V$SQLTEXT WHERE SQL_ID = 'your_sql_id'; ``` 其中,your_sql_id是需要查看的SQL语句的ID,可以在V$SQL视图中找到。 方法二:使用Oracle SQL Developer 1. 打开Oracle SQL Developer工具,并连接到需要查看SQL历史信息的数据库实例。 2. 在左侧的导航栏中选择“Reports” -> “Standard Reports”。 3. 在弹出的窗口中选择“SQL” -> “Top SQL”或“SQL History”,即可查看执行次数最多的SQL语句或执行历史信息。 4. 如果需要查看SQL语句的具体内容,可以在查询结果中选择需要查看的SQL语句,右键选择“View SQL”,即可查看SQL语句的具体内容。 注意:如果您需要在Oracle数据库中保存SQL执行历史信息,可以通过配置auditing功能实现。在开启此功能后,Oracle数据库会记录所有用户在数据库中执行SQL语句信息,并保存在数据库的AUD$表中。但是,请注意开启此功能可能会影响数据库性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值