转自:http://jingyan.baidu.com/article/8275fc868ce57946a03cf692.html

一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下手解决

步骤思路:

1:查看sql是否走索引

2:查看索引是否失效

3:hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)

4:收集该表所有信息(包括索引)

5:分析该表所有信息(包括索引)

6:再次执行并查看

注意:哪个用户执行较慢,就用哪个用户进行操作,这样才准确

方法/步骤

  1. 1

    查看sql是否走索引

    以下是突然查询较慢的sql语句:

    select * from  wwff

    where JGSJ>=to_date('2014-10-26 00:00:00','yyyy-mm-dd HH24:Mi:SS')

    and SJZT=1 and  FJBJ=3 and FJR=1 and rownum <= 1

    耗时 9秒

    注释:在JGSJ 字段上已经创建了索引,查看执行计划,发现表没有走索引,进行全表扫描

  2. 2

    查看索引是否失效

    select 'alter index '||a.owner||'.'||a.index_name||' rebuild nologging online;'

    from dba_indexes a

    where a.table_name='WWFF'

    and a.status<>'VALID'

    and a.partitioned<>'YES';  --因为该表不是分区表

  3. 3

    hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)

    select /*+index(wwff IDX$$_wwff_JGSJ)*/ * from  wwff

    where JGSJ>=to_date('2014-10-26 00:00:00','yyyy-mm-dd HH24:Mi:SS')

    and SJZT=1 and  FJBJ=3 and FJR=1 and rownum <= 1

    耗时0.03秒

    强制走索引之后,耗时才0.03秒,所以必须让该查询较慢的sql走上索引

  4. 4

    收集该表所有信息(包括索引)

    SQL> exec dbms_stats.gather_table_stats(ownname =>user ,tabname=>'WWFF' ,estimate_percent => 20,degree => 10,granularity => 'ALL',cascade => TRUE);

    ownname =>user   user 表示当前用户

    cascade => TRUE   true表示包括索引

  5. 5

    分析该表所有信息(包括索引)

    analyze table wfxx compute statistics;

  6. 6

    再次执行并查看

    select * from  wwff

    where JGSJ>=to_date('2014-10-26 00:00:00','yyyy-mm-dd HH24:Mi:SS')

    and SJZT=1 and  FJBJ=3 and FJR=1 and rownum <= 1

    耗时:0.03秒

    收集完统计信息并分析表之后,发现sql 开始走索引了

    注意:只对表收集统计信息或者分析表信息,可能不会生效,必须两个都进行操作

    == END

[转] Oracle sql 查询突然变慢 -- 案例分析的更多相关文章

  1. SQL查询速度慢的原因分析和解决方案

    SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建 ...

  2. 数据治理中Oracle SQL和存储过程的数据血缘分析

    数据治理中Oracle SQL和存储过程的数据血缘分析   数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...

  3. sql查询未走索引问题分析之查询数据量过大

    前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...

  4. oracle sql查询转义下划线

    1,看以下结果 select * from test where login like '%CF_%'; LOGIN------------------------------------------ ...

  5. Oracle sql 查询结果某一列字段合并成为一条数据

    使用oracle中自带函数  wmsys.wm_concat(需合并列的字段名) 用法如下: select code,name,wmsys.wm_concat(baname) from tab gro ...

  6. oracle SQL查询中间若干条记录

    方法一:利用rownum和差集函数minus select * from ( select * from emp order by sal) where rownum<13 minus sele ...

  7. Oracle sql查询

    http://blog.csdn.net/jlds123/article/details/6572559

  8. oracle SQL查询number字段精度丢失之解决方法

    解决办法: -- 3.3:表示原始数据 --fm9999999990.0000:表示保留到小数点后4位,若不存在则用0补位. ),'fm9999999990.0000') as demo from d ...

  9. Oracle SQL执行缓慢的原因以及解决方案

     以下的文章抓哟是对Oracle SQL执行缓慢的原因的分析,如果Oracle数据库中的某张表的相关数据已是2亿多时,同时此表也创建了相关的4个独立的相关索引.由于业务方面的需要,每天需分两次向此表中 ...

随机推荐

  1. Linux 文件与目录管理

    Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什么是绝对 ...

  2. centos 6.5 x64创建并挂载使用iscsi共享磁盘

    前景摘要:NFS或iSCSI,哪个更好?文件 vs 块NFS使用文件级别的实施,服务器或存储阵列托管整个文件系统,客户到文件系统上读写文件,可以在阵列端对主存储数据进行重复数据删除.iSCSI和FC则 ...

  3. 使用spring通知时,代理出错

    动态代理是基于接口的,spring配置是基于类的!!!!!!!!!! 注意:JDK的动态代理,只能对实现接口的类实现代理,生成代理对象,如果这个类没有实现接口,是生成不了代理对象的.如本例UserMa ...

  4. 入门React和Webpack

    最近在学习React.js,之前都是直接用最原生的方式去写React代码,发现组织起来特别麻烦,之前听人说用Webpack组织React组件得心应手,就花了点时间学习了一下,收获颇丰 说说React ...

  5. 如何知道使用的是哪种shell?

    命令一:[echo $0] 命令二:[echo $$]

  6. Access、Hybrid和Trunk

    以太网端口有三种链路类型:Access.Hybrid和Trunk.Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口:Trunk类型的端口可以属于多个VLAN,可以接收和发送多个VL ...

  7. window10系统安装SQL数据库和小蝴蝶的问题

    最近刚刚升了windows10系统.由于以前一直使用的是SQL2008数据库,所以也就没有下载最新的数据库,但是在安装的过程中一直提示让重启,重启了很多回也没有用. 在启动SQL2008安装程序的时候 ...

  8. AWS多个EIP的解决方案

    前言 前段时间,公司部署在AWS上的一台EC2突然访问不了了,后来经过检测发现是被GWF给墙了,可能是我们经常拿这台服务器来FQ导致的,幸好这台服务器的客户都是在香港的,被墙了对客户没有什么影响,但是 ...

  9. sql server中除数为零的处理技巧

    在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧. 做个会报这 ...

  10. jmeter执行顺序