oracle数据库调优培训-初级篇.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
oracle数据库调优培训-初级篇.ppt

Oracle调优培训-初级篇 数据库性能调优—初级篇 数据库项目失败的原因 在构建前端所用的GUI工具或语言(如Java)方面,开发人员得到了充分的培训。在很多情况下,他们会有数周甚至数月的培训。 开发人员没有进行过数据库培训,多数人都没有数据库经验,所以并未理解如何使用核心的数据库构造(如各种可用的索引和表结构)。 开发人员力图谨守“数据库独立性”这一原则,但是出于许多原因,他们可能做不到。最明显的一个原因是:他们对于数据库没有足够的了解,也不清楚这些数据库可能有什么区别。这样一个开发小组无法知道要避开数据库的哪些特性才能保证数据库独立性。 开发人员遇到大量性能问题、数据完整性问题、挂起问题等(但这些应用的界面往往很漂亮)。 总 纲 建立必要的索引。 看这些索引是否对我们的数据库性能有所帮助 方法 必须熟悉数据库应用程序中的所有SQL语句,从中统计出常用的可能对性能有影响的部分SQL,分析、归纳出作为Where条件子句的字段及其组合方式;在这一基础上可以初步判断出哪些表的哪些字段应该建立索引。 必须熟悉应用程序。必须了解哪些表是数据操作频繁的表;哪些表经常与其他表进行连接;哪些表中的数据量可能很大;对于数据量大的表,其中各个字段的数据分布情况如何 建立索引常用的规则 (一) 表的主键、外键必须有索引 ; 数据量超过500的表应该有索引; 经常与其他表进行连接的表,在连接字段上应该建立索引; 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 索引应该建在选择性高的字段上; 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 频繁进行数据操作的表,不要建立太多的索引; 删除无用的索引,避免对执行计划造成负面影响; 建立索引常用的规则 (二) ——复合索引 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: 正确选择复合索引中的主列字段,一般是选择性较好的字段; 复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引; 如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引; 如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段; 如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引; 索引使用、理解误区 并不是每个表都需要建立索引。 增加索引会增加系统存储开销。 在单字段索引存在的前提下,复合索引是没有存在价值的。 太多的索引和无意义的索引对系统毫无益处。 索引对表的增、删、改性能上有负作用,特别是频繁操作的表和字段。 在OLTP中要使用绑定变量 不良的写法: select * from basetab where msisdn= select * from basetab where msisdn= 正确的写法: select * from basetab where msisdn=:1 在jdbc中使用preparedstatement 两种方式速度相差5倍以上! 绑定变量例子 不要频繁的commit 不正确的方法: insert into basetab values(….); commit; insert into basetab values(….); commit; …. 正确的方法: insert into basetab values(….); insert into basetab values(….); commit; 禁止在jdbc中使用AutoCommit 尽量用sqlload工具做话单入库 不需要用C++或JAVA程序写入库的应用 sqlload举例 sqlldr user/passwd control=user.ctl direct=y controlfile的例子 LOAD DATA? INFILE dept.dat? INTO TABLE DEPT? REPLACE? FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY ? (DEPTNO,? DNAME,? LOC? )? 尽量使用一个sql处理 需求:从表中选择满足要求的记录插入表另一个表中。 不正确的方式: 用plsql写一个cursor,一条条从源表中读记录插入到目标表中。 正确的方式: Insert into othertab select * from orgtab where cond0 尽量使用一个sql处理 如果可能,尽量利用一条SQL语句完成工作。 如果无法用一条SQL语句完成,就通过PL/S

文档评论(0)

暖洋洋 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档