[转] Oracle sql 查询突然变慢 -- 案例分析
转自:http://jingyan.baidu.com/article/8275fc868ce57946a03cf692.html
一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下手解决
步骤思路:
1:查看sql是否走索引
2:查看索引是否失效
3:hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)
4:收集该表所有信息(包括索引)
5:分析该表所有信息(包括索引)
6:再次执行并查看
注意:哪个用户执行较慢,就用哪个用户进行操作,这样才准确
方法/步骤
- 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
查看索引是否失效
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
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
收集该表所有信息(包括索引)
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
分析该表所有信息(包括索引)
analyze table wfxx compute statistics;
- 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 查询突然变慢 -- 案例分析的更多相关文章
- SQL查询速度慢的原因分析和解决方案
SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建 ...
- 数据治理中Oracle SQL和存储过程的数据血缘分析
数据治理中Oracle SQL和存储过程的数据血缘分析 数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...
- sql查询未走索引问题分析之查询数据量过大
前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...
- oracle sql查询转义下划线
1,看以下结果 select * from test where login like '%CF_%'; LOGIN------------------------------------------ ...
- Oracle sql 查询结果某一列字段合并成为一条数据
使用oracle中自带函数 wmsys.wm_concat(需合并列的字段名) 用法如下: select code,name,wmsys.wm_concat(baname) from tab gro ...
- oracle SQL查询中间若干条记录
方法一:利用rownum和差集函数minus select * from ( select * from emp order by sal) where rownum<13 minus sele ...
- Oracle sql查询
http://blog.csdn.net/jlds123/article/details/6572559
- oracle SQL查询number字段精度丢失之解决方法
解决办法: -- 3.3:表示原始数据 --fm9999999990.0000:表示保留到小数点后4位,若不存在则用0补位. ),'fm9999999990.0000') as demo from d ...
- Oracle SQL执行缓慢的原因以及解决方案
以下的文章抓哟是对Oracle SQL执行缓慢的原因的分析,如果Oracle数据库中的某张表的相关数据已是2亿多时,同时此表也创建了相关的4个独立的相关索引.由于业务方面的需要,每天需分两次向此表中 ...
随机推荐
- vs2015 企业版 专业版 密钥
亲测可用 专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
- MySQL按照汉字的拼音排序
按照汉字的拼音排序,用的比较多是在人名的排序中,按照姓氏的拼音字母,从A到Z排序: 如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字37 ...
- 裸奔Spring(1)
pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...
- window 10 用composer安装 基于 Laravel 5.3 的 Coaster CMS Curl错误77解决
安装教程来自 http://laravelacademy.org/post/6547.html 1.系统环境windows 10 nodejs3.9.2 composer1.2.4(国内镜像) Cmd ...
- Ms sql行转列。汇总
SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...
- asp.net js 跨域方法二
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="view ...
- 记录在windows7上安装MongoDB
1.首先下载 官网地址 https://www.mongodb.com/download-center#community 选择 Windows Vista 32-bit, without SS ...
- Android IOS WebRTC 音视频开发总结(八十二)-- VP8对VP9,质量还是码率?
本文主要介绍VP9(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blacke ...
- AP创建会计科目
一. 创建会计科目的途径 1. 在发票工作台对单张发票进行创建科目: 2. 提交“创建会计科目”并发请求,对所有已经验证但尚未创建会计科目的发票进行创建会计科目. 二. 对单张发票创建会计科目 发票在 ...
- iOS各种调试技巧豪华套餐
转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global Break ...
步骤阅读
步骤阅读
步骤阅读
步骤阅读
步骤阅读
步骤阅读