`
吃猫的鱼
  • 浏览: 43951 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Oracle 性能优化小技巧

阅读更多
1.选用适合的ORACLE优化器
  ORACLE的优化器共有3种:
    1.RULE(基于规则) 2.COST(基于成本) 3.CHOOSE(选择性)
    设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖。
    为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。
    如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器。
    在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。

2.访问Table的方式
    ORACLE 采用两种访问表中记录的方式:
    1.全表扫描
    全表扫描就是顺序地访问表中每条记录。 ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。

    2.通过ROWID访问表
    你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息……ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。

    3.共享SQL语句
    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径。 ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用。

    可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。
    数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。
    当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。
    这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。

    共享的语句必须满足三个条件:

    A.字符级的比较:
    当前被执行的语句和共享池中的语句必须完全相同。 例如:
    SELECT * FROM EMP;
    和下列每一个都不同
    SELECT * from EMP;
    Select * From Emp;
    SELECT * FROM EMP;

    B.两个语句所指的对象必须完全相同,例如:

         用户             对象名           如何访问
   Jack sal_limit     private        synonym
     Work_city        public         synonym
    Plant_detail      public         synonym
   Jill sal_limit     private        synonym
     Work_city        public         synonym
     Plant_detail     table          owner
   考虑一下下列SQL语句能否在这两个用户之间共享。
  SQL 能否共享 原因
  select max(sal_cap) from sal_limit; 不能 每个用户都有一个private synonym - sal_limit , 它们是不同的对象
  select count(*0 from work_city where sdesc like 'NEW%'; 能 两个用户访问相同的对象public synonym - work_city
  select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id 不能 用户jack 通过private synonym访问plant_detail 而jill 是表的所有者,对象不同

    C.两个SQL语句中必须使用相同的名字的绑定变量(bind variables) ,例如:
    第一组的两个SQL语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值)
    a. select pin , name from people where pin = :blk1.pin;
        select pin , name from people where pin = :blk1.pin;

    b. select pin , name from people where pin = :blk1.ot_ind;
        select pin , name from people where pin = :blk1.ov_ind;


分享到:
评论

相关推荐

    Oracle优化日记:一个金牌DBA的故事 白鳝.扫描版

    全局热块冲突优化小技巧 PL/SQL中数据类型的性能5月23日 实时ODS今日点评优化小技巧 ODS系统中Oracle数据库设计管理要点优化小技巧 ODS系统中的开发要点优化小技巧 集合类型的效率5月24日 任务提前今日点评优化小...

    ORACLE9i_优化设计与系统调整

    §5.1 理解ORACLE性能优化 82 §5.1.1 响应时间与吞吐量的折衷 82 §5.1.2 临界资源 83 §5.1.3 过度请求的影响 83 §5.1.4 调整以解决问题 83 §5.2 优化的执行者 84 §5.3 设置性能目标 84 第7章 系统优化方法 85 ...

    Oracle优化日记:一个金牌DBA的故事.pdf

    在日记之间,作者还穿插了优化小技巧、每日点评等,总结了数据库优化常用的方法、工具和技巧。另外《Oracle优化日记:一个金牌DBA的故事》第一次详尽地披露了Oracle数据库内部存储结构,并公布了部分代码,对于有兴趣...

    Oracle数据库性能优化技术开发者网络Oracle

    正在看的ORACLE教程是:Oracle数据库性能优化技术开发者网络Oracle。介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 ...

    Oracle数据库学习指南

    10.ORACLE性能调整1 11.ORACLE性能调整2 12.Oracle专家调优秘密 13.PL_SQL单行函数和组函数详解 14.PL-SQL 15.PLSQL异常处理初步 16.SQL语句性能调整原则 17.创建和使用分区的表 18.基于成本的优化...

    Oracle数据库管理员技术指南

    9.1 新的性能优化特性 9.1.1 设计的稳定性和存储概要 9.1.2 排序改进 9.1.3 实体化视图 9.1.4 利用 DBMS_STATS 收集性能统计 数据 9.2 新索引类型 9.2.1 基于函数的索引 9.2.2 反向键索引 9.2.3 降序索引 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    weblogic平台J2EE调优策略

    3.1.1 Oracle性能优化 3.1.2 Oracle的其他调整 第四章 操作系统调优 4.1 操作系统调整 4.1.1 HP-UX 4.1.2 Solaris 4.1.3 AIX 4.1.4 Linux 4.1.5 Windows 第五章 性能监控和性能分析 5.1 性能瓶颈 5.2 操作系统监控 ...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    1.6 Nginx性能优化技巧 1.6.1 编译安装过程优化 1.6.2 利用TCMalloc优化Nginx的性能 1.6.3 Nginx内核参数优化 1.7 实战Nginx与PHP(FastCGI)的安装、配置与优化 1.7.1 什么是 FastCGI 1.7.2 Nginx+...

    oracle数据库dba管理手册

    8.9.2 Oracle性能管理器选项 227 8.10 调整方案 229 第9章 数据库安全与审计 231 9.1 安全性能 231 9.1.1 帐户安全性 231 9.1.2 对象权限 231 9.1.3 系统级角色和权限 232 9.2 实现安全性 232 9.2.1 操作系统安全性 ...

    ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享

    UPDATE 1、先备份数据(安全、提高性能)。2、分批更新,小批量提交,防止锁表。3、如果被更新的自动有索引,更新的数据量很大,先取消索引,再重新创建。4、全表数据更新,如果表非常大,建议以创建新表的形式替代...

    Oracle8i_9i数据库基础

    §8.3.3 优化文本索引 199 §8.4 关于维数(DIMENSION) 199 §8.4.1 CREATE DIMENSION语法 200 §8.4.2 创建维的例子 201 第九章 安全管理 203 §9.1 CREATE USER 命令 203 §9.2 建立用户 204 §9.2.1 外部验证...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    第二部分 故障诊断与性能优化篇 第3章 故障诊断 72 3.1 影响mysql性能的因素 72 3.2 系统性能评估标准 73 3.2.1 影响linux服务器性能的因素 73 3.2.2 系统性能评估指标 74 3.2.3 开源监控和评估工具介绍 76 ...

    SQL Server 数据库优化

    本文以SQL Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出了一些有益的建议。1 数据库设计 要在良好的SQL Server方案中实现最优的性能,最关键的是要有1个很好的数据库设计方案。在实际工作中...

    SQL Server 数据库索引其索引的小技巧

    一、什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用【索引】 索引允许SQL Server在表中查找数据而不需要扫描整个表。 1.1、索引的好处: 当表没有聚集索引时,成为【堆或堆表】 【堆】是一堆未加工的...

    java8集合源码-CheatSheet:是一个编写开发相关文档和示例代码的项目,了解有用。

    参考资料,包括最佳实践、性能优化等。 很棒的开发博客。 国内开发博客合集(仅实名) :pushpin: Android 开源应用程序链接(独立应用程序) :blue_book: 针对用户体验优化的日记应用程序。 一个简单的日历,带有...

    C#编程经验技巧宝典

    85 <br>0130 复制字符串中指定的字符 85 <br>0131 巧截字符串的数字 86 <br>0132 如何存储变长字符串 86 <br>0133 在进行字符串比较时忽略大小写 87 <br>0134 如何去除字符串尾空格 87 ...

Global site tag (gtag.js) - Google Analytics