查看: 6863|回复: 33

[笔记] 关于10g下sql语句执行计划如此神奇的疑问?

[复制链接]
论坛徽章:
3
ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:28ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2008-4-10 17:19 | 显示全部楼层 |阅读模式
前些日子,公司进口图书部新开发的Mis系统上线后,速度特慢,捕捉到最占资源的sql语句,在后台执行该sql同样很慢,排除中间件websphere的问题,初步怀疑是sql语句写的效率不高,所以系统外包公司的开发人员一段时间里一直再优化sql,但效果不明显,开发人员中没有对oracle优化研究较熟悉的。当时web服务器和db服务器临时在一台windows2003的服务器上运行,有时候发现oracle的进程占cpu很高,于是决定将web和db分开,当时我准备把我负责的中文联采系统项目的数据库 从9i迁移到10g上,OS 是solaris,10g装好后领导决定先把进口图书的库移过去,移过去后神奇发生了,同样的sql在9i里执行需要52秒,而在10g里执行只需要0.几秒。Sql语句和在9i和10g里的执行计划见附件,执行计划有很大的差别,语句比较复杂关联了10多张表。而且不光是该sql原来执行慢的sql全部变得神奇的快了。
因为我不是DBA,学习oracle都是自己的爱好,还没有时间学10g的新特征,想问一下各位高手10g是如何实现sql选择最优的执行计划的?是不是只要装了10g,开发人员写sql时也不用考虑优化的问题了?

[ 本帖最后由 gaofeixmrs 于 2008-4-14 14:11 编辑 ]

图书进口部sql语句分析.doc

199 KB, 下载次数: 96

论坛徽章:
5
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53奥运会纪念徽章:羽毛球
日期:2008-06-23 12:00:05奥运会纪念徽章:柔道
日期:2008-07-04 09:42:36奥运会纪念徽章:皮划艇激流回旋
日期:2008-08-12 14:50:402010新春纪念徽章
日期:2010-03-01 11:19:07
发表于 2008-4-10 17:32 | 显示全部楼层

执行计划真复杂啊.

使用道具 举报

回复
论坛徽章:
41
生肖徽章2007版:鼠
日期:2008-03-31 15:43:34鲜花蛋
日期:2011-09-08 16:40:12ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26复活蛋
日期:2011-11-29 13:44:05ITPUB元老
日期:2011-12-19 18:18:382012新春纪念徽章
日期:2012-01-04 11:53:54奥运会纪念徽章:跆拳道
日期:2012-07-20 14:21:01ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蛋疼蛋
日期:2012-11-19 12:19:402013年新春福章
日期:2013-02-25 14:51:24
发表于 2008-4-10 17:54 | 显示全部楼层
没看LZ的DOC.
暂时推测也许是10g的optimizer_index_cost_adj default value在起作用。

使用道具 举报

回复
认证徽章
论坛徽章:
139
2009日食纪念
日期:2009-07-22 09:30:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21祖国60周年纪念徽章
日期:2009-10-09 08:28:002010年世界杯参赛球队:葡萄牙
日期:2010-01-18 09:23:302010年世界杯参赛球队:意大利
日期:2010-01-21 07:30:192010年世界杯参赛球队:南非
日期:2010-01-22 09:48:242010年世界杯参赛球队:加纳
日期:2010-02-13 16:34:422010新春纪念徽章
日期:2010-03-01 11:04:572010年世界杯参赛球队:斯洛伐克
日期:2010-05-21 11:24:312010年世界杯参赛球队:塞尔维亚
日期:2010-06-30 13:43:14
发表于 2008-4-10 18:18 | 显示全部楼层
看起来统计信息不一样啊。
另外
9i下使用all_rows试一试

使用道具 举报

回复
论坛徽章:
3
ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:28ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
 楼主| 发表于 2008-4-12 16:41 | 显示全部楼层
9i下使用all_rows 执行计划不变,

使用道具 举报

回复
认证徽章
论坛徽章:
67
现任管理团队成员
日期:2012-06-02 02:10:00ITPUB元老
日期:2012-09-12 14:06:14ITPUB社区千里马徽章
日期:2013-06-09 10:15:34季节之章:冬
日期:2012-09-04 11:05:30季节之章:春
日期:2012-09-05 09:20:36优秀写手
日期:2013-12-18 09:29:09马上有房
日期:2014-04-10 13:35:362014年新春福章
日期:2014-04-14 09:54:08马上有车
日期:2014-02-28 16:43:13马上加薪
日期:2014-02-19 11:55:14
发表于 2008-4-12 17:22 | 显示全部楼层
10.1还是10.2啊?

使用道具 举报

回复
论坛徽章:
84
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-02-13 15:13:362012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
发表于 2008-4-12 21:26 | 显示全部楼层
首先检查9i的统计信息是否准确
10g的算法跟9i是有一些变化,即使同样的统计信息,也会有不同的算法
并不是10g自动产生的sql执行计划一定正确,以前也遇到过同样的语句9i比10g快的,只是你们恰好遇到了10g产生的执行计划更适合的情况,不能绝对说10g的算法一定优于9i的

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2008-03-13 10:32:44生肖徽章2007版:鸡
日期:2008-04-03 18:55:51数据库板块每日发贴之星
日期:2008-04-21 01:01:58奥运会纪念徽章:拳击
日期:2008-06-14 10:29:372014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
发表于 2008-4-13 01:02 | 显示全部楼层
10g的默认optimizer是cbo,对分析统计信息很依赖,所以查一查分析统计信息。

使用道具 举报

回复
论坛徽章:
3
ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:28ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
 楼主| 发表于 2008-4-14 09:33 | 显示全部楼层
Ora-600 版主: 在9i下执行分析过统计信息,analyze table t compute statistics for table for all indexes for all indexed columns;
开始我也以为是统计信息的问题,oracle在9i下选择了不是最优的执行计划。但是执行过了效率还是一样的。
现在是相同的服务器配置、相同的数据量,但是语句的运行效率相差如此大,不是单个语句,是在9i下慢的所有语句,到10g下都自动选择了最优的执行计划,速度全快了。50多秒:0.0几秒。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
发表于 2008-4-14 09:46 | 显示全部楼层
原帖由 gaofeixmrs 于 2008-4-10 17:19 发表
关于10g下sql语句执行计划如此神奇的疑问?
前些日子,公司进口图书部新开发的Mis系统上线后,速度特慢,捕捉到最占资源的sql语句,在后台执行该sql同样很慢,排除中间件websphere的问题,初步怀疑是sql语句写的效率不高,所以
系统外包公司的开发人员一段时间里一直再优化sql,但效果不明显,开发人员中没有对oracle优化研究较熟悉的。当时web服务器和db服务器临时在一台windows2003的服务器上运行,有时候发现oracle
的进程占cpu很高,于是决定将web和db分开,当时我准备把我负责的中文联采系统项目的数据库 从9i迁移到10g上,OS 是solaris,10g装好后领导决定先把进口图书的库移过去,移过去后
神奇发生了,同样的sql在9i里执行需要52秒,而在10g里执行只需要0.几秒。Sql语句和在9i和10g里的执行计划见附件,执行计划有很大的差别,语句比较复杂关联了10多张表。而且不光是该sql
原来执行慢的sql全部变得神奇的快了。
因为我不是DBA,学习oracle都是自己的爱好,还没有时间学10g的新特征,想问一下各位高手10g是如何实现sql选择最优的执行计划的?是不是只要装了10g,开发人员写sql时也不用考虑优化的问题了?


这个不可能,只是你碰巧遇上10g下优化比较好,sql语句还是要注意优化问题。

使用道具 举报

回复

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

本版积分规则 发表回复

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