拜年+散分贴《Oracle SQL_TRACE和10046事件优化SQL实例》

一数据库版本LEO1@LEO1select*fromv$version;BANNER——————————————————————————–OracleDatabase11gEnter

一 数据库版本

LEO1@LEO1>select * from v$version;

BANNER

——————————————————————————–

Oracle Database11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production

PL/SQL Release11.2.0.1.0 – Production

CORE    11.2.0.1.0      Production

TNS for Linux:Version 11.2.0.1.0 – Production

NLSRTL Version11.2.0.1.0 – Production

 

二 演示使用SQL_TRACE和10046事件对其它会话进行跟踪,并给出trace结果

SQL_TRACE:Oracle这个功能主要是为了追踪SQL的执行过程,分析SQL的性能,资源消耗情况。

1.查看SQL是如何操作处理数据

2.查看SQL在执行过程中产生了的等待事件

3.查看SQL的执行过程资源消耗

4.查看SQL的实际执行计划

5.查看SQL的递归语句

6.如果要探索SQL如何执行的可以详细看看

10046:用于分析SQL执行过程中性能消耗情况,可以查看绑定变量信息,可以查看等待事件信息,它比SQL_TRACE输入输出更多参数。

 

上述工具使用场合:1.优化SQL语句

                  2.查看SQL语句执行计划

                  3.跟踪SQL语句执行过程

                  4.把会话中SQL的信息重定向到一个文件里

 

SET AUTO TRACE:1.输出SQL语句估算的执行计划(猜出来的)

                2.SQL语句并没有真正执行,只关注这条SQL的执行计划对不对

                3.只是用来估算执行计划

 

实验

使用SQL_TRACE对其它会话进行跟踪

如果对当前会话进行跟踪只需alter session set sql_trace=true;即可,如果对其它会话进行跟踪还需要设置另外一些参数。

我们现在做一下,从144会话跟踪12会话的SQL

144会话我们使用leo1用户操作

12会话我们使用leo2用户操作

144会话

LEO1@LEO1> selectdistinct sid from v$mystat;    可以查询当前会话ID

       SID

—————-

       144

我们用会话ID和串号来唯一定位一个会话,现在我们把2个会话信息都显示出来了

LEO1@LEO1>select sid,serial# from v$session where sid in (144,12);

       SID   SERIAL#

———————————

      12      4472

     144       979

这时我有了一个疑问,定位一个会话一般来说看sid就可以了,那么为什么后面还跟着个serial呢,这个serial是干什么用的呢,咨询了一下Alantany 查了一下官方文档

SID NUMBER:Sessionidentifier   就是会话标识

SERIAL#  NUMBER  :是用来标识唯一一个会话操作对象的,保证这个会话发出的命令可以正确的应用到对应的会话对象上。

创客贴设计 创客贴设计

创客贴设计,一款智能在线设计工具,设计不求人,AI助你零基础完成专业设计!

创客贴设计 51 查看详情 创客贴设计

场合 一个会话的结束和另一个会话开始都使用了同一个SID,区分这是2个不同的会话

例子

第一次leonarding登陆sid=12,操作了leo1表,退出

  SID   SERIAL#

———————————

  12       4472

第二次Alan登陆sid=12,又操作了leo2表,退出

  SID   SERIAL#

—————————- —-

  12      4777

如果只是看SID我们不能分辨出是谁登录了会话操作了leo1表和leo2表,而serial可以分辨出不同会话的命令正确应用到对应的对象上,区分这是2个不同的人登录的会话。

 

LEO1@LEO1> droptable leo1;                  清理环境

Table dropped.

LEO1@LEO1>create table leo1 as select * from dba_objects;    用leo1用户创建leo1表

Table created.

LEO1@LEO1>select count(*) from leo1;                    看看有多少条记录

  COUNT(*)

—————-

     72007

LEO1@LEO1>execute dbms_stats.gather_table_stats(‘LEO1′,’LEO1′,method_opt=>’for allcolumns size 254’);

PL/SQL proceduresuccessfully completed.

随便做个表分析和直方图

LEO1@LEO1> conn/ as sysdba                  切换为管理员

Connected.

SYS@LEO1> grantexecute on dbms_system to leo1; 授予执行“系统包”的用户权限给leo1,必须授予否则报错

ERROR atline 1:

ORA-06550:line 1, column 7:

PLS-00201:identifier ‘DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION’ must be declared

ORA-06550:line 1, column 7:

PL/SQL:Statement ignored

SYS@LEO1> connleo1/leo1                     我们在切换回来

LEO1@LEO1>execute sys.dbms_system.set_sql_trace_in_session(12,4472,true);

PL/SQL proceduresuccessfully completed.

启动跟踪会话ID=12,SERIAL=4472的SQL

声明:这个存储过程是SYS用户特有的,网站空间,所以在引用时必须带schema,不带就会报错如下

ERROR atline 1:

ORA-06550:line 1, column 7:

PLS-00201:identifier ‘SYS.DBMS_SYSTEM’ must be declared

ORA-06550:line 1, column 7:

PL/SQL:Statement ignored

12会话

LEO2@LEO1> select /*+ trace_by_leo1_session*/ count(*) from leo1.leo1;    leo2用户查询leo1表

  COUNT(*)

—————-

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/525133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Excel如何筛选重复项?Excel表格中筛选重复数据的几种方法详解
上一篇 2025年11月9日 07:33:01
sublime运行html快捷键 sublime打开浏览器查看html
下一篇 2025年11月9日 07:33:03

相关推荐

  • MySQL最新版本如何下载?官方下载指南

    MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南

    要下载mysql,推荐从官网直接下载;选择社区版或商业版取决于用途;下载时需选对操作系统和版本;安装遇到问题可查错误提示并搜索解决方案;验证安装成功可用命令行登录。下载步骤包括访问官网、选择版本与操作系统、使用installer、注册账号、开始下载安装。安装后配置root密码、字符集等。验证方式为命…

    2026年9月22日 用户投稿
    300
  • Flyway多数据库与CI/CD测试集成策略

    本文深入探讨了在CI/CD流程中,如何高效地配置Flyway以管理多数据库环境下的迁移,尤其关注集成测试场景。我们将比较使用真实数据库服务、Testcontainers以及Flyway自身多数据库配置的优劣,并提供关于分离生产与测试环境迁移脚本的实用策略,旨在确保开发、测试与生产环境的数据一致性与流…

    2026年9月22日
    200
  • Oracle定时任务

    oracle 介绍 oracle job 是应用在数据库层面,用来定时执行存储过程或者 SQL 语句的定时器。 测试数据代码语言:javascript代码运行次数:0运行复制 –建测试表CREATE TABLE TEST_JOB( DATETIME DATE, BEG_DATE VARCHAR2(…

    2026年9月22日
    500
  • if sql语句_SQL IF语句介绍和概述

    if sql语句_SQL IF语句介绍和概述if sql语句_SQL IF语句介绍和概述if sql语句_SQL IF语句介绍和概述if sql语句_SQL IF语句介绍和概述

    大家好,又见面了,我是你们的朋友全栈君。 本文将深入探讨SQL Server中实用的SQL IF语句功能。 介绍 (Introduction) 在现实生活中,我们根据条件做出决定。例如,以下情况: 如果我今年获得绩效奖金,我将选择国际度假,否则我将选择国内度假。如果天气变好,我会计划骑自行车旅行,否…

    2026年9月22日 用户投稿
    100
  • MySQL数据备份自动化实施_MySQL定时任务与脚本管理

    MySQL数据备份自动化实施_MySQL定时任务与脚本管理MySQL数据备份自动化实施_MySQL定时任务与脚本管理MySQL数据备份自动化实施_MySQL定时任务与脚本管理MySQL数据备份自动化实施_MySQL定时任务与脚本管理

    mysql数据备份的自动化实施核心在于结合mysqldump等工具与操作系统的定时任务(如linux的cron或windows的task scheduler),通过编写和管理脚本实现定期执行备份。1. 使用mysqldump作为基础工具,编写包含数据库连接信息、时间戳文件名、日志记录、压缩清理等功能…

    2026年9月21日 用户投稿
    200
  • VSCode编写Java代码方法_VSCode搭建Java开发环境实战教程

    答案:在VSCode中配置Java开发环境需安装JDK并设置环境变量,再安装VSCode及Java扩展包,即可实现Java项目的创建、编写、运行与调试。它轻量、启动快,支持多语言和丰富扩展,集成Maven/Gradle,适合日常开发。 在VSCode里编写Java代码,说白了,就是把这个轻量级的代码…

    2026年9月21日
    100
  • 在Linux中如何通过命令行安装Java JDK

    在Linux中安装Java JDK可通过包管理器或手动安装,推荐使用系统自带工具安装OpenJDK。对于Ubuntu/Debian系统,先更新软件包列表:sudo apt update,再搜索可用版本:apt search openjdk-*,然后安装指定版本如OpenJDK 17:sudo apt…

    2026年9月20日
    000
  • 如何配置Scala与Java混合开发环境 Scala环境与JDK整合方法

    配置Scala与Java混合开发环境的关键是安装JDK、Scala并统一管理依赖。1. 安装JDK 8或11,配置JAVA_HOME和PATH;2. 安装Scala并设置SCALA_HOME;3. 使用SBT创建项目,配置build.sbt,组织src目录;4. 在IntelliJ IDEA中安装S…

    2026年9月20日
    100
  • 如何在Laravel中实现数据加密

    在laravel中实现数据加密的最直接且推荐方式是使用内置的crypt门面,其基于openssl并默认采用aes-256算法,通过app_key进行加解密。1. 使用crypt::encryptstring()或crypt::encrypt()对字符串或数组/对象进行加密;2. 使用crypt::d…

    2026年9月13日
    100
  • 如何在mysql中迁移分区表数据

    答案:MySQL分区表数据迁移需确保结构兼容性和数据完整性,常用方法包括:1. 使用INSERT INTO…SELECT迁移数据,要求目标表已存在且WHERE条件匹配分区范围;2. 通过mysqldump导出导入,适用于跨实例迁移,操作简单但大表性能差;3. 模拟EXCHANGE PAR…

    2026年9月10日
    100
  • thinkphp8相比thinkphp6有哪些新特性

    ThinkPHP8在性能、架构、功能和开发体验上全面升级,采用全新模块化架构,优化路由解析与数据库查询,提升响应速度;支持PHP 8.0+新特性,代码更简洁高效;增强中间件、路由、模型及验证功能,强化安全防护;兼容TP6代码,无缝升级,降低迁移成本。 ThinkPHP8 相比 ThinkPHP6 进…

    2026年9月10日
    400
  • Oracle DATE类型的时间组件处理与日期存储策略

    Oracle数据库的`DATE`数据类型始终包含日期和时间组件,即使未明确指定时间,系统也会默认填充午夜(00:00:00)。因此,当期望只存储日期时,实际存储的仍会包含时间部分。本文将深入探讨这一特性,并提供在SQL查询和应用程序层面有效管理和显示日期(不含时间)的策略,强调应通过格式化而非尝试修…

    2026年9月9日
    200
  • mysql中如何审计用户操作

    答案:MySQL审计可通过企业版插件、通用日志、触发器或外部工具实现。使用MySQL Enterprise Audit插件可详细记录登录与操作行为;社区版可启用general_log记录所有SQL语句,但影响性能;关键表可创建审计表和触发器追踪DML变更;还可结合Percona、ProxySQL或E…

    2026年9月9日
    100
  • 如何在安装完成后配置表空间管理

    首先创建表空间并指定存储路径与大小,Oracle和PostgreSQL通过CREATE TABLESPACE命令实现;接着可为用户设置默认表空间,避免每次建表显式指定;然后在建表时可通过TABLESPACE子句指定对象存储位置;定期使用系统视图或函数监控表空间使用情况,防止空间不足;当空间紧张时,可…

    2026年9月9日
    000
  • 什么是mysql数据库及其基本概念

    MySQL是开源关系型数据库,基于SQL操作,用于Web开发;包含数据库、表、行、列等基本概念,支持主键唯一标识和外键关联表,常用SQL语句包括SELECT、INSERT、UPDATE、DELETE,广泛应用于电商、博客等需数据持久化与一致性的场景。 MySQL 是一种广泛使用的关系型数据库管理系统…

    2026年9月8日
    100
  • OpenJPA与Oracle:解决4000字节字符串限制警告

    当openjpa在oracle数据库环境中记录“warn: … is being mapped with a handler that may not be able to store values over 4000 bytes/chars long”警告时,这通常意味着实体中某个字符…

    2026年9月8日
    000
  • 数据量大的App制作,数据库如何选型?

    在开发处理大量数据的应用程序时,数据库的选择至关重要。选择一个合适的数据库不仅能确保数据的存储效率和安全性,还能提升应用程序的整体性能和用户体验。以下将从几个关键方面探讨如何为数据量大的app选择合适的数据库。 首先,考虑数据量的大小。 对于数据量庞大的应用程序,首要考虑的是数据库的存储能力和扩展性…

    2026年9月7日
    000
  • 最小化Java中的可变范围:安全有效代码的最佳实践

    本文探讨了缩小Java变量作用域以提升代码可读性、可维护性和安全性至关重要的问题。文章将Java的面向对象方法与C等语言进行了对比,并通过方法封装和受控访问等最佳实践示例,阐述了如何有效地限制变量的作用域。 在Java中,变量的作用域是指程序中可以访问该变量的区域(Mahrsee, 2024)。作用…

    2026年9月7日
    000
  • 解决SQL Server 2016 JRE7更新问题

    解决SQL Server 2016 JRE7更新问题解决SQL Server 2016 JRE7更新问题解决SQL Server 2016 JRE7更新问题解决SQL Server 2016 JRE7更新问题

    安装sql server 2016时,若系统中缺少必要的运行组件,可能会导致安装过程被中断。其中,未安装合适的java运行环境是较为常见的原因之一。为避免此类问题,应在安装前部署与sql server兼容的jre版本,并正确设置相关环境变量。完成配置后,重新启动sql server安装程序即可继续安…

    2026年9月7日 用户投稿
    000
  • sql语言中,删除一个表的命令是什么?

    sql语言中,删除一个表的命令是“DROP”,具体语法格式“DROP TABLE [IF EXISTS] 表名”。“DROP TABLE”命令可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。 (推荐教程:mysql视频教程) SQL语言中,删除一个表的命令是( )。 A.DELE…

    2026年9月7日
    100

发表回复

登录后才能评论
关注微信