分享
 
 
 

实例说明sql优化的重要性——(一)

王朝mssql·作者佚名  2006-04-07
窄屏简体版  字體: |||超大  

接到报告说,某省数据库CPU长时间负载很高,很多时候还经常是cpu idle值为各位数,甚至经常为<5 的各位数,

于是赶紧登陆检查,发现主要的瓶颈是WAIT IO,初步判断是和业务中的SQL语句有关的问题造成的。

HP-UX db01 B.11.11 U 9000/800 02/14/06

09:40:17 %usr %sys %wio %idle

09:40:19 13 3 72 11

09:40:21 10 2 80 8

09:40:23 9 3 71 16

09:40:25 11 3 71 16

09:40:27 12 3 74 12

Average 11 3 74 13

依据STATSPACK和一些维护经验,作出了如下调整策略:

1, 一个业务历史大表,已经将近40G多,有史以来的历史数据全部在线。

修改策略,将改表重建为时间分区表,按月份存放,并建立相应的local index

注:

由于日常对于这个表的操作都是insert,只有在授理投诉的时候会这个表来查找历史数据,

因此这个表的影响几乎从未在STATSAPCK中体现过。

影响:这个调整使得wio降低了25%左右

2, 根据statspack报告:

CPU Elapsd

Physical Reads Executions Reads per Exec %Total Time (s) Time (s) Hash Value

--------------- ------------ -------------- ------ -------- --------- ----------

2,996,669 86 34,845.0 26.6 168.34 1363.19 1482568540

Module: JDBC Thin Client

select count(*) from operation_log where 0=0 and OPR_TIME>=to_da

te('2006-03-14','yyyy-mm-dd') and OPR_TIME<=to_date('2006-03-14'

,'yyyy-mm-dd')+1

可以看到这个语句的执行计划:

-----------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost |

-----------------------------------------------------------------------

| 0 | SELECT STATEMENT | | | | |

| 1 | SORT AGGREGATE | | | | |

|* 2 | TABLE ACCESS FULL | OPERATION_LOG | | | |

-----------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - filter("OPERATION_LOG"."OPR_TIME"<=TO_DATE('2006-03-15

00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND

"OPERATION_LOG"."OPR_TIME">=TO_DATE('2006-03-14 00:00:00', 'yyyy-mm-dd

hh24:mi:ss'))

俨然一个权标扫描,还是没有RBO的!!

检查发现这个表 322M,2074560行数据,只有一个主键索引:

INDEX_NAME

------------------------

PK_OPERATION_LOG

于是给它添加基于OPR_TIME字段的索引。

SQL> select COLUMN_NAME from dba_ind_columns where table_name = 'OPERATION_LOG'

2 and index_name='IDX_OPERLOG_TIME';

COLUMN_NAME

--------------------------------------------------------------------------------

OPR_TIME

SQL>

修改后的执行计划:

--------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost |

--------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 7 | 37 |

| 1 | SORT AGGREGATE | | 1 | 7 | |

|* 2 | INDEX RANGE SCAN | IDX_OPERLOG_TIME | 13038 | 91266 | 37 |

--------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("OPERATION_LOG"."OPR_TIME">=TO_DATE('2006-03-14 00:00:00',

'yyyy-mm-dd hh24:mi:ss') AND "OPERATION_LOG"."OPR_TIME"<=TO_DATE('2006-03-

15 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))

现在执行一次这个语句的时间:

SQL> l

1 SELECT COUNT (*)

2 FROM OPERATION_LOG

3 WHERE 0 = 0

4 AND opr_time >= TO_DATE ('2006-03-14', 'yyyy-mm-dd')

5* AND opr_time <= TO_DATE ('2006-03-14', 'yyyy-mm-dd') + 1

SQL> /

COUNT(*)

----------

11617

Elapsed: 00:00:00.01

SQL>

3, 根据statspack报告,发现BOSSCHARGEINFO 表有1995188行,

CPU Elapsd

Physical Reads Executions Reads per Exec %Total Time (s) Time (s) Hash Value

--------------- ------------ -------------- ------ -------- --------- ----------

916,933 30 30,564.4 26.7 102.74 654.58 2412605967

Module: XXXXXXX (TNS V1-V3)

select MID ,SERVID ,ACCESSMODEID ,SERVICEGRADEID ,STATUS ,FEEMON

TH ,to_char(chargedate,'YYYYMMDDHH24MISS') from BOSSCHARGEINFO

where (status=4 and feemonth=:b0)

问题的现象和处理方法通问题2一样,这里是添加基于status和feemonth的联合索引。

修改后,该语句效率提高了一倍多(请注意改语句基本上每分钟执行一次,因此,总体效率的提高更为显著)。

4,

CPU Elapsd

Physical Reads Executions Reads per Exec %Total Time (s) Time (s) Hash Value

--------------- ------------ -------------- ------ -------- --------- ----------

427,455 20 21,372.8 12.5 50.18 215.02 1608726146

Module: XXXXXXX (TNS V1-V3)

SELECT MID,SERVID,ACCESSMODEID, SERVICEGRADEID,STATUS,FEEMONTH,

to_char(chargedate,'YYYYMMDDHH24MISS') FROM DELAYCHARG

EINFO WHERE status = 4 and feemonth =

'200603'

问题的现象和处理方法通问题3一样,这里是添加基于status和feemonth的联合索引。

修改后,该语句效率提高了一倍多(请注意改语句基本上每分钟执行一次,因此,总体效率的提高更为显著)。

调整后的状态:

HP-UX db01 B.11.11 U 9000/800 04/05/06

15:45:16 %usr %sys %wio %idle

15:45:18 25 3 30 42

15:45:20 21 4 35 40

15:45:22 24 5 24 47

15:45:24 23 5 27 46

15:45:26 23 3 31 43

Average 23 4 30 44

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有