Oracle SQL性能调整注意事项
1、不要认为将optimizer_mode参数设为rule,就认为所有的语句都使用基于规则的优化器。不管optimizer_mode参数如何设置,只要满足下面3个条件,就一定使用CBO。
1) 如果使用Index Only Tables(IOTs), 自动使用CBO.
2) Oracle 7.3以后,如果表上的Paralle degree option设为>1,则自动使用CBO, 而不管是否用rule hints.
3) 除rlue以外的任何hints都将导致自动使用CBO来执行语句
总结一下,一个语句在运行时到底使用何种优化器可以从下面的表格中识别出来,从上到下看你的语句到底是否满足description列中描述的条件:
Description 对象是否被分析 优化器的类型
~~~~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~
Non-RBO Object (Eg:IOT) n/a #1
Parallelism > 1 n/a #1
RULE hint n/a RULE
ALL_ROWS hint n/a ALL_ROWS
FIRST_ROWS hint n/a FIRST_ROWS
*Other Hint n/a #1
OPTIMIZER_GOAL=RULE n/a RULE
OPTIMIZER_GOAL=ALL_ROWS n/a ALL_ROWS
OPTIMIZER_GOAL=FIRST_ROWS n/a FIRST_ROWS
OPTIMIZER_GOAL=CHOOSE NO RULE
OPTIMIZER_GOAL=CHOOSE YES ALL_ROWS
#1 表示除非OPTIMIZER_GOAL 被设置为FIRST_ROWS ,否则将使用ALL_ROWS。在PL/SQL中,则一直是使用ALL_ROWS
*Other Hint 表示是指除RULE、ALL_ROWS 和FIRST_ROWS以外的其它提示
2、当CBO选择了一个次优化的执行计划时,不要同CBO过意不去,先采取如下措施:
a) 检查是否在表与索引上又最新的统计数据
b) 对所有的数据进行分析,而不是只分析一部分数据
c) 检查是否引用的数据字典表,在oracle 10G之前,缺省情况下是不对数据字典表进行分析的。
d) 试试RBO优化器,看语句执行的效率如何,有时RBO能比CBO产生的更好的执行计划
e) 如果还不行,跟踪该语句的执行,生成trace信息,然后用tkprof格式化trace信息,这样可以得到全面的供优化的信息。
3、假如利用附录的方法对另一个会话进行trace,则该会话应该为专用连接
4、不要认为绑定变量(bind variables)的缺点只有书写麻烦,而优点多多,实际上使用绑定变量虽然避免了重复parse,但是它导致优化器不能使用数据库中的列统计,从而选择了较差的执行计划。而使用硬编码的SQL则可以使用列统计。当然随着CBO功能的越来越强,这种情况会得到改善。目前就已经实现了在第一次运行绑定变量的sql语句时,考虑列统计。
5、如果一个row source 超过10000行数据,则可以被认为大row source
6、有(+)的表不是driving table,注意:如果有外联接,而且order hint指定的顺序与外联结决定的顺序冲突,则忽略order hint
7、影响CBO选择execution plan的初始化参数:
这些参数会影响cost值
ALWAYS_ANTI_JOIN
B_TREE_BITMAP_PLANS
COMPLEX_VIEW_MERGING
DB_FILE_MULTIBLOCK_READ_COUNT
FAST_FULL_SCAN_ENABLED
HASH_AREA_SIZE
HASH_JOIN_ENABLED
HASH_MULTIBLOCK_IO_COUNT
OPTIMIZER_FEATURES_ENABLE
OPTIMIZER_INDEX_CACHING
OPTIMIZER_INDEX_COST_ADJ
OPTIMIZER_MODE> / GOAL
OPTIMIZER_PERCENT_PARALLEL
OPTIMIZER_SEARCH_LIMIT
PARTITION_VIEW_ENABLED
PUSH_JOIN_PREDICATE
SORT_AREA_SIZE
SORT_DIRECT_WRITES
SORT_WRITE_BUFFER_SIZE
STAR_TRANSFORMATION_ENABLED
V733_PLANS_ENABLED
CURSOR_SHARING
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html
转载于:https://blog.51cto.com/19880614/1306077
Oracle SQL性能调整注意事项相关推荐
- oracle in 特征值,Oracle 深入分析性能调整的四个误区
Oracle 深入分析性能调整的四个误区 发布时间:2006-07-05 09:13:06来源:红联作者:Vs 为了提高性能,我们针对Oracle数据库本身提供了的方法或方案进行过不少的尝试,主要包括 ...
- oracle性能优化求生...,Oracle,SQL性能优化之探究|《oracle性能优化求生指南》
摘 要 在数据库应用中,根据用户提交的查询请求,如何才能精炼又高效地得到查询结果?从多个角度描述怎样优化SQL语句.实验结果表明,SQL优化能够减轻系统资源的占用,满足用户的要求. 关键词 SQL优化 ...
- Oracle SQL性能优化的40条军规
Oracle SQL性能优化的40条军规 1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 & ...
- oracle 性能优化培训,ORACLE SQL性能优化(内部培训资料)
ORACLE SQL性能优化系列 (一) 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) ...
- ORACLE SQL性能优化系列 (一) black_snai
2019独角兽企业重金招聘Python工程师标准>>> ORACLE SQL性能优化系列 (一) 原创 2003年07月21日 18:34:00 标签: oracle / sql / ...
- ORACLE+SQL性能优化
1. 访问Table的方式 ORACLE 采用两种访问表中记录的方式: a. 全表扫描 全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方 ...
- Oracle SQL性能调优之 -降龙十八掌
1 前言- 2 2 总纲- 2 3 降龙十八掌- 3 第一掌 避免对列的操作- 3 第二掌 避免不必要的类型转换- 4 第三掌 增加查询的范围限制- 4 第四掌 尽 ...
- Oracle SQL性能优化40条,值得收藏
1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 >选择数据的搜索路径 >运行&q ...
- Oracle SQL 性能优化规范
SQL 优化总览 1.1.优化中心思想 SQL 优化的中心思想有两点: 1. 少做甚至不做. 少做事情,甚至对不必要的事情干脆不做,自然就能使 SQL 提高效率. 使用索引来减少数据扫描就是少做事思想 ...
- oracle+执行变量语句,ORACLE sql 语句的执行过程(SQL性能调整)
第1章 SQL语句处理的过程 在调整之前我们需要了解一些背景知识,只有知道这些背景知识,我们才能更好的去调整sql语句. 本节介绍了SQL语句处理的基本过程,主要包括: · 查询语句处理 · DML语 ...
最新文章
- JBPM6教程-10分钟玩转JBPM工作台
- 解决Android emulator PANIC: Missing emulator engine program for ‘x86‘ CPU.
- Create a PCL visualizer in Qt with QtDesigner
- centos MySQL 双机_CentOS利用Keepalived构建双主MySQL+双机热备
- 基于安卓手机的辅助驾驶APP开发
- TFRecords文件的存储与读取
- jxl读取html格式excel,基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)...
- mysql 多行唯一_mysql – 具有唯一约束的原子多行更新
- VB 一行代码的诀窍
- 控件内部显示不正确原因---没有调用layoutSubview的父类方法
- 自由空间模型损耗计算详细说明
- vc2010以及VS2019安装使用教程
- c语言编译器代码及翻译,在线C语言编译器/解释器
- 雪球网 json 获取
- ups监控软件测试表格,ups检测报告单完整版.docx
- 方钢管弹性模量计算方式_方管的强度计算公式
- 如何升级win10.
- #3,Android Studio Android开发APP的开发语言和APP连接的数据库 总结
- pvt检查是什么意思_EVT、DVT、PVT是什么意思
- 手串 如何挑选手串 什么是小叶紫檀?小叶紫檀怎么保养 小叶紫檀怎么盘法
热门文章
- vmware player 坑
- 线程相关函数(1)-pthread_create(), pthread_join(), pthread_exit(), pthread_cancel() 创建取消线程
- Android WiFi 扫描并选择网络进行连接
- “Ceph浅析”系列之二——Ceph概况
- arm汇编指令之数据块传输(LDM,STM)详见
- 把自定义的demuxer加入ffmpeg源码
- Convert Sorted Array to Binary Search Tree(将有序数组转为二叉搜索树)
- 【紫书第五章】String、结构体、部分STL的常见用法
- springboot集成kafka_厉害!腾讯T3-2都还在学的微服务+MySQL+Kafka+boot2.x+虚拟机PDF
- c语言选题分析,c语言方面毕业设计选题.doc