Oracle Tuning
文章平均质量分 62
linwaterbin
当时明月在,曾照彩云归。
展开
-
用二叉树的后序遍历来看oracle执行计划的执行顺序
我们先用一个小表来,来说明一下,oracle执行计划该注意哪些地方。hr@ORCL> set autotrace traceonlyhr@ORCL> select * from t;模糊比较两条sql的优劣时,建议先查看以下两个值:Cost (%CPU):cpu代价,这个值要代数和。比如,这里是3+3=6consistent gets:这个值一般要多执行几次!让他稳定下来,原创 2012-07-23 00:26:37 · 3188 阅读 · 2 评论 -
深入理解Oracle优化器(2):该不该翻译Carnality?
感觉cardinality翻译成基数很不好,误导科技工程人员! 我觉得最初翻译这词的翻译者就没有理解它本身的意思,所以字典上就会误导很多人 基数给人的感觉是集合的全部,比如说我国人口基数大,有13亿 而cardinality应该是给集合应用某种条件后的输出数 比如条件是月收入在一万以上,那么如果我国有1000万人达到,那么这10原创 2013-02-24 16:00:11 · 2169 阅读 · 0 评论 -
深入理解Oracle索引(7):用实验数据观察从B-tree索引→复合索引→Bitmap索引所消费的CPU和I/O
环境:sys@ORCL> !sqlplus -vSQL*Plus: Release 10.2.0.1.0 - Productionsys@ORCL> !uname -aLinux Think 2.6.18-308.el5xen #1 SMP Fri Jan 27 17:59:00 EST 2012 i686 i686 i386 GNU/Linuxhr@ORCL> conn sh/sh原创 2013-02-24 21:37:23 · 2812 阅读 · 0 评论 -
深入理解Oracle优化器(3):动态采样
动态采样的统计信息不会记录到视图,有时候分析过的表也会参与评估 对CBO有效,因为RBO不需要统计信息,所以动态采样没意义 ㈠ 动态采样的作用 ① 10G开始,RBO彻底退出了历史舞台,CBO依赖的是充分的统计分析信息 但是并不是每个用户都会非常认真、及时地去对每个表做分析原创 2013-02-26 12:25:13 · 2115 阅读 · 0 评论 -
AWR 分析 :独上高楼,望见 AWR 路
Automatic Workload Repository 是 10g 引入的一个重要组件 存贮着近期一段时间内数据库活动状态的详细信息、信息保留默认是7天 AWR 的前身是 Statspack、而 Statspack 是公开源代码的 因此,关于Statspack的资料,还有Statspack的源代码,都是理解AWR的一个有用的辅助 AWR 者、乃 sys原创 2013-04-10 00:57:06 · 6190 阅读 · 0 评论 -
深入理解Oracle索引(8):如何进行索引监控分析和优化
在生产环境、我们会发现: ① 索引表空间 I/O 非常高 ② "db file sequential read" 等待事件也比较高 这种迹象表明、整个数据库系统、索引的读写操作比较多、已经成为系统的主要瓶颈 一般的原因、大抵如下: ① 大量SQL均采用索引 ② DML操作导致索引维护工作量暴增 ③ 频繁DML导致很多索引碎片、增加I/O开销 ④ 索引建原创 2013-04-15 17:57:54 · 5517 阅读 · 0 评论 -
从数据库层面理解:随机 I/O & 顺序 I/O
在谈这俩概念前、先来说说 大I/O vs. 小I/O 通常、我们把 的I/O认为是小I/O、而 >=32KB 的I/O认为是大I/O 了解I/O的大小、影响到后期对缓存、RAID类型、LUN的一些属性的调优 当前大多数数据库使用的都是传统的机械磁盘 因此、整个系统设计要尽可能顺序I/O 避免昂贵的寻道时间和旋转延迟的开销 随机小I/O消原创 2013-05-16 22:41:07 · 9900 阅读 · 0 评论 -
Oracle 技术支持之现场优化的思维路径
性能调优是每个DBA职业生涯中都能遇到的任务 大到世界五百强的核心系统,小到乡镇企业的进销存,几乎都会有要调优的时候 面对形形色色的系统,林林总总的需求,调优的手段也是丰富多彩 定位问题,分析问题,解决问题环环相扣,缺一不可,且又手段多样,效果也各有千秋 确定基线是沟通过程中的第一大任务原创 2013-05-05 23:55:17 · 1977 阅读 · 0 评论 -
深入理解Oracle索引(14):Composite Index 两大原理解析
声明:虽然题目是Oracle、但同样适合MySQL InnoDB索引 在大多数情况下、复合索引比单字段索引好 很多系统就是靠新建一些合适的复合索引、使效率大幅度提高 复合索引比单字段索引复杂、有两个原则需把握:前缀性和可选性 但是、可叹的是、国内很多IT系统开发人员没有意识到应该优先设计复合索引 更没有充分理解复合索引的前缀性和可选性这两个重要原则原创 2013-05-21 12:35:25 · 4994 阅读 · 0 评论 -
Oracle Tuning Log File Sync 等待事件的几种策略
在一个频繁 commit/rollback 或磁盘 I/O 有问题、大量物理读写争用 那么、我们便会经常瞧见 LOG FILE SYNC 等待事件出现在 TOP EVENTS 中 评估 LOG FILE SYNC等待事件的指标是平均等待时间、以及 AWR 后续的 WAIT EVENT HISTOGRAM 对于 OLTP、平均等待时间 7 ms算正常、正常情况下平均等待时间不会超过原创 2013-05-09 15:40:34 · 2886 阅读 · 2 评论 -
Statspack 报告的分析经验
不需要通读、有重点地看、看以下 10 点: ① Load Profile ② Instance Efficiency Percentages ③ Top 5 Wait Events ④ SQL ordered by Gets ⑤ SQL ordered by Reads ⑥ Tablespace IO Stats ⑦ Enqueue原创 2013-06-14 20:25:08 · 1891 阅读 · 0 评论 -
Oracle 开发人员分析SQL 执行计划的关注点
繁琐复杂的执行计划、可能迷了开发人员的眼、导致一条性感又傻X的SQL 在服务器上跑得特欢乐 有介于此、重点抓住几个部分、至于其他的嘛、当然是、非礼勿视咯、、 ㈠ 返回行的数量 Oracle优化器是基于成本的、评估成本的一个主要指标便是查询多少行 一般的、返回值在100W或者大表返回值超过总记录50%、可优化的空间原创 2013-06-21 00:57:29 · 3042 阅读 · 2 评论 -
Oracle SQL引擎体系结构图
当一条SQL提交到Oracle后、SQL引擎会分三个步骤对其处理和执行: ① Parse(解析) ② Execute(执行) ③ Fetch(获取) 这三个步骤分别由SQL引擎的不同组件来完成、下面偶大概的绘出这张体系结构图: 记住这张图、对以后的优化或许会起到事半功倍的效用 =_=By David Lin2013-06-24G原创 2013-06-24 15:05:45 · 3709 阅读 · 0 评论 -
深入理解Oracle索引(25):一招鲜、吃遍天之单字段索引创建思路
本文较短、不过实用性很好、还是记录之、 ㈠ 先别看SQL语句、看执行计划、挑出走全表扫的表 ㈡ 回头看SQL语句、分析上述表的约束字段有哪些、检查各个约束字段的索引是否存在 ㈢ 选择可选性最高的约束字段建立索引By David Lin2013-07-01Good Luck原创 2013-07-01 15:05:33 · 2712 阅读 · 0 评论 -
PL/SQL批处理语句:BULK COLLECT 和 FORALL对优化的贡献
我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理 这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销 请看下图: 但是,FORALL和BULK COLLECT可以让PL/SQL引擎把多个上下文却换压缩成一个,这使得在PL/SQL中的要处理多行记录的SQL语句执行的花原创 2013-02-15 13:48:48 · 3803 阅读 · 2 评论 -
Oracle直接路径加载--append的深度解析
㈠ 直接路径加载和buffer cache 直接路径插入的数据不经过buffer cache,从PGA直接把数据格式化成Oracle块 然后由普通的Oracle Server Process进程把数据块写入数据文件 因为不经过buffer cache,所以不需要DBWn介入 假如有表a,现要将a中的数据插入表b,在普通的插原创 2013-02-06 22:44:20 · 4446 阅读 · 0 评论 -
浅谈Oracle的高水位线--HWM
高水位是记录段里能容纳数据的上限,高水位存在段里 全表扫先读段头块,而后在段头块里面找到HWM 下面用实验由内而外来理解Oracle的HWM--t表有一条数据hr@ORCL> select * from t; ID NAME---------- ---------- 1 AAAAA--找t段的段头块hr@ORCL> sel原创 2013-02-06 00:32:14 · 3655 阅读 · 0 评论 -
图解oracle 之从客户端到服务端的sql追击
图2 图3 图4 图5 图6 补充图片:原创 2012-07-26 00:25:30 · 4420 阅读 · 2 评论 -
SQL tuning和shared pool结构的关联介绍
影响性能的计算机资源大抵三种:Memory、CPU和I/O。通过调整SGA、PGA充分利用物理MEMORY,通过并行处理充分利用CPU,通过调整I/O分布充分利用硬盘处理力。 server process和PGA是“一条绳上的两个蚂蚱”,故sp还有个雅号叫“用户体验度进程”。SMON主内,负责整理SGA,如空间碎片;PMON负责外交,检测client pr原创 2012-09-22 10:49:24 · 1598 阅读 · 0 评论 -
Oracle SQL编写优化总结《一》
㈠ 选用合适的Oracle 优化器 缺省值: 9i默认是choose 10g默认是all_rows sys@EMREP> show parameter optimizer_mode NAME TYPE VALUE原创 2012-12-04 22:13:25 · 1618 阅读 · 0 评论 -
关注SQL执行计划中的两个比率
环境:sys@ORCL> select * from v$version;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProdPL/SQL Release 10.2原创 2012-12-04 18:03:20 · 1627 阅读 · 0 评论 -
理解物化视图(1)快速建立高效的物化视图的方法
环境:sys@ORCL> select * from v$version where rownum=1;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prodsy原创 2012-12-24 22:34:42 · 1694 阅读 · 0 评论 -
浅析导致数据库性能问题的常见原因
㈠ 不合理的大表全表扫描 详见:点击打开链接 v$session_longops视图记录了超过6秒的所有SQL语句 这其中绝大部是全表扫描的语句! ㈡ 语句共享性不好 常出没在OLTP,由于app没有合理使用绑定变量,导致大量重复的语句Parse,浪费大量的shared pool,使CPU利用率居高不下原创 2012-12-31 15:50:50 · 2342 阅读 · 2 评论 -
侃侃全表扫描
何谓全表扫? 不合理地消耗大量资源的数据访问方式 为啥会有全表扫? 原因大致如下: ① 缺乏索引 ② 索引被抑制 ③ 表连接技术使用不当 ④ 表连接和索引结合不好 ⑤原创 2012-12-31 15:18:08 · 2156 阅读 · 0 评论 -
记一条子查询的SQL优化
表a 中有上百万条记录,且不断有新记录插入。 现在要汇总此表中小于某个时间的记录条数,SQL两种写法如下: 写法一:select count(*)from a where date 写法二:select count(*)from ( select * from a where date < to_date原创 2013-01-06 22:08:14 · 1438 阅读 · 1 评论 -
理清全表扫描和高水位,行预取的关系
以前写过一篇博客,调侃了一下全表扫,今天继续,感觉对全表扫的认识还是不够:侃侃全表扫 ㈠ 全表扫描与HWM 在Table Access Full中,数据库引擎顺次读取表在HWM下的所有数据块 全表扫描可能是不够理想,特别是表包含大量空的或者接近空的块时 很明显,一个块必须先读才能知道它是否包含数据 当表的删除操作原创 2013-02-01 15:24:27 · 2080 阅读 · 0 评论 -
深入理解Oracle调试事件:10046事件详解
之前也写过一篇10046的文章:10046简介 今天,Think想和大家一起共同深入去理解一下Oracle的这些调试事件 10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQL_TRACE" 有效的追踪级别: ① 0级:SQL_TRACE=FASLE ② 1级:SQL_TRACE=TRUE,这是缺省原创 2013-02-02 22:02:55 · 4092 阅读 · 0 评论 -
深入理解Oracle优化器(1):倾斜列(skew)和histograms
㈠ Histograms 柱状图?直方图?其实这俩是一个概念,在这里Think直接用histograms来称呼 histograms可以这么理解就是一个列上数值的大致分布的密度(density)和范围(range) 通俗一些就是CBO用histgrams来更加准确的判断按照某个条件对每一列查询能返回多少记录原创 2013-02-03 11:45:49 · 4861 阅读 · 4 评论 -
深入理解Oracle索引(4):optimizer_index_cost_adj详解
如果哪天你遇到特殊的情况,比如系统数据字典的索引坏了,但是你去没有办法去修改这个索引,因为有些系统内部的东西你是动不了的 你就会说“我要是能绕过这个索引,全部走全表扫描,把库里的数据全部导出来该多好啊” 那么,这个时候,optimizer_index_cost_adj就很有用了 该参数表示全表扫描和索引扫描的原创 2013-02-05 01:01:41 · 5930 阅读 · 0 评论 -
浅析count(1) count(*) count(col)的区别和性能
count(1)和count(*)没有任何区别(执行计划和统计信息),而且都是统计所有行 count(col)统计col列不为空的记录,如果有索引,不管col是否为空,都能走索引,没有索引就无法走 测试 hr@ORCL> select count(1) from t; Executio原创 2013-02-04 15:46:23 · 4078 阅读 · 0 评论 -
复合索引的列顺序判断
复合索引最令人困惑的当属索引列的顺序,不仅依赖于使用该索引的查询,更需考虑排序和分组。前段时候我发了个帖子:where条件顺序和复合索引字段顺序。感兴趣的朋友不妨参与讨论。今天我提个自己的观点。在应用开发阶段,【选择性】是我们首要考虑因素,请看简图:当出现sql性能问题时,你可能需要注意以下几个:1. 随机IO2. 排序(order by)3. 分组(group by or distinct)这时原创 2014-04-27 19:04:44 · 12341 阅读 · 1 评论