运行计划之误区,为什么COST非常小,SQL却跑得非常慢?
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/38321477
2014.7.31就晚20:30 My Oracle Support组猫大师在线分享
《运行计划之误区,为什么COST非常小,SQL却跑得非常慢?》
如需了解很多其它请登录站点http://www.jianfengedu.com/Discuz/detail/id/58
+++我给你看个东西。
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 10 | 349 (1)| 00:00:05 |
|* 1 | TABLE ACCESS FULL| T1 | 1 | 10 | 349 (1)| 00:00:05 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_NAME"='00440')
table name:T1
column name:OBJECT_NAME
num_rows:87417
num distinct:48128
num_nulls:797
density:.0000115446779034865
histogram:HEIGHT BALANCED
high_value:4435(D5) -- internal value:354151154089362000000000000000000000
low_value:3030343432(00442) -- internal value:250207940888765000000000000000000000
00400 internal Value : 250207940886347000000000000000000000
ENDPOINT_VALUE ENDPOINT_NUMBER BUCKET_COUNT
-------------------- --------------- ------------
46641 40 1
47796 41 1
A1 49 8
B2 58 9
C3 66 8
D5 75 9
Density = (Bucket_total - Buckets_all_popular_value)/
Bucket_total/(NDV - popular_values.COUNT)
=(75 - 34)/75/(48128 - 4) = .00001136
Sel = .00001136 * (87417 - 797)/87417 * (1 - ((250207940888765000000000000000000000 - 250207940886347000000000000000000000)/
(354151154089362000000000000000000000 - 250207940888765000000000000000000000)))
= .000011256
Card = 87417 * .000011256 = .983965752
这是:col=val and val<low_value and value>2*low_value - high_value
相似这种条件的算法。
high_value:4435(D5) -- internal value:354151154089362000000000000000000000
low_value:3030343432(00442) -- internal value:250207940888765000000000000000000000
00400 internal Value : 250207940886347000000000000000000000
这三个数字是怎么得出来的?
D5在dba_tab_columns里,存成这种:4435, 事实上oracle内部计算用的值是:354151154089362000000000000000000000
Density * A4Nulls * (1 - ((val - low_value)/(high_value - low_value)))这是公式, 有这个公式,是没实用的。
你不会用。
与事实上, 他在告诉你怎么COST,不如说,他是想告诉你。 怎么研究oracle的算法。
事实上就是告诉你, 怎么猜。 里面也有错的。
比方cardinality他都是用ceil()一下, 事实上。oracle多数情况下用round
国内顶级SQL优化课程
8月5号启动QTune系列I CBO内部算法--老猫
http://item.taobao.com/item.htm?spm=a1z10.1.w4004-6565782199.6.1TCjTi&id=40189797849
DSI之系列I CBO内部算法
--2014.8.5启动(14课时。7天课)
¥499/每人
选择率,基数计算公式
-------------------------
1. 单表无直方图
1.1 (col = val)在range内
1.2. (> < <= >= between, 在range内
1.3. out-of range
2. 单表有frequency直方图
2.1 (col = val)在range内
2.2. (> < <= >= between, 在range内
2.3. out-of range
3. 单表有hight balanced直方图
2.1 (col = val)在range内
2.2. (> < <= >= between。 在range内
2.3. out-of range
4. Join选择率计算
成本计算公式:
1. 重要的概念
-----------------
1.1
1.2 Cost计算模型.
1.3 Cost单位.
1.4 单块读的次数(#SRds)
1.5 多块读的次数(#MRds)
1.6 系统统计信息
1.7 Join Selectivity & Cardinality
2. 单表訪问(没有直方图)
------------------
2.1 Cost Model Components
2.2 全表扫描的成本计算
2.3 表的Cardinality和selectivity
3. Index扫描
------------------
3.1 公式:
3.2 通过B*Tree index扫描表
Join
---------
4. Nested Loop
5. Hash Join and Sort Merge Join
重磅推出后继课程
QTune系统II transformaction.
QTune系统III qtune案例实战
QTune系统IV 各种丰富的调优工具
不要4999,仅仅要¥499
边学边送,还赠送多年的心血SQ优化资料!
!
!
———————————————尖峰近期线上沙龙分享活动录制的视频
caibird2005分享主题《数据仓库环境的表拆分、分区表、并行计算 》
链接: http://pan.baidu.com/s/1eVA14
Clojure大师分享主题《rac study from scratch 》
链接: http://pan.baidu.com/s/16FRIm
Jack分享主题《存储的前世今生和未来----存储的若干关键技术和虚拟化》
链接: http://pan.baidu.com/s/1eQrECQe
Dasight博士分享主题《大数据时代的技术发展和对IT人的挑战》
链接: http://pan.baidu.com/s/1bnenDtd
链接: http://pan.baidu.com/s/1sj0fJ5r
guoyJoe分享主题《BBED汇报演出 : UPDATE恢复揭密》
链接: http://pan.baidu.com/s/1i3mlPC5
Dasight博士分享主题《漫谈大数据》
链接: http://pan.baidu.com/s/1mgLrAuG
链接: http://pan.baidu.com/s/1c0hCsSS
杜兴分享主题《MySQL 5.6版本号特性介绍及怎样从MySQL 5.5向MySQL 5.6》
链接: http://pan.baidu.com/s/1eQ5oQp8
东大博士Dasight分享主题《Hadoop与Nosql技术的适用性分析》
链接: http://pan.baidu.com/s/1mg9g3Za
猫大师在线分享《通过一个案例彻底读懂10046 trace--字节级深入破解》
链接: http://pan.baidu.com/s/1pJsfFWv
链接: http://pan.baidu.com/s/1GmLqu
增加VIP就可以免费获得以上分享视频。以及今后的分享都会给出,仅仅要10元会员费,例如以下链接
http://item.taobao.com/item.htm?spm=a1z10.1.w4004-6565782199.2.ul78Pt&id=38629931035
【尖峰线上沙龙技术分享QQ交流群】 252296815
【尖峰线上沙龙技术YY频道】10799487
创造良好的Oracle技术氛围,精心分享各种Oracle学习资源。广集圈内好友,
定期开展公益YY课堂深入学习以及适当线下交流!
运行计划之误区,为什么COST非常小,SQL却跑得非常慢?的更多相关文章
- SQL Server 性能调优 之运行计划(Execution Plan)调优
运行计划中的三种 Join 策略 SQL Server 存在三种 Join 策略:Hash Join,Merge Join,Nested Loop Join. Hash Join:用来处理没有排过序/ ...
- 运行计划中cost计算方法
概念: blevel:二元高度=索引高度-1 clustering_factor:集群因子,通过索引扫面得出的要查询table的blocks数量,clustering_factor接近table的bl ...
- oracle分区表运行计划
分区表有非常多优点,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果. 当然表设计得不好也会适得其反.效果比普通表跟糟糕. 为了更好的使用分区表,这里看一下分区表的运 ...
- 使用hint优化Oracle的运行计划 以及 SQL Tune Advisor的使用
背景: 某表忽然出现查询很缓慢的情况.cost 100+ 秒以上:严重影响生产. 原SQL: explain plan for select * from ( select ID id,RET_NO ...
- 【故障处理141119】一次数据库不繁忙时一条sql语句2个运行计划导致业务超时的故障处理
1,故障描写叙述: 一条select有两个运行计划.在sqlplus中运行选择好的运行计划.仅仅要40毫秒.而在程序中运行选择了差的运行计划,要1分23秒左右,导致前台业务超时报错. 2.故障解决: ...
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.1 运行环境说明 1.1.1 硬软件环境 线程,主频2.2G,10G内存 l 虚拟软 ...
- mysql 运行计划explain具体解释
explain主要是用来获取一个query的运行计划,描写叙述mysql怎样运行查询操作.运行顺序,使用到的索引,以及mysql成功返回结果集须要运行的行数.能够帮助我们分析 select 语句,让我 ...
- Oracle 11g 递归+ exists运行计划的改变
有一个递归查询在10g上执行非常快,但在11g上执行不出来. SQL> select * from v$version; BANNER ----------------------------- ...
- [Oracle] 获取运行计划的各方法总结
总的结论: 一.获取运行计划的6种方法(具体步骤已经在每一个样例的开头凝视部分说明了): 1. explain plan for获取: 2. set autotrace on . 3. stati ...
随机推荐
- java学习之JDBC
之前学习了数据库原理,上学期也学了oracle数据库,我的学习视频上是讲的mysql数据库,其实都差不多,复习了下sql知识,数据库的学习就没有写下来了,就从Java怎么操作数据库开始吧. 因为这年过 ...
- poj 1386 Play on Words(有向图欧拉路+并查集)
题目链接:http://poj.org/problem?id=1386 思路分析:该问题要求判断单词是否能连接成一条直线,转换为图论问题:将单词的首字母和尾字母看做一个点,每个单词描述了一条从首字母指 ...
- Linux-中断和中断处理
1.中断 #中断使得硬件得以发出通知给处理器,本质上是一种电信号 #中断随时能够产生.内核随时会被打断 #不同设备的中断不同,每一个中断都通过一个唯一的数字标识.称为IRQ(中断请求) 2.中断处理程 ...
- 获取图片中的文本--MODI
http://www.aspsnippets.com/Articles/Read-Extract-Text-from-Image-OCR-in-ASPNet-using-C-and-VBNet.asp ...
- UVA 674 Coin Change(dp)
UVA 674 Coin Change 解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...
- BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支( 二分答案 )
直接二分答案然后判断. ----------------------------------------------------------------------------- #include&l ...
- [C++参考]私有成员变量的理解
私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量. 然而,在实现拷贝构造函数和赋值符函数时,在函数里利用对象直接访问了 ...
- 使用PHP搭建自己的MVC框架
一.什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- Laravel 5.1 ACL权限控制 三 之权限准备及实现权限管理
请自动参照到上上篇文章 1.创建控制器 php artisan make:model Permission php artisan make:model Role 2.创建表 php artisan ...
- mysql在linux上的一点操作
1,查看打开端口. show variables like 'port'; 2, 指定ip,用户名,密码 1 grant all privileges on *.* to root@"% ...