查看: 3709|回复: 16

[性能调整] 一条SQL语句的优化问题

[复制链接]
论坛徽章:
2
授权会员
日期:2006-03-20 09:11:59优秀写手
日期:2014-01-15 06:00:15
发表于 2009-11-6 17:34 | 显示全部楼层 |阅读模式
SELECT COUNT(*) FROM T_DZ_SCEBILLLOG T WHERE T.CALLERNO=:B2 AND T.LOGDATE>=:B1-15/1440 AND T.LOGDATE<=:B1
此语句在高峰期的时候发现CPU使用率为80%,高峰期时每小时会执行40万到50万次
单独执行的时候为0.04秒左右.表里的数据为20多万,看执行计划走的是index range scan
T_DZ_SCEBILLLOG 此表是按小时分区表,一个小时执行一次JOB用于删除2个小时之前的数据.在字段CALLERNO和LOGDATE上建立了复合索引,同时有对表进行插入操作,基本执行的插入次数跟查询的次数一样.执行的顺序是先插入然后查询.
通过查v$sqlarea 获取的数据
CPU_time
25560000
elapsed_time
106428240
child_latch
5
bufferget
2321576
rows_processed
79988
version_count
2
那位大哥能否分析下该怎么优化,在高峰期CPU使用率不会太高
论坛徽章:
5
2008新春纪念徽章
日期:2008-02-13 12:43:03ITPUB9周年纪念徽章
日期:2010-10-08 09:32:252011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-11-6 17:53 | 显示全部楼层
问一下楼主,在oracle上如何建立多表的复合索引啊,,,,还不会呢

[ 本帖最后由 dongyidong 于 2009-11-6 17:54 编辑 ]

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-08-18 16:42:07生肖徽章:猪
日期:2007-01-25 16:52:00生肖徽章:蛇
日期:2007-01-25 16:58:03会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鼠
日期:2008-01-02 17:35:532010新春纪念徽章
日期:2010-03-01 11:19:06
发表于 2009-11-6 18:00 | 显示全部楼层
原帖由 dongyidong 于 2009-11-6 17:53 发表
问一下楼主,在oracle上如何建立多表的复合索引啊,,,,还不会呢


他的语句里哪有多表啊?

难道你想建多表的联合索引?

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-08-18 16:42:07生肖徽章:猪
日期:2007-01-25 16:52:00生肖徽章:蛇
日期:2007-01-25 16:58:03会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鼠
日期:2008-01-02 17:35:532010新春纪念徽章
日期:2010-03-01 11:19:06
发表于 2009-11-6 18:03 | 显示全部楼层
原帖由 鬼公子 于 2009-11-6 17:34 发表
SELECT COUNT(*) FROM T_DZ_SCEBILLLOG T WHERE T.CALLERNO=:B2 AND T.LOGDATE>=:B1-15/1440 AND T.LOGDATE



楼主这个,我觉得sql比较简单。 index建的也没有问题。

你看看你的session_cached__cursor的设置。 如果没有设置,从100开始涨。然后看看效果。

使用道具 举报

回复
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010世博会纪念徽章
日期:2010-07-30 12:07:232011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:高尔夫球
日期:2011-04-11 18:22:37蜘蛛蛋
日期:2011-08-17 08:44:40ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15复活蛋
日期:2011-12-15 09:06:552012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-11-6 18:31 | 显示全部楼层
看能否改应用,把频率降下来

使用道具 举报

回复
论坛徽章:
7
数据库板块每日发贴之星
日期:2009-02-01 01:01:022009日食纪念
日期:2009-07-22 09:30:002010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:07:21ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-11-6 23:43 | 显示全部楼层
先声明,本人对ORACLE还是一知半解,所以说的想法有可能不正确。
1、能不能把:B1-15/1440改一下,改成值,而不用计算,这样应该能快一点点。
2、针对T.LOGDATE的判断,可不可以改成between,据说好象会快一点。
3、count(*)、count(1)、count(列名),这三种那个快我不记得了,可以试试。
4、据说在索引上,先索引谁后索引谁也会对速度有影响,也可以试试改索引的先后顺序。
5、这个表大不大,可不可以长驻内存?如果大,能不能通过触发器生成一个小一点的表,只包括CALLERNO和LOGDATE两列,这样统计起来快好一些。
6、“高峰期时每小时会执行40万到50万次”,那不是每秒有110~150左右的速度,每一时刻要有7、8个在同时执行,会不会频率太高。

使用道具 举报

回复
论坛徽章:
120
现任管理团队成员
日期:2011-05-07 01:45:08乌索普
日期:2019-02-14 23:54:04
发表于 2009-11-7 00:02 | 显示全部楼层
1.改成常量?不帮定变量? 那样不慢才怪
2.cbo会改写sql,这样做是无用功
3.对于你这个情况,这三种没有区别
4.你现在如果是(CALLERNO,LOGDATE)这样建立的索引,顺序是正确的,不需要改
5.首先你要知道,这个sql为什么耗费cpu,否则keep 这个表是没有意义的
6.这觉得是相当的高~


lz提到这个是一个分区表,那么分区键是什么?

你说你的cpu到了80%,那么是什么消耗了cpu?你如何判断是这个sql消耗的?如果是这个sql,那么高并发下,这个sql地等待事件是什么?

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
发表于 2009-11-7 00:44 | 显示全部楼层
原帖由 zergduan 于 2009-11-7 00:02 发表
1.改成常量?不帮定变量? 那样不慢才怪
2.cbo会改写sql,这样做是无用功
3.对于你这个情况,这三种没有区别
4.你现在如果是(CALLERNO,LOGDATE)这样建立的索引,顺序是正确的,不需要改
5.首先你要知道,这个sql为什么耗费cpu,否则keep 这个表是没有意义的
6.这觉得是相当的高~


lz提到这个是一个分区表,那么分区键是什么?

你说你的cpu到了80%,那么是什么消耗了cpu?你如何判断是这个sql消耗的?如果是这个sql,那么高并发下,这个sql地等待事件是什么?


使用道具 举报

回复
论坛徽章:
44
双鱼座
日期:2016-01-07 20:57:31奔驰
日期:2013-08-02 22:22:552013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-01-29 22:12:11蛋疼蛋
日期:2013-01-07 15:50:53ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28紫蛋头
日期:2011-07-31 11:27:01蜘蛛蛋
日期:2011-06-14 14:20:33蛋疼蛋
日期:2011-06-03 19:39:27SQL大赛参与纪念
日期:2011-04-13 12:08:17
发表于 2009-11-7 01:57 | 显示全部楼层
如果内存充足,是否cache表?

使用道具 举报

回复
招聘 : 数据库管理员
认证徽章
论坛徽章:
20
祖国60周年纪念徽章
日期:2009-10-09 08:28:00数据库板块每日发贴之星
日期:2011-02-20 01:01:01ITPUB季度 技术新星
日期:2011-04-02 10:31:09ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242011新春纪念徽章
日期:2011-02-18 11:43:33
发表于 2009-11-7 09:19 | 显示全部楼层
cache表 对楼主的问题来说 似乎意义不大啊

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


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

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表