oracle 12c查看执行过的sql及当前正在执行的sql

news2024/11/25 10:47:59

V$SQL 提供了已经执行过及正在执行的SQL语句的信息。

一 查看共享池中所有sql的统计信息

#统计共享池中某类sql执行次数,总体执行时长,平均执行时长等信息,并按总体执行时长降序排序

SELECT INST_ID,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS,CPU_TIME,ROUND(ELAPSED_TIME/1000,2) as TOTAL_ELAPSED_TIME_S,
CASE  WHEN EXECUTIONS = 0 THEN ROUND(ELAPSED_TIME/1000/1,2) ELSE  ROUND(ELAPSED_TIME/1000/EXECUTIONS,2) END AS AVG_ELAPSED_TIME_S,
FIRST_LOAD_TIME,LAST_LOAD_TIME,LAST_ACTIVE_TIME,DISK_READS,DIRECT_WRITES,DIRECT_READS,BUFFER_GETS,PARSING_USER_ID,PARSING_SCHEMA_NAME,ADDRESS,HASH_VALUE,PLAN_HASH_VALUE,MODULE,ACTION
FROM GV$SQL 
WHERE  SQL_TEXT  NOT  LIKE '%SELECT COMMAND_TYPE,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS%'
 AND PARSING_SCHEMA_NAME NOT LIKE '%SYS%' 
 AND PARSING_SCHEMA_NAME NOT IN ('DBSNMP')
ORDER BY TOTAL_ELAPSED_TIME_S DESC;

查询结果示例:

35cae1cae3384d889cd09004ae8101fe.png

/*

备注:

1.在oracle 12c里,ELAPSED_TIME单位是毫秒,在11g里ELAPSED_TIME单位是微秒。

2.PARSING_SCHEMA_NAME显示的是哪个用户执行的该sql,而不是这个sql操作的表属于哪个schema。比如如果是SYS执行的select count(*) from scott.t3,则PARSING_SCHEMA_NAME结果为SYS,而不是SCOTT。

3.假如用N个不同用户执行了相同sql,则该sql会生成N条记录,一个用户对应一条sql记录。

4.如果一个sql被阻塞了,它的EXECUTIONS为0,ELAPSED_TIME会一直在增长。EXECUTIONS为0时,计算sql平均执行时长这个除法运算时就会报错,所以这里做了个判断,当EXECUTIONS为0时,将EXECUTIONS设为1,再计算。

5.LAST_LOAD_TIME,LAST_ACTIVE_TIME区别:

LAST_LOAD_TIME 执行计划最近一次载入被library cache库缓存的时间。

LAST_ACTIVE_TIME SQL sql最近一次执行的时间。

当执行新的SQL语句时,如果这条SQL语句不在共享池中,数据库会进行硬解析,并将解析后的执行计划加载到共享池中。此时,LAST_LOAD_TIME会被更新为当前时间。如果执行的是共享池内已经存在的SQL语句,则只会进行软解析,LAST_LOAD_TIME的值不会改变。

LAST_LOAD_TIME在SQL语句首次硬解析时被设置,之后除非SQL语句被重新硬解析(如由于SQL文本改变或共享池空间不足导致被逐出后重新加载),否则其值不会改变。而LAST_ACTIVE_TIME则会在每次SQL语句执行时被更新。

*/

二 查看某个时间段内执行了哪些慢sql

假如同事让排查某个接口都有哪些慢sql,可以使用这个方法(先调用下这个慢接口,然后统计下这个时间段内的慢sql),只是会导出非这个接口的多余慢sql,再结合业务进行筛选吧。

接口慢也可以看看是否发生了阻塞,详细参考:

oracle排查长时间没提交的事务造成的阻塞案例-CSDN博客。

#在“一 查看所有sql的统计信息”基础上新增一个时间范围及执行时长超过1秒的条件,示例:

SELECT  *
FROM 
(
  SELECT INST_ID,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS,CPU_TIME,ROUND(ELAPSED_TIME/1000,2) as TOTAL_ELAPSED_TIME_S,
  CASE  WHEN EXECUTIONS = 0 THEN ROUND(ELAPSED_TIME/1000/1,2) ELSE  ROUND(ELAPSED_TIME/1000/EXECUTIONS,2) END AS AVG_ELAPSED_TIME_S,  FIRST_LOAD_TIME,LAST_LOAD_TIME,LAST_ACTIVE_TIME,DISK_READS,DIRECT_WRITES,DIRECT_READS,BUFFER_GETS,PARSING_USER_ID,PARSING_SCHEMA_NAME,ADDRESS,HASH_VALUE,PLAN_HASH_VALUE,MODULE,ACTION
  FROM GV$SQL 
  WHERE  SQL_TEXT  NOT  LIKE '%SELECT COMMAND_TYPE,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS%'
  AND LAST_ACTIVE_TIME BETWEEN TO_DATE('2024/11/24 09:00:00','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2024/11/24 15:00:00','YYYY-MM-DD HH24:MI:SS')
) c
WHERE AVG_ELAPSED_TIME_S > 1
 AND PARSING_SCHEMA_NAME NOT LIKE '%SYS%' 
 AND PARSING_SCHEMA_NAME NOT IN ('DBSNMP')
ORDER BY AVG_ELAPSED_TIME_S DESC

--假如一个sql被阻塞了,那LAST_ACTIVE_TIME会一直更新,比较接近当前时间,那么如果限定了 LAST_ACTIVE_TIME为一个历史时间段,该可能会查不到这条被阻塞的sql,要想查到这个阻塞sql,就把BETWEEN AND 改成 > 某个历史时间段,不限制最大时间,示例:

  AND LAST_ACTIVE_TIME > TO_DATE('2024/11/24 09:00:00','YYYY-MM-DD HH24:MI:SS') 

三 查看当前正在执行的sql的统计信息

在“一 查看所有sql的统计信息”的sql基础上和gv$session进行关联:

SELECT b.USERNAME,a.INST_ID,b.SQL_ID,b.SID,b.SERIAL#,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS,CPU_TIME,ROUND(ELAPSED_TIME/1000,2) as TOTAL_ELAPSED_TIME_S,
CASE  WHEN EXECUTIONS = 0 THEN ROUND(ELAPSED_TIME/1000/1,2) ELSE  ROUND(ELAPSED_TIME/1000/EXECUTIONS,2) END AS AVG_ELAPSED_TIME_S,
FIRST_LOAD_TIME,LAST_LOAD_TIME,SQL_EXEC_START,LAST_ACTIVE_TIME,DISK_READS,DIRECT_WRITES,DIRECT_READS,BUFFER_GETS,PARSING_USER_ID,PARSING_SCHEMA_NAME,ADDRESS,HASH_VALUE,PLAN_HASH_VALUE,
b.MACHINE,b.MODULE,b.PROGRAM,b.SERVER,a.ACTION,b.EVENT,'alter system kill session ''' || b.sid || ',' || b.serial# ||''';' AS KILL_SQL
FROM GV$SQL  a
INNER JOIN GV$SESSION b ON b.sql_hash_value = a.hash_value
WHERE   SQL_TEXT NOT  LIKE '%SELECT COMMAND_TYPE,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS%'
AND b.username is not null
AND b.username not in('SYSMAN')
ORDER BY TOTAL_ELAPSED_TIME_S DESC;

如果一个sql被阻塞了,它的EXECUTIONS为0,ELAPSED_TIME会一直在增长,LAST_ACTIVE_TIME会比较接近当前时间,而非该sql最近一次开始执行的时间,SQL_EXEC_START代表该sql最近一次开始执行的时间,示例:

1ce6d0c95651474c87dedbf8f2ce9cb0.png

四 查看当前正在执行的某类慢sql的统计信息

#查询当前平均执行时长超过1秒的慢sql

在上面sql的基础上加个平均执行时长的条件:

SELECT * 

FROM 

(SELECT b.USERNAME,a.INST_ID,b.SQL_ID,b.SID,b.SERIAL#,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS,CPU_TIME,ROUND(ELAPSED_TIME/1000,2) as TOTAL_ELAPSED_TIME_S,

CASE  WHEN EXECUTIONS = 0 THEN ROUND(ELAPSED_TIME/1000/1,2) ELSE  ROUND(ELAPSED_TIME/1000/EXECUTIONS,2) END AS AVG_ELAPSED_TIME_S,

FIRST_LOAD_TIME,LAST_LOAD_TIME,SQL_EXEC_START,LAST_ACTIVE_TIME,DISK_READS,DIRECT_WRITES,DIRECT_READS,BUFFER_GETS,PARSING_USER_ID,PARSING_SCHEMA_NAME,ADDRESS,HASH_VALUE,PLAN_HASH_VALUE,

b.MACHINE,b.MODULE,b.PROGRAM,b.SERVER,a.ACTION,b.EVENT,'alter system kill session ''' || b.sid || ',' || b.serial# ||''';' AS KILL_SQL

FROM GV$SQL  a

INNER JOIN GV$SESSION b ON b.sql_hash_value = a.hash_value

WHERE   SQL_TEXT NOT  LIKE '%SELECT COMMAND_TYPE,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTIONS%'

AND b.username is not null

AND b.username not in('SYSMAN')

) c

WHERE c.AVG_ELAPSED_TIME_S > 1

ORDER BY c.AVG_ELAPSED_TIME_S DESC;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解锁PPTist的全新体验:Windows系统环境下本地部署与远程访问

文章目录 前言1. 本地安装PPTist2. PPTist 使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 在Windows系统环境中,如何本地部署开源在线演示文稿应用PPTist,并实现远程访问?本文将为您提供详细的部署和配置指南。 P…

C语言中的指针和字符串的赋值

前言&#xff1a;温习下以前学过的C语言知识&#xff0c;温故而知新。 实例说明 本文用一段实例代码阐述指针和字符串的联系。 #include <iostream> #include <cstring> int main() {using namespace std;char animal[20] "bear";const char * bird …

Linux高阶——1117—TCP客户端服务端

目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…

物体网格弹性变形---Unity中实现

在游戏引擎场景中的3D物体是由一定数量的点、面组成的&#xff0c;如下图&#xff1a; 要使这些物体变形就是改变3D物体每个顶点状态。 1.首先在Unity场景中增加一个球体&#xff0c;如下图 3D组件默认拥有MeshFilter、meshRenderer、Collider组件&#xff0c;分别用来获取Mes…

【ArcGISPro】根据yaml构建原始Pro的conda环境

使用场景 我们不小心把原始arcgispro-py3的conda环境破坏了,我们就可以使用以下方法进行修复 查找文件 在arcgis目录下找到yaml文件 如果没找到请复制以下内容到新的yaml文件 channels: - esri - defaults dependencies: - anyio=4.2.0=py311haa95532_0 - appdirs=1.4.4=p…

【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)

网垃圾分类网站的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着全球环境保护意识的提升&#xff0c;垃圾分类已成为一项紧迫且重要的任务。为了有效推动垃圾分类的实施&#xff0c;提升公众的环保意识和参与度&#xff0c;垃圾分类已…

【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 &#x1fab2;前言 在这篇博客中&#xff0c;我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求&#xff0c;…

C++ 优先算法 —— 长度最小的子数组(滑动窗口)

目录 题目&#xff1a;长度最小的子数组 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 滑动窗口正确性 3. 代码实现 Ⅰ. 暴力枚举(会超时&#xff09; Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 题目&#xff1a;长…

C++设计模式——Singleton单例模式

一、单例模式的定义 单例模式&#xff0c;英文全称Singleton Pattern&#xff0c;是一种创建型设计模式&#xff0c;它保证一个类在程序中仅有一个实例&#xff0c;并对外提供一个访问的该类实例的全局接口。 单例模式通常用于需要控制对象资源的开发场景&#xff0c;一个类…

【Linux系统】—— 基本指令(三)

【Linux系统】—— 基本指令&#xff08;三&#xff09; 1 一切皆文件2 重定向操作2.1 初始重定向2.2 重定向的妙用2.3 追加重定向2.4 输入重定向2.5 一切皆文件与重定向结合 3 Linux 中的文件类型4 日志5 「more」命令6 「less」命令7 「head」与「tail」7.1 查看文件开头和结…

探索 Python 任务自动化的新境界:Invoke 库揭秘

文章目录 探索 Python 任务自动化的新境界&#xff1a;Invoke 库揭秘背景&#xff1a;为何选择 Invoke&#xff1f;什么是 Invoke&#xff1f;如何安装 Invoke&#xff1f;5个简单的库函数使用方法1. 定义任务2. 带参数的任务3. 运行 Shell 命令4. 任务参数化5. 列出任务 场景应…

【C++】list模拟实现(详解)

本篇来详细说一下list的模拟实现&#xff0c;list的大体框架实现会比较简单&#xff0c;难的是list的iterator的实现。我们模拟实现的是带哨兵位头结点的list。 1.准备工作 为了不和C库里面的list冲突&#xff0c;我们在实现的时候用命名空间隔开。 //list.h #pragma once #…

shell脚本(6)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;shell(6)if条件判断与for循环结构_哔哩哔哩_bilibili 本文主要讲解shell脚本中的if条件判断和for循环结构。 一、if语句 Shell 脚本中的 if 语句…

JavaScript基础 document.write()方法

JavaScript基础 document.write方法 1.简单认识document.write()2.document.write() 的使用 1.简单认识document.write() document.write() 是一种 JavaScript 方法&#xff0c;用于将内容直接写入到 HTML 文档中。它可以用来动态地在页面加载时插入文本、HTML 代码、图片等内…

Linux笔记---进程:进程切换与O(1)调度算法

1. 补充概念 1.1 并行与并发 竞争性&#xff1a;系统进程数目众多&#xff0c;而CPU资源只有少量&#xff0c;甚至只有1个&#xff0c;所以进程之间是具有竞争属性的。为了高效完成任务&#xff0c;更合理竞争相关资源&#xff0c;便具有了优先级。独立性&#xff1a;多进程运…

使用ENSP实现浮动静态路由

一、项目拓扑 二、项目实现 1.路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为1.1.1.1/24 ip address 1.1.1.1 24进入g0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置为2.…

GoF设计模式——结构型设计模式分析与应用

文章目录 UML图的结构主要表现为&#xff1a;继承&#xff08;抽象&#xff09;、关联 、组合或聚合 的三种关系。1. 继承&#xff08;抽象&#xff0c;泛化关系&#xff09;2. 关联3. 组合/聚合各种可能的配合&#xff1a;1. 关联后抽象2. 关联的集合3. 组合接口4. 递归聚合接…

【论文复现】深度知识追踪

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 深度知识追踪 1. 论文概述2. 论文方法3. 实验部分3.1 数据集3.2 实验步骤3.3 实验结果 4 关键代码 1. 论文概述 知识追踪的任务是对学生的知…

Linux: 进程地址空间(理解虚拟地址和页表)

目录 1. 虚拟地址 2. 进程地址空间分布 3. 描述进程地址空间 4. 内存管理——页表 5. 父子进程的虚拟地址关系 6. 页表标记位 6.1 读写权限 6.2 命中权限 7.为什么存在进程地址空间 1. 虚拟地址 #include <stdio.h> #include <unistd.h> #include <sy…

C语言:深入理解指针

一.内存和地址 我们知道计算机上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数据也会放回内存中&#xff0c;那我们买电脑的时候&#xff0c;电脑上内存是 8GB/16GB/32GB 等&#xff0c;那这些内存空间…