遇到需要排查一个系统使用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执行速度越高,性能越好

Oracle sql共享池$sqlarea分析SQL资源使用情况的更多相关文章

  1. Oracle 从共享池删除指定SQL的执行计划

    ORACLE从共享池删除指定SQL的执行计划 2016-12-29 11:14 by 潇湘隐者, 2836 阅读, 0 评论, 收藏, 编辑 Oracle 11g在DBMS_SHARED_POOL包中 ...

  2. oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量

    -如何确定系统中是否存在绑定变量的情况:首先创建一个表,用于存放整理过得数据:create table t1 as select sql_text from v$sqlarea;----V$SQLAR ...

  3. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

  4. 使用explain来分析SQL语句实现优化SQL语句

    用法:explain sql 作用:用于分析sql语句 mysql> explain select * from quser_1 where loginemail = "quctest ...

  5. 使用Oracle执行计划分析SQL性能

    执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的 ...

  6. oracle 入门笔记--v$sql和v$sqlarea视图(转载)

    转载于作者:dbtan 原文链接:http://www.dbtan.com/2009/12/vsql-and-vsqlarea-view.html v$sql和v$sqlarea视图: 上文提到,v$ ...

  7. oracle用EXPLAIN PLAN 分析SQL语句

    EXPLAIN PLAN 是一个很好的分析SQL语句的工具,它甚至可以在不执行SQL的情况下分析语句. 通过分析,我们就可以知道ORACLE是怎么样连接表,使用什么方式扫描表(索引扫描或全表扫描)以及 ...

  8. 【转】查询oracle比较慢的session和sql

    -查询最慢的sql select * from ( select parsing_user_id,executions,sorts command_type,disk_reads,sql_text f ...

  9. [转]SQL语句优化技术分析

    一.操作符优化 1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用 ...

随机推荐

  1. java 实现udp通讯

    需求:应用A(通常有多个)和应用B(1个)进行 socket通讯,应用A必须知道应用B的ip地址(在应用A的配置文件中写死的),这个时候就必须把应用B的ip设成固定ip(但是某些时候如更换路由后要重新 ...

  2. Linux服务器上监控网络带宽的18个常用命令 zz

    Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...

  3. APP支付(.NET版)

    ---恢复内容开始--- APP支付(.NET版) 一.   支付宝支付 1. 有一个支付账号,在蚂蚁金服开放平台中登录账号→选择“管理中心”→在“开发者中心”下选择“网页&移动应用”→然后按 ...

  4. git 提交代码操作

    1.修改1分支后 git add git commint2.切换到本地分支git checkout local-5.0git remote update 更新远程仓库3.git pull origin ...

  5. sha1 算法源码

    原来指望sha1 这种烂大街的算法 不会出什么幺蛾子 结果<linux C编程实战Code>bt章节的sha1 代码 我在linux和windows下的结果不一样 然后用了哈希工具查看了下 ...

  6. MySQL数据库和表名大小写敏感开关的打开办法

    背景:window 10系统安装了MySQL57,使用可视化操作工具Navicat Premium 12进行相关操作,一切比较顺利.但在建立数据库和表时,发现大小写命名不敏感.区分大小写输入,保存后默 ...

  7. centos 7.3 安装配置python3.6.1

    1.先安装一些我遇到的依赖问题(如果有依赖问题按提示安装): yum install xz gcc zlib zlib-devel 2.官网下载源码包 地址:https://www.python.or ...

  8. sessionStorage和localStorage的使用方法

    1.sessionStorage sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空 JSON.pars ...

  9. 制作DNS字典

    1.收集字典 一般kali自带的DNS爆破工具都会有自己的字典,使用  dpkg -L dns爆破软件名 查询字典的路径.txt文件一般是字典. 合并到一个txt文件中. 2.删除字典中重复的字符串 ...

  10. Codeforces 1120 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 传送门 A题 传送门 题意简述:给你一个mmm个数的数列,现在规定把一个数列的1,2,...,k1,2,...,k1,2,...,k分成第一组,把k+1, ...