获取执行计划——使用动态性能视图和AWR、Statspacks

2023-11-16

                上一篇中讲了如何使用EXPLAIN PLAN方法来获取sql执行计划,这篇继续讲另两种方法:使用动态性能视图和AWR报告。

                一、使用动态性能视图

                查询动态性能视图我们可以获取丰富的信息,包括执行计划与游标信息等等。下面罗列几个常用的v$视图。

                ① v$sql_plan

                ②v$sql_plan_statistics

                ③v$sql_workarea

                ④v$sql_plan_statistics_all

                其中v$sql_plan_statistics_all包含了其他三个视图的信息,所以常用这个视图得到的信息最多。包括执行计划信息、游标信息、运行时统计信息(比如:执行时间、产生记录数量)、sql内存使用情况等等。

                1.获取游标相关信息

                试想有一个场景,客户说他运行一个业务从提交后一直在等待状态,此时你想看下后台运行的是什么sql,可以这样:

SELECT STATUS, SQL_ID, SQL_CHILD_NUMBER
  FROM V$SESSION
 WHERE USERNAME = 'TEST';

STATUS   SQL_ID        SQL_CHILD_NUMBER
-------- ------------- ----------------
INACTIVE
INACTIVE
ACTIVE   bzn1vszukbh3a                0
INACTIVE

                由此抓出这个用户下正在运行的sql_id与sql_child_number,从而有针对性地分析相关sql语句。

                第二个场景是,如果有测试人员给你提交了一个报告,里面有一些sql_text你知道,但你想分析关于这个sql的详细信息,可以这样:

SELECT SQL_ID, CHILD_NUMBER, SQL_TEXT
  FROM V$SQL
 WHERE SQL_TEXT LIKE '%SELECT STATUS%'
   AND SQL_TEXT NOT LIKE '%v$sql%';

SQL_ID        CHILD_NUMBER SQL_TEXT
------------- ------------ ------------------------------
6d9xsg8gsjn7c            0 SELECT STATUS, SQL_ID, SQL_CHI
                           LD_NUMBER   FROM V$SESSION  WH
                           ERE USERNAME = 'TEST'

                2.获取执行计划

                比如现在已经抓取到sql_id=’ 6d9xsg8gsjn7c’的语句很慢,那么为了得到它的执行计划,可以这样:

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('6d9xsg8gsjn7c', 0));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------
SQL_ID  6d9xsg8gsjn7c, child number 0
-------------------------------------
SELECT STATUS, SQL_ID, SQL_CHILD_NUMBER   FROM V$SESSION  WHERE USERNAME
= 'TEST'

Plan hash value: 3733760267

---------------------------------------------------------------------------------
| Id  | Operation                | Name            | Rows  | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |                 |       |       |     1 (100)|
|   1 |  NESTED LOOPS            |                 |     1 |   116 |     0   (0)|
|*  2 |   FIXED TABLE FULL       | X$KSUSE         |     1 |   103 |     0   (0)|
|*  3 |   FIXED TABLE FIXED INDEX| X$KSLED (ind:2) |     1 |    13 |     0   (0)|
---------------------------------------------------------------------------------

Predicate Information (identified by operation id):

                二、使用AWR或Statspack

                相信接触过Oracle管理的人对AWR和Statspack都不陌生,前者是后者的改进,只有10g以后的版本才有。其实存储在AWR报告中的执行计划还是可以通过数据字典中的视图查询得出的,这个视图是:dba_hist_sql_plan。

                现在我从测试库中生成AWR报告,我们通过分析AWR报告中的SQLStatistics部分,可以找出一些有问题的sql语句,比如响应时间长的(SQL ordered by Elapsed Time)语句,消耗CPU高的语句(SQLordered by CPU Time)等等。抓取到有问题语句的sql_id后,就可以这样:

SELECT * FROM table(dbms_xplan.display_awr('3mxd8jarkr9g1'));

SQL_ID 3mxd8jarkr9g1
--------------------
Select * from table(dbms_workload_repository.awr_diff_report_html(      
    360794861,          1,          22799,          22800,          
360794861,          1,          23255,          23256))
 
Plan hash value: 1675984159
 
--------------------------------------------------------------------------
| Id  | Operation                         | Name                 | Cost  |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                      |    24 |
|   1 |  COLLECTION ITERATOR PICKLER FETCH| AWR_DIFF_REPORT_HTML |       |
--------------------------------------------------------------------------
 
Note
-----
   - cpu costing is off (consider enabling it)



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取执行计划——使用动态性能视图和AWR、Statspacks 的相关文章

  • count 和 groupby 在一个查询中一起使用

    以下查询正在获取页面上的一些产品信息 这很好 但我也想以文本形式显示它出现的产品编号 但是 我使用了groupby但我也想用count on pro id SELECT FROM cart WHERE session id SESSION
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • 查询从 Teradata 时间戳返回特定日期(6)

    我如何从 teradata timestamp 6 字段中搜索特定日期 例如 2013 10 22 sel from table A where date 2013 10 22 我尝试了上面的查询 该查询抛出错误 请帮忙 你可以这样尝试 s
  • 在 BEFORE INSERT 触发器中使用 IF EXISTS (SELECT ...) (Oracle)

    我的代码不起作用 Oracle 告诉我创建触发器时出现构建错误 显然我无法获得有关构建错误的更准确信息 我以前确实没有做过很多SQL 所以我对语法不太熟悉 我有一种预感 Oracle 不喜欢我的 IF EXISTS SELECT THEN
  • 展平具有未知列数的子/父数据

    我正在努力寻找存储和表示 SQL MySQL DB 和 C Windows 表单中的数据的最佳方法 我的数据映射到如下所示的类时 public class Parent public string UniqueID get set Key
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • 如何对主索引重新编号

    我有一个简单的 MySQL 表 主索引 id 不是一一编号的 1 31 35 100 等 我希望它们的编号如 1 2 3 4 请告诉我该怎么做 我还想指出的是 我知道该操作可能产生的后果 但我只是想整理一下表格 我同意其他方法也可以 但我只
  • MySQL:查询中周数的周日期范围

    我有一个看起来像这样的数据库表 id clock info 1 1262556754 some info 2 1262556230 some other info 3 1262556988 and another 4 1262555678
  • MYSQL 查询 WHERE IN 与 OR

    我开发了一个使用 OR 查询的系统 SELECT FROM tableA JOIN tableB ON idA idB WHERE idA 1 OR idA 2 OR idA 3 OR idA 4 OR idA 5 OR idA 100 与
  • 尝试通过比较不同的表从 SQL 查询输出正确的值

    我对 SQL 非常陌生 需要有关如何使用正确的查询完成此任务的帮助 我有 2 张桌子需要使用 表 TB1 有 id Name 1 bob 2 blow 3 joe 表 TB2 有 compid property 1 bob 2 blow 我
  • 为什么涉及用户变量的表达式的求值顺序未定义?

    From MySQL手册 http dev mysql com doc refman 5 7 en user variables html以下查询的输出不保证始终相同 SET a 0 SELECT a AS first a a 1 AS s
  • 如何以编程方式使用包含多列的 where-in 子句执行 PostgreSQL 查询?

    我的查询是这样的 select from plat customs complex where code t code s in 01013090 10 01029010 90 它在 psql 控制台中运行良好 我的问题是如何在客户端代码中
  • 显示包含特定表的所有数据库名称

    我的 SQL Server 中有很多数据库 我必须只搜索包含特定表名的数据库名称Heartbitmaster 我有很多数据库 例如Gotgold DVD等 我只想从包含此表的查询中查找数据库名称Heartbitmaster 我搜索我尝试查询
  • Drupal 视图 - 自定义/修改 SQL

    我遇到了 配置文件复选框 模块的问题 该模块存储以逗号分隔的自定义配置文件字段 问题是我是否创建一个视图来按值过滤 SQL 结果最终是这样的 AND profile values profile interests value in Bus
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 如何查找列中未使用的ID? [复制]

    这个问题在这里已经有答案了 可能的重复 SQL查询查找丢失的序列号 https stackoverflow com questions 1057389 sql query to find missing sequence numbers 我
  • SQL Server:触发器如何读取插入、更新、删除的值

    我在一张表中有触发器并且想阅读UserId插入 更新或删除行时的值 怎么做 下面的代码不起作用 我收到错误UPDATED ALTER TRIGGER dbo UpdateUserCreditsLeft ON dbo Order AFTER
  • 如何在sql server中对行号进行内连接

    SQL Server 2008 两张表 表A有以下数据 RowA RowB RowC RowD 表B有以下数据 Row4 Row3 Row2 Row1 我想得到以下输出 RowA Row1 RowB Row2 RowC Row3 RowD
  • 字符串文字上的 SQL Server T-SQL N 前缀[重复]

    这个问题在这里已经有答案了 这可能是一个菜鸟问题 但我发现了一些 T SQL 查询示例来验证数据库大小SELECT and WHERE clause here http technet microsoft com en us library

随机推荐

  • 小程序开发之 wx.getUserInfo获取用户信息方案介绍

    原文链接 https www cnblogs com kenshinobiy p 9118024 html 背景 小程序一个比较重要的能力就是获取用户信息 也就是使用 wx getUserInfo 接口 我们发现几乎所有的小程序都会调用这个
  • websocket有什么特点

    websocket有什么特点 答 websocket的最大特点就是 服务器可以主动向客户端推送信息 客户端也可以主动向服务器发送信息 是真正的双向平等对话 属于服务器推送技术的一种 1 建立在tcp协议之上 服务器端的实现比较容易 2 与H
  • 多线程处理

    https www runoob com python3 python3 multithreading html import requests import threading import time import xlrd import
  • 二维数组分组,一行显示5个,适合在table里面显示,php控制显示的数据

    需求 把数据平均显示到table的显示框内 如一行5个数据 效果 方法代码 一行展示N个数据 param int type 默认1 可扩展 param int num 一行显示的个数 可设置 param arrs 二维数组 static f
  • 强化学习学习

    强化学习一些基本概念 强化学习是除了监督学习和无监督学习的第三种机器学习方法 监督学习 Supervised Learning 是从外部监督者提供的带标注训练集中进行学习 任务驱动 无监督学习 Unsupervised Learning 是
  • 003 C++基础篇

    前言 大家好 本文将会向您介绍引用 定义 使用场景 引用与值分别作为返回值和参数时的性能比较 引用的权限 引用 一 引用是什么 引用 定义一个变量的别名 不是新定义一个变量 而是给已经存在的变量取了一个别名 编译器不会为引用变量单独开辟一个
  • WPF应用程序最小化到系统托盘

    using System using System Collections Generic using System ComponentModel using System Windows using System Windows Inpu
  • Unity3D跑酷游戏开发-游戏结束分数排名当前高能显示 (原创教程)

    一般游戏结束后都会有个分数排名板 接下来让分析这功能 1 游戏结束后显示高分排列 当前玩家分数高能显示 如果能进入排名板 2 数据必须持久化 切换场景 关闭开启游戏都要能用 流程 游戏结束后 调出排名板 1 取得上次的所有排名数据保存到li
  • elasticsearch查询

    环境 es1 3 eclipse jdk1 8 问题 刚开始用游标查询 再用游标获取数据 查询耗时较慢 解决办法 不使用游标查询 直接根据条件查询 es查询参考网址 https www cnblogs com chenyuanbo p 10
  • 数据库内连接、左外连接、右外连接中的on、and、where条件使用

    数据库各种连接方式的on and where条件使用 文章目录 前言 使用on条件 A为主表 使用on条件 B为主表 使用on and主表条件 使用on where主表条件 使用on and条件 a type lt gt 1 使用on wh
  • GOME-2 SIF 数据链接

    目录 一 xiao Jinfeng 文章GOME 2 SIF 数据链接 网站 说明 引用 网页预览 一 xiao Jinfeng 文章GOME 2 SIF 数据链接 网站 https acd ext gsfc nasa gov People
  • 支持向量机算法(SVM)详细讲解(含手推公式)(《机器学习》--周志华)

    前言 本人是一个本科到研究生都坚持本专业的人 但是 本科时间被狗吃了 目前还是小白一只 曾经以为考研之后要继续学习一技之长找个工作养活自己 当然 现在发现这都是自己想太多了 哈哈哈 读研之后才知道基础不好的人学习起来是多么困难 但是 既然选
  • 深度学习实战:使用 PyTorch 和序列到序列(Seq2Seq)模型进行机器翻译

    机器翻译是自然语言处理中的一个重要任务 它涉及将一种语言的文本转换为另一种语言的文本 序列到序列 Seq2Seq 模型是一种强大的深度学习模型 用于处理机器翻译任务 在本篇博客中 我们将使用 PyTorch 和 Seq2Seq 模型进行机器
  • 我00后,会Python,月薪5000,兼职1.5w

    当代年轻人的终极烦恼 没钱 主业收入不高但处处都要花钱 特别是今年以来 很多人会在后台问我 做些什么副业好 兼职写文 不知道上哪儿找单 自己也不一定写得好 做wei商 被朋友屏蔽 没有客源也出不了单 摆地摊 东西卖不出去反而倒贴了一笔钱 淘
  • vue中实现点击展开和收起功能(具有动画效果)

    vue中实现点击展开和收起功能 具有动画效果 html div class marketplace aside b div class marketplace aside show that item text div div
  • 一个好玩的小游戏——麻神之战

    题目 一种新的麻将 只留下一种花色 并且除去了一些特殊和牌方式 例如七对子等 规则如下 共有36张牌 每张牌是1 9 每个数字4张牌 你手里有其中的14张牌 如果这14张牌满足如下条件 即算作和牌 14张牌中有2张相同数字的牌 称为雀头 除
  • Java 同步JSON字符串至ES(Elasticsearch) 添加时间戳(@timestamp)、版本(@version) 字段

    解决方法 仿照logstash同步原理 对于同步json字符串 首先将其解析 然后添加时间戳和版本字段 或其他字段 打入es public void insertEs String jsonStr JSONObject jsonObject
  • 95-36-210-ChannelHandler-系统Channel-TimeoutHandler

    文章目录 1 概述 2 继承体系 3 IdleStateHandler 3 1 典型构造方法 3 2 初始化方法 initialize 3 3 销毁方法destroy 3 4 核心的调度任务 ReaderIdleTimeoutTask 1
  • QT的补充知识

    一 文件 QFile QT提供了QFile类用于对文件进行读写操作 也提供了其他的两个类 文本流 QTextSream 和数据流 QDataStream 文本流 QTextSream 用于对文本数据的处理 并且是以字为单位进行读 写 数据流
  • 获取执行计划——使用动态性能视图和AWR、Statspacks

    上一篇中讲了如何使用EXPLAIN PLAN方法来获取sql执行计划 这篇继续讲另两种方法 使用动态性能视图和AWR报告 一 使用动态性能视图 查询动态性能视图我们可以获取丰富的信息 包括执行计划与游标信息等等 下面罗列几个常用的v 视图