专栏首页Nicky's blogOracle sql共享池$sqlarea分析SQL资源使用情况

Oracle sql共享池$sqlarea分析SQL资源使用情况

遇到需要排查一个系统使用sql的情况,可以通过查询Oracle的$sql$ssssion$sqlarea进行统计排查

排查时可以先看一下$sql$session的基本信息

 select *
   from v$sql a, v$session b
  where b.SQL_ADDRESS = a.ADDRESS
    and b.SQL_HASH_VALUE = a.HASH_VALUE
    and b.SQL_CHILD_NUMBER = a.CHILD_NUMBER

$sqlarea表列意思: 引用:https://blog.csdn.net/study4034/article/details/51331120

SQL_TEXT //当前正在执行的游标的sql文本的前1000个字符 SQL_FULLTEXT //CLOB类型 整个sql文本,不用借助于V$SQL_TEXT视图来查看整个文本 SQL_ID //库缓存中的SQL父游标的标志 SHARABLE_MEM //子游标使用的共享内存的大小,bytes PERSISTENT_MEM //子游标生存时间中使用的固定内存的总量,bytes RUNTIME_MEM //在子游标执行过程中需要的固定内存大小,bytes SORTS //子游标发生的排序数量 LOADED_VERSIONS // 显示上下文堆是否载入,1是,0否 USERS_OPENING // 执行这个sql的用户数 FETCHES // sql取数据的次数 EXECUTIONS //自从被载入共享池后,sql执行的次数 FIRST_LOAD_TIME // 父游标产生的时间戳 PARSE_CALLS //解析调用的次数 DISK_CALLS //读磁盘的次数 DIRECT_WRITES //直接写的次数 BUFFER_GETS //直接从buffer中得到数据的次数 APPLICATION_WAIT_TIME // 应用等待时间,毫秒 CONCURRENCY_WAIT_TIME //并发等待时间,毫秒 USER_IO_WAIT_TIME //用户IO等待时间 ROWS_PROCESSED SQL //解析sql返回的总行数 OPTIMIZER_MODE //优化器模式 OPTIMIZER_COST //优化器对于sql给出的成本 PARSING_USER_ID //第一个创建这个子游标的用户id HASH_VALUES //解析产生的哈希值 CHILD_NUMBER //该子游标的数量 SERVICE //服务名 CPU_TIME //该子游标解析,执行和获取数据使用的CPU时间,毫秒 ELAPSED_TIME //sql的执行时间,毫秒 INVALIDATIONS //该子游标的无效次数 MODULE //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的模块名 ACTION //第一次解析该语句时,通过DBMS_APPLICAITON_INFO.SET_ACTION设置的动作名 IS_OBSOLETE //标记该子游标过期与否,当子游标过大时会发生这种情况 is_bind_sensitive //不仅指出是否使用绑定变量窥测来生成执行计划,而且指出这个执行计划是否依赖于窥测到的值。如果是,这个字段会被设置为Y,否则会被设置为N。 is_bind_aware //表明游标是否使用了扩展的游标共享。如果是,这个字段会被设置为Y,如果不是,这个字段会被设置为N。如果是设置为N,这个游标将被废弃,不再可用。 is_shareable //表明游标能否被共享。如果可以,这个字段会被设置为Y,否则,会被设置为N。如果被设置为N,这个游标将被废弃,不再可用。

去Oracle的sql共享池$sqlarea查询sql的执行次数,分析SQL执行性能

EXECUTIONS :所有子游标执行SQL的次数 DISK_READS:所有子游标执行SQL需要读的硬盘次数 BUFFER_GETS :所有子游标执行SQL需要读的内存次数 ELAPSED_TIME:所有子游标执行SQL需要的时间

分析SQL执行性能

SELECT SQL_TEXT,
       SQL_FULLTEXT,
       ELAPSED_TIME,
       DISK_READS,
       BUFFER_GETS,
       EXECUTIONS,
       Round(ELAPSED_TIME / EXECUTIONS ,2),
       ROUND(DISK_READS / EXECUTIONS, 2),
       ROUND(BUFFER_GETS / EXECUTIONS , 2),
       ROUND((BUFFER_GETS - DISK_READS) / BUFFER_GETS, 2) 
  FROM V$SQLAREA 
 WHERE EXECUTIONS > 0
   AND BUFFER_GETS > 0
   AND (BUFFER_GETS - DISK_READS) / BUFFER_GETS < 0.8
   ORDER BY Round(ELAPSED_TIME / EXECUTIONS ,2) desc;

然后解释一下这些意义: Round(ELAPSED_TIME / EXECUTIONS ,2):求每个游标执行SQL需要的时间

ROUND(DISK_READS / EXECUTIONS, 2):求每个游标执行SQL需要读磁盘的次数

ROUND(BUFFER_GETS / EXECUTIONS , 2):求每个游标执行SQL需要读内存的次数

ROUND((BUFFER_GETS - DISK_READS) / BUFFER_GETS, 2) :SQL命中率

所有归纳一下,就是去$sqlarea共享池查询统计,然后分析sql,上述数据越低就说明SQL执行速度越高,性能越好

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle SQL调优系列之SQL Monitor Report

    sql monitor是oracle官方提供的自动监控符合特定条件的SQL,用于收集执行时的细节信息的监控工具,常用于sql调优和系统性能监控

    SmileNicky
  • 传参导出Excel表乱码问题解决方法

    先描述一下业务场景,要实现的功能是通过搜索框填写参数,然后点击按钮搜索数据,将搜索框的查询参数获取,附加在链接后面,调导Excel表接口,然后实现导出Excel...

    SmileNicky
  • oracle like模糊查询不能走索引?

    这里要纠正一个网上很多教程说的模糊匹配不能走索引的说法,因为在看《收获,不止SQL优化》一书,里面举例说到了,并且自己也跟着例子实践了一下,确实like一些...

    SmileNicky
  • BankInfo Security发布金融信息安全界Top 10 影响力排行榜

    BankInfo Security发布了其第四年度银行业信息安全影响力排行榜,他们在塑造银行业与信息安全相连的方式上取得了突出成绩和贡献。 2016年的榜单中的...

    FB客服
  • 机器人的伺服执行机构原理图

    将脉冲电信号转换为角位移或直线位移的一种D/A转换装置。接收一个电脉冲,步进电动机就带动机器人的关节轴转过一个相应的角度。步进电动机转过的角度与接收的脉冲数成正...

    机器人网
  • 字符串和列表之间的转换

    在Tcl中所有数据类型都可以看作是字符串。字符串本身是由一个或多个字符组成;列表可以看作是由一个或多个相对独立的字符串构成,因此,两者之间在一定条件下是可以转换...

    Lauren的FPGA
  • Python - 列表与字典相互转换

    py3study
  • 腾讯云TDSQL荣获年度优秀金融科技奖,领航国产数据库发展

    2019中国国际金融展“金鼎奖”评选结果日前揭晓,腾讯云TDSQL凭借创新的技术突破与在金融核心场景下的成功应用实践,荣获“金鼎奖——年度优秀金融科技解决方案...

    腾讯云数据库 TencentDB
  • startActivity的requires new task异常解析 博客分类: Android小技巧 Android工作

    Caused by: android.util.AndroidRuntimeException: Calling startActivity() from ou...

    chroya
  • 今天,Amazon消费业务彻底弃用了Oracle数据库

    今天,AWS首席布道者Jeff Barr在其博客上透露,Amazon消费者业务正式完成了对Oracle数据库的迁移工作,关闭了最后的Oracle数据库。Amaz...

    大数据在线

扫码关注云+社区

领取腾讯云代金券