- 浏览: 82511 次
- 性别:
- 来自: 北京
最新评论
-
streamsong:
王雨尘 写道
的确是说索引是排序的,我漏掉啦
我们为什么要用索引,用索引为什么比不用索引快 -
heerwa:
...
我们为什么要用索引,用索引为什么比不用索引快 -
liulanghan110:
那么用索引为什么会提高性能呢?因为索引(以B树索引为例)是树状 ...
我们为什么要用索引,用索引为什么比不用索引快 -
王雨尘:
我们为什么要用索引,用索引为什么比不用索引快 -
pangpang514:
居然和强哥合影过。。。。佩服!
我们为什么要用索引,用索引为什么比不用索引快
关于read by other session,db file scattered read,db file sequential read等待时间的优化(下)
- 博客分类:
- oracle
5tt2k7djxub2m |
select t.unionorderid as serialid , t.lotteryid as lotteryid , fn_get_lotteryname(t.lotteryid) as lotterydesc , t.lotteryissue as issue , fn_get_username(t.uuid) as username , to_char(t.addtime, 'yyyy-mm-dd hh24:mi') as createtime , case when t.schstatus=1 and t.currentvalue<t.schemevalue and t.endtime>sysdate then fn_get_schstatusdesc(0) else fn_get_schstatusdesc(t.schstatus) end as schstatusdesc , to_char(t.bonustime, 'yyyy-mm-dd hh24:mi') as bonustime , t.bonusvalue as bonusvalue , t.schemevalue as lotteryvalue , case when t.schstatus=1 and t.currentvalue<t.schemevalue and t.endtime>sysdate then 0 else t.schstatus end as schstatus , case when t.schemeissue>1 then 1 else 0 end as issueflag , t.bonusstop as bonusstop , t.schemeissue as schemeissue , t.schtype as schtype , t.schemetitle as schemetitle , t.schemmemo as schemedesc , t.viewtype as viewtypedesc , t.schembonusrate as bon usrate , t.limitvalue as limitvalue , t.schemlowmoney as schemelowvalue , t.currentvalue as buyvalue , t.bodivalue as baodivalue , case when t.saletype=-1 and t.childtype=-1 then fn_get_saletypedesc(t.lotteryid, t.saletype, t.childtype) else fn_get_childtypedesc(t.lotteryid , t.childtype)||fn_get_saletypedesc(t.lotteryid, t.saletype, t.childtype) end as saletypedesc , fn_get_passbonus(t.unionorderid) as passbonus , case when t.viewtype=0 then t.schdetail when t.viewtype=1 and t.endtime<sysdate and t.uuid!='' then t.schdetail when t.uuid='' then t.schdetail when t.viewtype=3 and fn_check_schfollow(t.unionorderid, '')=1 then t.schdetail when t.viewtype=4 and fn_check_schfollow(t.unionorderid, '')=1 and t.endtime<sysdate and t.uuid!='' then t.schdetail else 'nulls' end as schdetail , t.schnumbers as schnumbers , fn_get_lotterylevelid(t.uuid, t.lotteryid) as lotterylevel , fn_get_buyvalues(t.unionorderid, t.uuid) as schbuyvalue , to_cha r(t.endtime, 'yyyy-mm-dd hh24:mi') as endtime , lotterynumbers , istop from (select a.*, rownum r from (select a.* from tb_lotteryschemeinfo a inner join tb_lottery_info b on a.lotteryid=b.lotteryid and a.lotteryissue=b.lotteryissue where 1=1 and b.status<1 and a.schtype in (2, 3) and a.agenterid=10000001 order by a.istop desc, case when a.schstatus>2 then 5 when a.schstatus=2 then 4 when a.schstatus=1 and a.currentvalue<a.schemevalue and a.endtime>sysdate then 0 when a.schstatus=0 and a.currentvalue<a.schemevalue then 0 else 1 end, a.currentvalue/a.schemevalue desc, a.bodivalue/a.schemevalue desc, a.schemevalue desc , (a.schemevalue-a.currentvalue-a.bodivalue) desc, fn_get_lottery levelid(a.uuid, a.lotteryid) desc ) a where rownum <= 16) t where t.r > 0 |
首先想到的是查看算起来的执行计划,先看sql_id为0ygf63rbau963的sql
SQL> set line 1200
SQL>set autotrace traceonly explain
SQL> set timing on
SQL> select * from ( select row_.*, rownum rownum_ from ( select this_.ID as ID3_0_, this_.ART_ID as ART2_3_0_, this_.COM_CONTENT as COM3_3_0_, this_.COM_NAME as COM4_3_0_, this_.COM_TIME as COM5_3_0_, this_.TZZ_ID as TZZ6_3_0_ from ZHCWSQ.TZZ_ARTICLE_COMMENT this_ where this_.ART_ID=662 order by this_.ID desc ) row_ where rownum <=11) where rownum_ >5;
no rows selected
Elapsed: 00:04:23.01
Execution Plan
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11 | 22990 | 9683 (1)|
| 1 | VIEW | | 11 | 22990 | 9683 (1)|
| 2 | COUNT STOPKEY | | | | |
| 3 | VIEW | | 12 | 24924 | 9683 (1)|
| 4 | TABLE ACCESS BY INDEX ROWID| TZZ_ARTICLE_COMMENT | 810 | 2023K| 9683 (1)|
| 5 | INDEX FULL SCAN DESCENDING| PK_TZZ_ARTICLE_COMMENT | 10860 | | 30 (0)|
--------------------------------------------------------------------------------------------
看到这个sql走的是索引,但是4分23秒才查完76万条记录的表,这让我想到了db file sequential read等待事件,可能是因为这张表的索引建立的不正确,查看这张表的索引信息
SQL> set autotrace off
SQL>selectINDEX_OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME,COLUMN_NAME from dba_ind_columns where table_name='TZZ_ARTICLE_COMMENT';
INDEX_OWNER INDEX_NAME TABLE_OWNE TABLE_NAME COLUMN_NAM
----------- ---------------------- ---------- ----------------- -----------
ZHCWSQ PK_TZZ_ARTICLE_COMMENT ZHCWSQ TZZ_ARTICLE_COMMENT ID
发现这张表只有ID字段有索引,而查询用到的where条件的字段ART_ID并没有索引,执行计划中走的是INDEX FULL。
通过观察sql_id为7pn5pxb6sdusu的sql也是这种情况。
再看下sql_id为5tt2k7djxub2m的大sql,还是看下索引情况
SQL> select * from dba_indexes where table_name='TB_LOTTERYSCHEMEINFO';
no rows selected
SQL> select * from user_ind_columns where table_name='TB_LOTTERYSCHEMEINFO';
no rows selected
发现这个表竟然没有索引
现在已将情况向领导反映,等领导要求优化的时候建立相应的索引,在看下统计信息和执行计划,由于是生产环境,未经批准,不能操作,真急人啊。
发表评论
-
将博客搬至CSDN
2013-12-06 15:49 56将博客搬至CSDN -
博客地址更换通知
2012-09-29 09:23 633自2011年8月,博客使用新地址www.dbdream.org ... -
如何追踪其他SESSION会话信息
2012-02-21 20:35 1367今天测试说在加载条目数据、校验数据和质检数据的时候很慢, ... -
SHM不足导致导致数据库宕机
2012-02-21 20:17 1287今天早上到办公室,开发说测试环境应用程序挂掉,看日志说是连接不 ... -
PCTFREE和PCTUSED及将LOB存到行外
2012-02-17 11:14 1488今天的ADDM报告建议重建存放图片的表并增大PCTFREE,这 ... -
SGA_TARGET大于SGA_MAX_SIZE的真实案例
2012-02-17 11:05 1416今天在给库户数据库健康检查的时候,发现个很奇怪的问题,S ... -
利用闪回、logmnr找回误删除的数据
2011-10-25 23:54 1284朋友遇到了非常经典的ORACLE事故——误删除,开发人员告诉他 ... -
ORACLE随机取数据
2011-10-25 23:53 961目前负责的这个数字化项目,需要开发个质检工具,实现每次随机取2 ... -
oracle将一行拆分为多行
2011-10-12 00:51 2197客户的业务涉及大量的图片信息,之前这些图片信息只在数据库里存着 ... -
ORA-01034、ORA-27101和ORA-28056错误解决方法
2011-10-11 00:40 2280今天登录数据库的时候遇到了ORA-01034和ORA-2710 ... -
查看某个用户下的所有空表
2011-10-09 15:01 1095今天在群里有人问如何 ... -
SQL*LOADER加载图片、TXT
2011-10-09 15:02 1150朋友打电话问我如何利 ... -
oracle10gR2新特性--透明加密(TDE)
2011-10-09 15:02 2017从10gR2开始,oracle推出了透明数据加密技术(Tran ... -
NAMES.DIRECTORY_PATH客户端连接参数
2011-10-08 22:38 3924今天在做oracle10gR2新特性透明加密(TDE)的时候, ... -
tnsping通却连接不上数据库
2011-10-08 22:26 2505今天在Windows XP上装可个11gR2数据库,却出现个很 ... -
ORACLE字符集检查工具CSSCAN
2011-10-08 22:22 1909我们在创建数据库的时候,通常会把字符集设置为ZHS16GBK, ... -
SQL*LOADER和外部表加载
2011-10-08 22:17 1367最近一直在用SQL*LOADER加载数据,用外部表也可以实现, ... -
创建本地Duplicate数据库
2011-10-08 22:14 1076Duplicate是RMAN的一个组成部分,利用Duplica ... -
由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN China Tour 2011)“活动已经正式拉开帷幕。
2011-09-01 12:00 824由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN ... -
enq: TX - row lock contention
2011-07-19 17:52 1165今天,收到客户的邮件说上周每天早上10点多,数据库都会有很多锁 ...
相关推荐
db file sequential read(ms) log file parallel write(ms) log file sync(ms) db file scattered read(ms) #IO WorkLoad Oracle IOPS Oracle MBPS db file sequential read db file scattered read log file ...
"Oracle等待事件说明一"主要关注了几个关键的等待事件,包括"buffer busy waits"、"db file parallel write"、"db file single write"、"db file scattered read"、"db file sequential read"以及"direct path write...
常见的非空闲等待事件包括 db file scattered read、db file sequential read、buffer busy waits、free buffer waits、enqueue、latch free、log file parallel write、log file sync 等。 1. db file scattered ...
高频率的 db file scattered read 可能暗示需要对相关表创建合适的索引以优化查询性能。但并非所有情况下全表扫描都是性能低下的表现,Oracle 会根据访问数据量和优化器模式(CBO 或 RBO)来决定是否使用全表扫描。...
当“db file sequential read”和“db file scattered read”等读操作进入等待事件的前五名时,通常表示存在缓冲区忙等待问题。例如,以下STATSPACK报告片段显示了这些等待事件: ``` % 总和事件 等待 时间(s) 消逝...
一些常见的非空闲等待事件有 db file scattered read、db file sequential read、buffer busy waits、free buffer waits、enqueue、latch free、log file parallel write、log file sync 等。 db file scattered ...
5. **等待事件**(Timed Events):db file scattered read、latch free、db file sequential read等是等待时间最多的事件。db file scattered read和db file sequential read涉及到I/O操作,可能需要优化表空间的I/...
- **Db file sequential read / scattered read**:这些等待事件通常涉及顺序读取和散列读取操作。优化索引使用,减少全表扫描,或者提升硬件性能(如磁盘I/O速度)有助于缓解。 - **Direct path read**:这是...
IO等待事件,如db file scattered read和db file sequential read,直接影响数据的读写速度,优化I/O子系统和使用合适的数据访问模式至关重要。 在资源层面,CPU、内存和I/O是性能优化的重点。CPU资源的监控包括...
通过识别消耗时间最多的事件,如`db file sequential read`和`db file scattered read`,可以定位性能瓶颈并采取相应措施进行优化。 综上所述,Oracle数据库性能优化涉及到多个层面,包括存储硬件、操作系统配置、...
- **db file scattered read**:表示数据库服务器进程读取多个数据块时发生的等待事件。 - **db file sequential read**:表示顺序读取数据文件中的数据块时发生的等待事件。 - **db file parallel read**:在并行...
4. **DB File Sequential Read(顺序读)**:这是最常见的I/O等待事件之一,通常发生在全表扫描或索引扫描时。优化查询语句,减少全表扫描,可以降低这种等待。 5. **DB File scattered read(散列读)**:与顺序读...
非空闲等待事件,如buffer busy waits、db file scattered read、db file sequential read等,通常揭示了系统中的竞争和资源冲突,需要通过深入分析来解决。 针对I/O统计的诊断,可以使用SQL查询来获取表空间、...
3. **DB File Sequential Read**: 这个等待发生在数据文件的顺序读取操作中。优化索引使用、缓存策略(如增大SGA)和I/O子系统性能可以改善。 4. **DB File Scattered Read**: 当数据块非顺序读取时发生。数据库...
db file sequential read 与 db file scattered read 等待的差别是什么?如果以上等待比较多,证明了什么问题?答案是:db file sequential read 是 DB 文件顺序读取,通常显示与单个数据块相关的读取操作(如索引...
- **db file scattered read**:若此类事件频繁,应检查相关SQL语句是否能有效利用索引,考虑调整查询语句或优化表结构,如创建合适的索引。 - **direct path read/write**:这通常与排序操作相关,可以通过增大PGA...
1. **高I/O等待时间**:通过`v$sysstat`视图检查`db file sequential read`、`db file scattered read`等等待事件,若等待时间占比过高,可能存在I/O问题。 2. **慢查询**:长时间运行的SQL查询,可能由于频繁的...