楼主: jborcl

[原创] 《oracle性能优化内幕》--笔记连载

[复制链接]
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2011-3-31 09:37 | 显示全部楼层
原帖由 gengzhizhen 于 2011-3-31 09:35 发表
是兔子不?

不是,BS LZ和我头像一样,郁闷

使用道具 举报

回复
论坛徽章:
7
2011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:羽毛球
日期:2011-03-31 09:40:352010广州亚运会纪念徽章:卡巴迪
日期:2011-04-26 13:46:28ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:36ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00优秀写手
日期:2013-12-18 09:29:11
 楼主| 发表于 2011-3-31 09:40 | 显示全部楼层

回复 #11 dingjun123 的帖子

大哥,这个纯属巧合!

使用道具 举报

回复
论坛徽章:
16
授权会员
日期:2007-05-21 13:41:442012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB官方微博粉丝徽章
日期:2011-07-04 13:50:162010广州亚运会纪念徽章:射击
日期:2010-11-22 15:43:17ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010广州亚运会纪念徽章:羽毛球
日期:2010-09-11 23:57:412010新春纪念徽章
日期:2010-03-01 11:20:04生肖徽章2007版:猴
日期:2009-11-13 10:56:08生肖徽章2007版:马
日期:2009-09-10 11:26:19生肖徽章2007版:鼠
日期:2009-03-10 21:12:51
发表于 2011-3-31 09:52 | 显示全部楼层
学习ing

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:虎
日期:2009-01-07 17:29:302010广州亚运会纪念徽章:卡巴迪
日期:2011-04-17 16:39:06灰彻蛋
日期:2011-06-18 13:42:50ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51复活蛋
日期:2011-12-27 17:46:382012新春纪念徽章
日期:2012-01-04 11:54:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19
发表于 2011-3-31 10:09 | 显示全部楼层
顶,继续。

使用道具 举报

回复
论坛徽章:
7
2011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:羽毛球
日期:2011-03-31 09:40:352010广州亚运会纪念徽章:卡巴迪
日期:2011-04-26 13:46:28ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:36ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00优秀写手
日期:2013-12-18 09:29:11
 楼主| 发表于 2011-3-31 10:14 | 显示全部楼层

第二部分 应用程序优化

1.索引优化,
选择设计索引,我们要考虑一下其是否适合:
(1).与全表扫描时,索引扫描需要执行多少IO操作
(2).特定表中访问数据最常用的组合是什么
(3).对于给定的索引的列的选择性是什么
(4).where条件中包含的所有列是否都要包含在索引列中,这个需要考察列的属性值,比如对于列的唯一性不是很高,且有空值出现,并不能给查询带来一些好的优化。
(5).索引所处理的表是基于事务还是查询
(6).如果更新表中的数据,需要考虑是批量处理还是事务性处理
索引优化的原则:以更快的方法达到索引的叶子节点。
另外我们往往说到当检索的数据达到表行数据的百分之多少就应该创建索引,其实这个种说法是不准确的,索引内部检索,归根到底是要访问叶子块,如果分布密集,则会提高检索速度,但反之则可能对查询速度没有多大影响。所以使用索引后,我们需要通过一系列的措施去检查它的有效性,如查看执行计划。
2.执行计划:
通过执行计划我们可以完整看到SQL语句的执行情况,包括是否使用索引,内部连接,内部消耗等,查看执行计划的方式有以下几种:
(1). Explain plan for sql statement
通过oracle内部脚本utlxplan.sql脚本创建执行计划内部表plan_table,将执行计划路径结果保存下来,通过select * from table(dbms_xplan.display())查看执行计划。
(2)set autotrace
通过在SQL*PLUS中设置查看执行计划,详细的配置如下:
Set autotrace on:显示结果、执行计划树、统计信息
Set autotrace traceonly:显示执行计划树、统计信息
Set autotrace on explain:显示结果、执行计划树
Set autotrace on statistics:显示结果、统计信息
Set autotrace off:关闭autotrace
(3)通过oracle的OEM工具也可以看到详细的执行计划树状图。
一个良好的的执行计划,需要我们要对对象的进行数据分析。
3.数据分析统计:
(1)analyze
(2)dbms_stats包
关于两种统计分析方法,优缺点如下:
oracle强烈建议使用dbms_stats包进行数据统计,
a) 对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。
b) oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收。
其优点:
a) 可以并行进行,对多个用户,多个Table
b) 可以得到整个分区表的数据和单个分区的数据。
c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
d) 可以倒出统计信息
e) 可以用户自动收集统计信息
其缺点:
a) 不能Validate Structure
b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。
c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True
但是,往往做完这么多,oracle并不一定就能完全提供最优的执行计划,我们还要通过其他途径去解决,如HINT,存储大纲来稳定执行计划。

使用道具 举报

回复
论坛徽章:
7
2011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:羽毛球
日期:2011-03-31 09:40:352010广州亚运会纪念徽章:卡巴迪
日期:2011-04-26 13:46:28ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:36ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00优秀写手
日期:2013-12-18 09:29:11
 楼主| 发表于 2011-3-31 10:26 | 显示全部楼层

回复 #11 dingjun123 的帖子

算了,小弟我还是改了它吧!

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2011-3-31 10:37 | 显示全部楼层
原帖由 jborcl 于 2011-3-31 10:26 发表
算了,小弟我还是改了它吧!

这个头像不错

使用道具 举报

回复
论坛徽章:
7
2011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:羽毛球
日期:2011-03-31 09:40:352010广州亚运会纪念徽章:卡巴迪
日期:2011-04-26 13:46:28ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:36ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00优秀写手
日期:2013-12-18 09:29:11
 楼主| 发表于 2011-4-8 16:22 | 显示全部楼层

第三部分 跟踪不良SQL

1.说明:
SQL_TRACE提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具;在后续版本中增加了10046 event,它是oracle用于系统性能分析时的一个最重要的事件。当激活这个事件后,将通知oracle kernel追踪会话的相关即时信息,并写入到相应trace文件中。这些有用的信息主要包括sql是如何进行解析,绑定变量的使用情况,会话中发生的等待事件等。10046event 可分成不同的级别(level),分别追踪记录不同程度的有用信息。对于这些不同的级别,应当注意的是向下兼容的,即高一级的trace信息包含低于此级的所有信息。

2.SQL_TRACE使用:
(1).跟踪当前会话任务:
A.启动跟踪任务,此时SQL任务将被跟踪:
alter session set sql_trace=true;
B.执行相关查询。
C.关闭trace任务:
Alter session set sql_trace=false;
D.查找trace文件:
select c.value || \'/\' || instance || \'_ora_\' ||
       ltrim(to_char(a.spid,\'fm99999\')) || \'.trc\'
  from v$process a, v$session b, v$parameter c, v$thread c
where a.addr = b.paddr
   and b.audsid = userenv(\'sessionid\')
   and c.name = \'user_dump_dest\'
--USERENV (\'sessionid\'):获取当前session标示符.
E.使用tkprof格式化trace文件:
Tkprof tracefile outputfile(如tkprof vms_ora_12568.trc tracefile_20100929.txt)。

(2).跟踪其它用户:
A.启动跟踪任务,假设我们要监控的用户SID,serial#=23,437,执行如下语句:
Exec dbms_system.set_sql_trace_in_session(23,437,true);
B.执行相会话任务。
C.关闭trace任务:
Exec dbms_system.set_sql_trace_in_session(23,437,false);
D.查找trace文件:
同上。
E.使用tkprof格式化trace文件:
Tkprof tracefile outputfile(如tkprof vms_ora_12568.trc tracefile_20100929.txt)。

3.SQL TRACE加强——10046事件
(1).准备工作,设置系统参数:
表1-3 10046事件参数设置
参数        设置说明
timed_statistics        设置为true,使收集的时间信息存储在V$sessstats和V$sysstats等动态性能视图中,但会消耗资源。完了可以将其设置为false。
max_dump_file_size        为了确保trace文件被完整输出,要设置max_dump_file_size设置为UNLIMITED,或者设置为一个很大的阈值。

(2).10046事件level设置说明:
表1-4 10046事件level设置说明
等级        Level说明
1        启用标准的SQL_TRACE功能,等价于sql_trace
4        Level 1 加上绑定值(bind values)
8        Level 1 + 等待事件跟踪
12        Level 1 + Level 4 + Level 8

(3).在当前会话中设置10046事件:
A.动跟踪任务,此时SQL任务将被跟踪:
alter session set events ‘10046 trace name context forever,level 8’;
B.执行相关查询。
C.关闭trace任务:
alter session set events ‘10046 trace name context off’;
D. 查找trace文件:
同上。
E.使用tkprof格式化trace文件:
Tkprof tracefile outputfile(如tkprof vms_ora_12568.trc tracefile_20100929.txt)。
(4).监控其他用户10046事件:
A.启动跟踪任务,假设我们要监控的用户wjb的SID,serial#=23,437,执行如下语句:
Exec dbms_system.set_ev(23,437,10046,8,’wjb’);
B.执行相会话任务。
C.关闭10046任务:
Exec dbms_system.set_ev(23,437,10046,8,’wjb’);
D.查找trace文件:
同上。
E.使用tkprof格式化trace文件:
Tkprof tracefile outputfile(如tkprof vms_ora_12568.trc tracefile_20100929.txt)。

使用道具 举报

回复
论坛徽章:
10
2010年世界杯参赛球队:希腊
日期:2010-01-28 19:42:19ITPUB官方微博粉丝徽章
日期:2012-01-06 13:45:252012新春纪念徽章
日期:2012-01-04 11:55:42ITPUB十周年纪念徽章
日期:2011-11-01 16:25:222011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-04 10:34:492010广州亚运会纪念徽章:板球
日期:2010-12-08 13:32:37ITPUB9周年纪念徽章
日期:2010-10-08 09:32:262010年世界杯参赛球队:科特迪瓦
日期:2010-02-12 10:17:342012新春纪念徽章
日期:2012-02-07 09:59:35
发表于 2011-4-8 16:39 | 显示全部楼层
幺西....

学习了...

使用道具 举报

回复
论坛徽章:
2
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29宝马
日期:2014-02-18 13:45:05
发表于 2011-9-19 11:41 | 显示全部楼层
很有用,多谢多谢~

使用道具 举报

回复

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

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


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