12
返回列表 发新帖
楼主: blackzhang

执行计划相同,表大小相同,但执行速度差3倍

[复制链接]
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
11#
发表于 2010-11-25 10:53 | 只看该作者
原帖由 zergduan 于 2010-11-18 14:54 发表


...

肯定不一样,set timing on 是在client记录时间,是从client发送命令,到最后结果在client上列印完成的时间差

这个时间包含了太多的东西,如果你相对比一个sql在两个数据库上的运行时间,绝对不应该看client上的时间。

比如对于同一个client,联接两个不同数据库的网络延时不同,怎么能从set timing on来判断到底哪个数据库性能好呢?

不一样是当然的,我说没有本质的区别,是说在楼主这个例子包含正常网络延时等的情况下,结果与后台看到的结果区别应该不会很大
当然,直接去看trace更准确
绝对不能看client上的时间就太绝对了,在很清楚其他影响所造成的影响不影响判断的情况下,有什么不可以的

[ 本帖最后由 anlinew 于 2010-11-25 10:59 编辑 ]

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
12#
发表于 2010-11-25 11:05 | 只看该作者
原帖由 Yong Huang 于 2010-11-19 10:12 发表
blackzhang,

As many of us have often suggested, look at buffer gets or consistent gets. If you really want to look at elapsed time, run
alter system flush buffer_cache; --from 10g on; you didn't tell us your version
and then check the timing.

Also, make sure the table is big enough to get the elapsed time up to at least a few seconds. Anything below 1 second contains too much error due to unknown factors.

Yong Huang

楼主贴出的信息能看到consistent gets是相同的,都没有physical reads
因此时间的差别应该主要在cpu time和network上

如果 flush buffer_cache,这个时候时间估计更多的会在physical reads也就是IO上,与原本的意义差别就太大了

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
13#
发表于 2010-11-25 11:42 | 只看该作者
原帖由 anlinew 于 2010-11-25 10:53 发表

不一样是当然的,我说没有本质的区别,是说在楼主这个例子包含正常网络延时等的情况下,结果与后台看到的结果区别应该不会很大
当然,直接去看trace更准确
绝对不能看client上的时间就太绝对了,在很清楚其他影响所造成的影响不影响判断的情况下,有什么不可以的


是这样,我没有针对lz的问题,我只是说从client或者autotrace看执行时间是不对的~
这里还包含了一个非常重要的误差,就是屏幕列印的时间, client上的timing on 是包含列印时间的。 你无法保证多台机器在列印相同内容的时候使用的时间是相同的,甚至不能保证同一台每次列印相同的内容所用的时间是相同的。
当然这些时间大部分可以忽略,但是就像Huang版说的,这里的时间差不到1s,那么这些误差都不能忽略的~

既然要得到SQL在数据库上运行的时间,当然是在数据库上用trace才能得到准确的时间,而不能依靠屏幕上的显示~

[ 本帖最后由 zergduan 于 2010-11-25 11:44 编辑 ]

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
14#
发表于 2010-11-25 11:43 | 只看该作者
原帖由 anlinew 于 2010-11-25 11:05 发表

楼主贴出的信息能看到consistent gets是相同的,都没有physical reads
因此时间的差别应该主要在cpu time和network上

如果 flush buffer_cache,这个时候时间估计更多的会在physical reads也就是IO上,与原本的意义差别就太大了

这个我同意~

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
15#
发表于 2010-11-25 11:55 | 只看该作者
原帖由 zergduan 于 2010-11-25 11:42 发表


是这样,我没有针对lz的问题,我只是说从client或者autotrace看执行时间是不对的~
这里还包含了一个非常重要的误差,就是屏幕列印的时间, client上的timing on 是包含列印时间的。 你无法保证多台机器在列印相同内容的时候使用的时间是相同的,甚至不能保证同一台每次列印相同的内容所用的时间是相同的。
当然这些时间大部分可以忽略,但是就像Huang版说的,这里的时间差不到1s,那么这些误差都不能忽略的~

既然要得到SQL在数据库上运行的时间,当然是在数据库上用trace才能得到准确的时间,而不能依靠屏幕上的显示~

楼主这个的确很不准确
列印时间,show plan带来递归的其他sql执行的时间,网络交互等等

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
16#
发表于 2010-11-25 13:04 | 只看该作者
I know he already showed consistent gets, but he seems to ignore it and focus on the elapsed time as viewed on the client side. Two issues here. The two client-side elapsed times are too close to each other, prone to errors of various sources. They need to be magnified for performance measurement. If he doesn't want to increase table size (actually the index size here), he can use PL/SQL to loop many times. In addition, repeated tests in random order of the two are needed to check reproducibility.

Secondly, if elapsed time is really important, server-side v$sql.elapsed_time should be checked, preferably combined with reference to cpu_time, to judge efficiency.

Yong Huang

使用道具 举报

回复

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

本版积分规则 发表回复

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