Oracle跟踪及分析方法

1、SQL_TRACE

通过设置 SQL_TRACE 可以启用或禁用 SQL 跟踪工具,设置 SQL_TRACE 为 true 可以收集信息用于性能优化或问题诊断;

特别注意:

全局启用 SQL 跟踪可能会对性能产生严重影响 可以使用 ALTER SESSION 跟踪特定会话。

Oracle 已 经 不 在 推 荐 使 用 SQL_TRACE 参 数 。 建 议 改 用DBMS_MONITOR 和DBMS_SESSION 软件包, 保留 SQL_TRACE 仅用于向后兼容。

在当前 session 级别启用和停止 SQL_TRACE 方式如下:

alter session set SQL_TRACE=true;

执行相关语句

alter session set SQL_TRACE=false;

select value from v$diag_info where name = ‘Default Trace File’;

特定用户开启 SQL_TRACE 跟踪如下:

通过调用 DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION 包实现

查询 v$session 视图获取进程信息

select sid,serial#,username from v$session where username is not null;

SID SERIAL# USERNAME

---------- ---------- ------------------------------

97 2217 SYS

然后对相应的会话启动 SQL_TRACE 跟踪

exec dbms_system.set_sql_trace_in_session(97,2217,true);

应用执行一段时间后,关闭 SQL_TRACE

exec dbms_system.set_sql_trace_in_session(97,2217,false)

查询系统对应 session trace 文件select value from v$diag_info where name = ‘Default Trace File’;

SQL_TRACE 还能对特定 SQL 启用跟踪:

alter system set events ‘sql_trace [sql:5qcyrymp65fak] bind=true,wait=true’;

alter system set events ‘sql_trace [sql:5qcyrymp65fak] off’;

对输出内容使用 tkprof 进行格式化

2、10046 trace

10046 事件 Oracle 提供的内部跟踪事件,是对 SQL_TRACE 的增强,通过10046 可以知道 Oracle 内部执行的 SQL_TRACE 的跟踪操作。

10046事件是SQL_TRACE的扩展,有效的跟踪级别有:

level 0:SQL_TRACE=FASLE

level 1:跟踪sql语句,包括解析、执行、提取、提交和回滚等。

level 4:1级+绑定变量

level 8:4级+等待事件

level 12:4级+8级

其中,level 1相当于打开了sql_trace

从 11G 开始新增了以下两个级别跟踪:

16 - 为每次 SQL 执行生成 stat 信息输出[plan_stat = all_executions]

32 - 比 level 1 少执行计划,不转储执执行统计信息[plan_stat = adaptive]

通过 session 级别跟踪:

alter session set events=‘10046 trace name context forever,level 12’;

alter session set events=‘10046 trace name context off’;

oradebug setmypid

oradebug EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12

oradebug TRACEFILE_NAME

……

oradebug EVENT 10046 trace name context off

开启会话 SQL 跟踪

alter session set events ‘SQL_trace wait=true’;

alter session set events ‘SQL_trace off’;

对特定 session 启用跟踪:

通过调用 DBMS_SYSTEM. SET_EV 包实现

查询 v$session 视图获取进程信息

SQL> select sid,serial#,username from v$session where username is not null;

SID SERIAL# USERNAME

---------- ---------- ------------------------------

30 19678 SYS

执行跟踪

exec dbms_system.SET_EV(30,37754,10046,12,‘’);

结束跟踪

exec dbms_system.SET_EV(30,37754,10046,0,‘’);

查询系统对应 session trace 文件

select value from v$diag_info where name = ‘Default Trace File’;

10046跟踪结果,使用tkprof来格式化

$ tkprof /u01/oracle/diag/rdbms/neal/neal/trace/neal_ora_18691.trc /tmp/10046.trc

3、10053 trace

当一个 SQL 出现性能问题时,可以使用 SQL_TRACE 或者 10046 事件来跟踪 SQL,通过生成的 trace 来了解 SQL 的执行过程。 我们在查看一条 SQL 的执行计划的时候,只能看到 CBO 最终告诉我们的执行计划结果,但是不知道 CBO 是根据什么来做的。 如果遇到了执行计划异常,可以借助 Oracle 10053 事件进行跟踪。10053 事件是 oracle 提供的用于跟踪 sql 语句成本计算的内部事件,它能记载 CBO 模式下 oracle 优化器如何计算 sql 成本,生成相应的执行计划。

注意:10053 只对 CBO 有效,而且如果一个 sql 语句已经解析过,就不会产生新的 trace信息

10053事件存在两个级别:

Level 2:2级是1级的一个子集,它包含以下内容:

Column statistics

Single Access Paths

Join Costs

Table Joins Considered

Join Methods Considered (NL/MS/HA)

Level 1: 1级比2级更详细,它包含2级的所有内容,在加如下内容:

Parameters used by the optimizer

Index statistics

通过 session 级别跟踪:

ALTER SESSION SET EVENTS=‘10053 trace name context forever, level 1’;

ALTER SESSION SET EVENTS=‘10053 trace name context forever, level 2’;

执行相关 sql

ALTER SESSION SET EVENTS ‘10053 trace name context off’;

对特定 session 启用跟踪:

通过调用 DBMS_SYSTEM. SET_EV 包实现

查询 v$session 视图获取进程信息

SQL> select sid,serial#,username from v$session where username is not null;

SID SERIAL# USERNAME

---------- ---------- ------------------------------

125 25 SYS

执行跟踪

exec dbms_system.SET_EV(125,25,10053,1,‘’);

结束跟踪

exec dbms_system.SET_EV(125,25,10053,0,‘’);

查询系统对应 session trace 文件

select value from v$diag_info where name = ‘Default Trace File’;

4、HANGANALYZE

单机

sqlplus / as sysdba

SQL> oradebug setmypid

SQL> oradebug unlimit

SQL> oradebug hanganalyze 3

wait 120 seconds…

SQL> oradebug hanganalyze 3

SQL> oradebug tracefile_name

SQL> exit

rac:

sqlplus / as sysdba

SQL> oradebug setmypid

SQL> oradebug unlimit

SQL> oradebug -g all hanganalyze 3

wait 120 seconds…

SQL> oradebug -g all hanganalyze 3

SQL> oradebug tracefile_name

SQL> exit

当数据库 hang 住了,无法正常登录数据库时,我们可以使用 prelim 参数

sqlplus -prelim /nolog

connect / as sysdba

oradebug setmypid

oradebug unlimit

oradebug hanganalyze 3

oradebug dump systemstate 266

oradebug tracefile_name

需要注意:

1)如果sqlplus / as sysdba无法正常登录,通过sqlplus -prelim / as sysdba进行登录

2)在11.2 以上版本,不能使用-prelim 搜集HangAnalysis 信息,会报错。

结果分析:

State of ALL nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/[adjlist]):
[134]/1/135/1/0xf27dd190/21691/SINGLE_NODE/
[198]/1/199/895/0xf2894610/6802/LEAF/ ====>堵塞者
[388]/2/141/209/0xf27cac50/8132/SINGLE_NODE/
[445]/2/198/1741/0xf28976f0/10653/NLEAF/[198] =====》被堵塞者

5、sql_monitor跟踪

sql中加hit方式:

select /*+ MONITOR / from doc_detail where id=1;

event中对指定的sql_id加monitor

ALTER SYSTEM SET EVENTS ‘sql_monitor [sql: ava3w33nz6jt5] force=true’;

获取sql_monitor

CPU或IO执行超过5秒的sql会自动加入sql monitor或者使用hint /+ monitor/

查询是否已经记录到monitor监控表中

select sql_id,sql_text from v$sql_monitor where sql_text=‘select * from doc_detail where id=1’;

客户端输出html文件

SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(

sql_id => ‘ava3w33nz6jt5’,

report_level => ‘ALL’,

TYPE => ‘active’)

FROM DUAL;

或者后台sqlplus / as sysdba输出:

set echo off

set linesize 10000 pages 6000

set long 20000000

set longchunksize 20000000

set trimout on trims on term off head off

spool 5tkanxszj5a12.html

select

DBMS_SQLTUNE.REPORT_SQL_MONITOR(

sql_id=>‘5tkanxszj5a12’, report_level=>‘ALL’,type=>‘ACTIVE’) as report

from dual;

spool off

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

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

相关文章

第三阶段数据库-9:循环,编号,游标,分页

1_sql中的循环&#xff0c;编号&#xff08;1&#xff09;sql 中没有for循环&#xff0c;只有while循环&#xff0c;begin end 中间的就是while执行的语句&#xff0c;相当于{}declare i int; set i1; --begin end 中间的就是while执行的语句&#xff0c;相当于{} while(i<…

Redis高级篇:在Nginx、Redis、Tomcat(JVM)各环节添加缓存以实现多级缓存

摘要&#xff1a;多级缓存通过在 Nginx、Redis、Tomcat&#xff08;JVM&#xff09;各环节添加缓存&#xff0c;解决传统缓存中 Tomcat 瓶颈与 Redis 失效冲击数据库问题。利用 Caffeine 实现 JVM 缓存&#xff0c;OpenResty 结合 Lua 处理 Nginx 层逻辑&#xff0c;通过 Redis…

9 设计网络爬虫

前言 我们重点讨论网络爬虫的设计&#xff0c; 这也是一个有趣且经典的系统设计面试问题。 爬虫开发的复杂性取决于我们想要支持的爬虫规模。它可以是一个小的学校项目&#xff0c;只需要几小时就可以完成&#xff0c;也可以是一个需要专业开发团队持续优化的巨型项目。因此&…

面试:计算机网络

一、网络分层与URL流程 1. 模型掌握TCP/IP四层模型&#xff1a;层级功能 & 协议应用层提供应用接口&#xff08;HTTP、DNS、FTP&#xff09;传输层端到端传输&#xff08;TCP可靠、UDP快速&#xff09;网络层路由与寻址&#xff08;IP、ICMP&#xff09;网络接口层链路传输…

lanczos算法的核心——Ritz向量的计算(主要思想为反向映射)

在 Lanczos 算法中&#xff0c;“将得到的特征向量映射回原始空间&#xff08;即乘以V&#xff09;得到的近似特征向量” 这一步&#xff0c;通常是指在三对角矩阵&#xff08;T&#xff09;的特征向量求解完成后&#xff0c;将其转换回原始矩阵&#xff08;A&#xff09;的特征…

Verilog功能模块--SPI主机和从机(03)--SPI从机设计思路与代码解析

前言 上一篇文章介绍了Verilog功能模块——SPI主机&#xff0c;包括主机设计思路与使用方法。 本文则用纯Verilog设计了功能完整的4线SPI从机&#xff0c;与网上一些以高频率clk时钟模拟从机不同&#xff0c;本文中的SPI从机工作时钟来源于主机的sclk&#xff0c;符合SPI同步…

【Big Data】Hadoop YARN 大数据集群的 “资源管家”

Apache Hadoop YARN&#xff08;Yet Another Resource Negotiator&#xff09;是Hadoop生态系统中的核心资源管理框架&#xff0c;通过解耦资源管理和任务调度&#xff0c;提供了一个通用的分布式计算资源调度平台&#xff0c;使Hadoop从单一的MapReduce框架演进为支持多种计算…

【计组】总线与IO

总线同步定时方式采用公共时钟信号协调发送方和接收方的传送异步定时方式采用握手信号来实现定时控制不互锁对于主设备&#xff1a;请求&#xff0c;隔一段时间自动撤销请求对于从设备&#xff1a;回答&#xff0c;隔一段时间自动撤销回答半互锁对于主设备&#xff1a;请求&…

技术速递|Model Context Protocol (MCP) 支持已上线 JetBrains、Eclipse 和 Xcode

模型上下文协议&#xff08;MCP&#xff09;与 GitHub Copilot 的集成现已全面支持 JetBrains、Eclipse 和 Xcode&#xff01;MCP 使 GitHub Copilot 能够与外部工具和数据源集成&#xff0c;从而提升更深入的上下文感知能力和编码智能。 借助 JetBrains、Eclipse 和 Xcode 中…

深入浅出理解支持向量机:从原理到应用,解锁分类算法的核心密码

​​​​在机器学习的广阔领域中&#xff0c;分类算法犹如一个个精准的 “决策官”&#xff0c;帮助我们从海量数据中挖掘规律、做出判断。而在众多分类算法里&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;简称 SVM&#xff09;凭借其出色的泛化能力、…

相关法律、法规知识(五)

一、著作权法&#xff1a;软件知识产权风险条款核心要求召回风险场景软件著作权归属&#xff08;11&#xff09;委托开发软件无书面合同 → 著作权归受托方代工生产的设备预装未授权软件 → 侵权诉讼 → 强制下架召回&#xff08;如工业PDA盗用第三方代码&#xff09;侵权行为&…

PWM控制实现呼吸灯

一.呼吸灯原理 呼吸灯指灯光的亮度随着时间由暗到亮逐渐增强&#xff0c;再由亮到暗逐渐衰减&#xff0c;很有节奏感地一起一伏&#xff0c;就像是在呼吸一样&#xff0c;被广泛应用于手机、电脑、电视等电子设备的指示灯中。 通过调节PWM占空比实现呼吸灯效果。通过调节定…

MySQL LIKE查询终极指南:模糊匹配的利刃与性能深渊

引言 LIKE是MySQL中最强大的模糊匹配操作符&#xff0c;也是性能陷阱最多的查询之一。本文将系统解析其高效使用方法&#xff0c;通过实测数据揭示不同场景下的性能表现&#xff0c;并提供企业级优化方案。一、基础语法与通配符解析 1.1 四种匹配模式详解 -- 前缀匹配&#xff…

开发者工具与效率提升指南

开发者工具与效率提升指南介绍 在软件开发过程中&#xff0c;选择适当的开发工具和配置优化是提升效率的关键。本指南旨在提供关于常用开发工具、IDE配置、自动化流程及效率脚本的全面资源与建议&#xff0c;以帮助开发者更高效地进行编码和项目管理。 开发工具和IDE配置 常用开…

Python 轻量级的 ORM(对象关系映射)框架 - Peewee 入门教程

文章目录基础创建数据库管理对象定义自己的模型连接数据库并创建表插入数据查询数据更新数据删除数据进阶复合主键模型示例复杂查询示例(以Relation模型为例)基础 创建数据库管理对象 from peewee import *db MySQLDatabase(test_db, userroot, passwordpassword, hostlocal…

《Java反射与动态代理详解:从原理到实践》

1. 反射&#xff08;Reflection&#xff09; 1.1 反射的概述 反射是Java语言的核心特性之一&#xff0c;它允许程序在运行状态下动态获取类的信息并操作类的成员&#xff08;构造方法、成员变量、成员方法&#xff09;。 专业定义 对于任意一个类&#xff0c;都能够知道这个类的…

golang7 数组切片

本视频详细讲解了Go语言中的集合类型数据结构&#xff0c;重点介绍了数组、切片、map和list四种集合类型。特别强调了切片和map的重要性&#xff0c;以及它们在实际开发中的应用。同时&#xff0c;详细阐述了数组的定义、操作及其与切片之间的区别&#xff0c;包括数组类型与元…

k8s-容器化部署论坛和商城服务(小白的“升级打怪”成长之路)

目录 一、配置文件编写 1、数据持久化 2、mysql主从复制 3、php解析环境 4、nginx服务 5、redis主从复制 6、tomcat服务 7、操作命令 8、在每个node节点操作上 9、更改服务文件加入redis缓存和实现访问动静分离 在存储主机上查看 10、更改商城应用文件 二、实现域…

智慧AI消防通道占用检测在危险区域的应用

智慧AI消防通道占用检测&#xff1a;构建工厂与仓库的安全防线在工业生产与物流仓储领域&#xff0c;工厂安全与仓库安全始终是企业运营的核心命题。消防通道作为紧急情况下的“生命通道”&#xff0c;其畅通性直接关系到人员疏散效率与火灾扑救效果。然而&#xff0c;传统人工…

LangGraph-2-Demo

状态&#xff1a;一个共享数据结构&#xff0c;表示应用程序的当前快照。它可以是任何 Python 类型&#xff0c;但通常是 TypedDict 或 Pydantic BaseModel。 节点&#xff1a;Python 函数&#xff0c;用于编码代理的逻辑。它们以当前 状态 作为输入&#xff0c;执行一些计算或…