以下两个脚本,官方来源:

https://github.com/liangjingbin99/shouhuo/tree/master/%E7%AC%AC05%E7%AB%A0

1. 找出未使用绑定变量的SQL

书中的方法,是新建了一张表,因为未使用绑定变量的SQL比较类似,通过@替换相似部分,然后提取相同的分组,从而找出未使用绑定变量的SQL,过程如下,

drop table t_bind_sql purge;
create table t_bind_sql as select sql_text,module from v$sqlarea;
alter table t_bind_sql add sql_text_wo_constants varchar2(1000);
create or replace function
remove_constants( p_query in varchar2 ) return varchar2
as
    l_query long;
    l_char  varchar2(10);
    l_in_quotes boolean default FALSE;
begin
    for i in 1 .. length( p_query )
    loop
        l_char := substr(p_query,i,1);
        if ( l_char = '''' and l_in_quotes )
        then
            l_in_quotes := FALSE;
        elsif ( l_char = '''' and NOT l_in_quotes )
        then
            l_in_quotes := TRUE;
            l_query := l_query || '''#';
        end if;
        if ( NOT l_in_quotes ) then
            l_query := l_query || l_char;
        end if;
    end loop;
    l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
    for i in 0 .. 8 loop
        l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
        l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
    end loop;
    return upper(l_query);
end;
/
update t_bind_sql set sql_text_wo_constants = remove_constants(sql_text);
commit;

接下来用如下方式就可以快速定位了:
set linesize 266
col  sql_text_wo_constants format a30
col  module format  a30
col  CNT format  999999
select sql_text_wo_constants, module,count(*) CNT

from t_bind_sql group by sql_text_wo_constants,module

having count(*) > 100 order by 3 desc;

执行结果,

我们在做SQL审核时,用另一种方法,根据v$sql中exact_matching_signature和force_matching_signature,来判断是否采用了绑定变量,

select a.username,

t.sql_text,
to_char(t.force_matching_signature) as force_matching_signature,
count(*) as counts
from v$sql t, all_users a
where t.force_matching_signature > 0 and

t.parsing_user_id = a.user_id and

t.force_matching_signature <> t.exact_matching_signature

group by t.force_matching_signature, t.sql_text, a.username
having count(*) > 20
order by count(*) desc;

2. 确定数据库峰值的脚本

这个脚本,能检查系统各维度的规律,对确定数据库峰值的时间点起到一定的指导作用。

官方脚本有一点小错误,应该是笔误,各位可以跑跑看,我更新了一版,

https://github.com/bisal-liu/oracle/blob/master/tools/monitor_database.sql

执行结果,是按照小时保存,包含了DB Time、REDO量、逻辑读(/s)、物理读(/s)、执行次数(/s)、解析次数(/s)、硬解析次数(/s)、交易量(/s),基本就是AWR报告中概要以及Load Profile部分的内容,其实从SQL看,是从dba_hist_snapshot进行统计,说明是从AWR快照库中得到的,

历史文章:

《《收获,不止SQL优化》 - 调优信息一键生成脚本学习》

《《收获,不止SQL优化》 - 获取执行计划的方法对比》
————————————————
版权声明:本文为CSDN博主「bisal」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bisal/article/details/88840385

《收获,不止SQL优化》这本书,有很多即用的脚本工具,或者根据自己的需求,改造重用,可以积累到自己的工具库中。的更多相关文章

  1. 《收获,不止SQL优化》读书笔记

    整体性能分析 AWR.ASH.ADDM.AWRDD 整体分析调优工具 AWR:关注数据库的整体性能的报告: ASH:数据库中的等待事件与哪些SQL具体对应的报告: ADDM:oracle给出的一些建议 ...

  2. 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,

    梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...

  3. 数据库性能优化之SQL优化

    网上有关SQL优化的方案有很多,但多是杂乱无章.近日闲暇抽空整理了一下,方便大家以后的查阅,若发现其中有什么问题和不全,欢迎大家在下面纠正和补充: 1. 对于SQL语句的性能优化,主要体现在对于查询语 ...

  4. 由一次 UPDATE 过慢 SQL 优化而总结出的经验

    最近,线上的 ETL 数据归档 SQL 发生了点问题,有一个 UPDATE SQL 跑了两天还没跑出来: update t_order_record set archive_id = '420a7fe ...

  5. SQL优化有偿服务

    本人目前经营MySQL数据库的SQL优化服务,100块钱一条.具体操作模式 其中第一条,可以通过在微信朋友圈转发链接中的信息(http://www.yougemysqldba.com/discuz/v ...

  6. 数据库的规范和SQL优化技巧总结

    现总结工作与学习中关于数据库的规范设计与优化技巧 1.规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需 ...

  7. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  8. Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"

    最近正在拜读Hibernate之父大作<Java Persistence with Hibernate>,颇有收获.在我们熟悉的Hibernate映射文件中也大有乾坤,很多值得我注意的地方 ...

  9. sql优化建议

    背景:        在北京工作期间,我们做应用开发的和后台数据库的联系非常大,我们经常在一起讨论存储过程或者是sql性能优化的事情来降低应用运行时的时间,提高性能,经过和数据库方面的工程师的一些讨论 ...

随机推荐

  1. JVM内运行时数据区

    JVM的基本区域: 类加载子系统 运行时数据区(内存区域) 执行引擎 运行时数据区域 方法区(Method Area) 类的所有字和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义.简单来 ...

  2. 【解决】error pulling image configuration: Get https:// ...... x509: certificate has expired or is not yet valid

    [问题]进行镜像拉取时报错 [分析] 很多人会被第一句所蒙蔽,按照网上教程进行修改etc/sysconfig/docker,之后发现还是没有用. 其实这里重点是最后一句"certificat ...

  3. csuoj-1900 锋芒毕露

    Description 小闪最近迷上了二刀流——不过他耍的其实是剑——新买了一个宝库用来专门存放自己收集的双剑.一对剑有两把,分只能左手用的和只能右手用的,各自有一个攻击力数值.虽然一对剑在小闪刚拿到 ...

  4. Java关于赋值

    下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果: public static void main(String[] args){ short s = 1; s=s+1; Sys ...

  5. forEach()和for/in循环的缺点与for-of循环

    以数组为例,JavaScript 提供多种遍历语法.最原始的写法就是for循环. for (var index = 0; index < myArray.length; index++) { c ...

  6. 【JPA】开始

    Java SE中使用 实体Bean package cn.ycx.entity; import javax.persistence.Entity; import javax.persistence.I ...

  7. 延迟队列DelayQueue take() 源码分析

    延迟队列DelayQueue take() 源码分析 在工作中使用了延迟队列,对其内部的实现很好奇,于是就研究了一下其运行原理,在这里就介绍一下take()方法的源码 1 take()源码 如下所示 ...

  8. poj 1270 Following Orders (拓扑排序+回溯)

    Following Orders Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5473   Accepted: 2239 ...

  9. Instrument API介绍

    1. Instrumentation介绍  JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machi ...

  10. Navicat Premium从远程Mysql数据库复制到本地数据库的方法

    之前做在本地测试总是先去现在下一份数据库的sql,然后再在本地建一个相同的,导入sql.然后觉得有点麻烦,现在发现了一个直接远程直接复制一份到本地的方法 工具:Navicat Premium 1.先连 ...