当前位置:  数据库>oracle

Oracle SQL tuning 步骤

    来源: 互联网  发布时间:2017-04-25

    本文导语: SQL是的全称是Structured Query Language(结构化查询语言)。SQL是一个在80年代中期被使用的工业标准数据库查询语言。不要把SQL语言与商业化产品如Microsoft SQL server或开源产品MySQL相混淆。所有的使用SQL缩略词的这些都是SQL标准的一部分...

SQL是的全称是Structured Query Language(结构化查询语言)。SQL是一个在80年代中期被使用的工业标准数据库查询语言。不要把SQL语言与商业化产品Microsoft SQL server开源产品MySQL混淆。所有的使用SQL缩略词的这些都是SQL标准的一部分。

更多Oracle相关信息见 专题页面

一、SQL tuning之前的调整
    下面这个粗略的方法能够节省数千小时乏味的SQL tuning,因为一旦调整它将影响数以百计的SQL查询。记住,你必须优先调整它,否则后
    续的优化参数改变或统计信息可能不会有助于你的SQL调整。




Oracle SQL tuning 步骤[图片]
    记住,你应当总是优先考虑系统级别的SQL tuning,否则在SQL tuning之后再进行调整可能会使得你先前调整的SQL功亏一篑。

1、优化系统内核

    首先应当考虑调整磁盘网络I/O子系统(象RAID,DASD带宽,网络等)去最小化I/O时间,网络包的大小以及调度频率。

2、调整优化器统计信息

    应当定期收集和存储优化器的统计信息以便优化器根据数据的分布生成最佳的执行计划。此外,直方图有助于优化表的连接以及为有倾斜的
    where 子句谓词信息做出正确的访问决定。

3、调整优化器参数

    下列优化器参数应当被调整
    optimizer_mode, optimizer_index_caching, optimizer_index_cost_adj

4、优化实例
    下列实例/会话级别参数将影响SQL性能
    db_block_size,db_cache_size, and OS parameters (db_file_multiblock_read_countcpu_count, &c;),

5、使用索引或物化视图调整SQL访问负载
    Oracle 10g之后可以使用SQL Access advisor来为SQL生成索引或物化视图的建议。应当总是使用索引来优化SQL,特别是基于函数的索引。
    Oracle 11g的改进:
    Oracle 11g中新增的SQL Performance Analyzer (SPA)是一个从整体上加快SQL调整的新特性

    通过SPA,一旦创建一个负载(称为SQL tuning set,或者STS),Oracle将根据不同环境情况,使用复杂的预测模块重复的执行工作负载(使
    用回归测试方法),来得到当前负载的最佳SQL执行计划。使用SPA,我们可以预测一个SQL负载基于系统变化造成的影响,以及预测象参数
    调整,系统schema调整,硬件调整,操作调整,Oracle升级之后当前SQL语句响应时间。更多详细的细节请参考:Oracle 11g New Feature

    当运行环境,Oracle实例以及对象被调整之后,更多地关注则是数据库中的性能影响最大的单个单个的SQL语句。下面将针对单个SQL调整给
    出一些常规建议以提高 Oracle 性能。

二、Oracle SQL tuning的目标
    Oracle SQL tuning是一个复杂的课题。Oracle Tuning: The Definitive Reference 这整本书描述了关于SQL tuning的细节。尽管如此,
    为了提高系统系能,Oracle DBA应当遵从下面一些总的指导原则

1、SQL tuning 目标
  
    指导原则
        
            大型表的全表扫描将产生庞大的系统I/O且使得整个数据库性能下降。优化专家首先会评估当前SQL查询所返回的行数。最常见的办
        法是为走全表扫描的大表增加索引。B树索引,位索引,以及基于函数的索引等能够避免全表扫描。有时候,对一些不必要的全表扫
        描通过添加提示的方法来避免全表扫描。

        
            有时候全表扫描是最快的访问方式,管理员应当确保专用的数据缓冲区(keep buffer cache,nk buffer cache)对这些表可用。在
            Oracle 8 以后小表可以被强制缓存到 keep 池。

        
            Oracle 访问对象有时候会有一个以上的索引选择。因此应当检查当前查询对象上的每一个索引以确保Oracle使用了最佳索引。

        
            Oracle 10g的特性之一SQL Access advisor 会给出索引建议以及物化视图的建议。物化视图可以预连接表和预摘要表数据。(译者
            按,即Oracle可以根据特定的更新方式来提前更新物化视图中的数据,而在查询时仅仅查询物化视图即可得到最终所需的统计数据
            结果。物化视图实际上是一张实体表)

    以上这些概括了SQL tuning的目标。然而看是简单,调整起来并不容易,因为这需要对Oracle SQL内部有一个彻底的了解。接下来让我们从
    整体上来认识 Oracle SQL 优化。

2、Oracle SQL 优化器

    Oracle DBA首先要查看的是当前数据库缺省的优化器模式。Oracle初始化参数提供很多基于成本优化的优化器模式以及之前废弃的基于规则
    的优化器模式(或hint)供选择。基于成本的优化器主要依赖于表对象使用analyze命令收集的统计信息。Oracle根据表上的统计信息得以决定
    并为当前的SQL生成最高效的执行计划。需要注意的是在一些场合基于成本优化器可能会做出不正确的决定。基于成本的优化器在不断的改进,
    但是依然有很多场合使用基于规则的优化器能够使得查询更高效。

    在Oracle 10g之前,Oracle 缺省的优化器模式是CHOOSE模式。在该模式下,如果表对象上缺乏统计信息则此时Oracle使用基于规则的优化
    器;如果统计信息存在则使用基于成本的优化器。使用CHOOSE模式存在的隐患即是对一些复杂得查询有些对象上有统计信息,而另一些对象
    缺乏统计信息。

    在Oracle 10g开始,缺省的优化器模式是 ALL_ROWS,这有助于全表扫描优于索引扫描。ALL_ROWS优化器模式被设计成最小化计算资源且有
    助于全表扫描。索引扫描(first_rows_n)增加了额外的I/O开销。但是他们能更快地返回数据。































































Oracle SQL tuning 步骤[图片]
    因此,大多数OLTP系统选择first_rows,first_rows_100 或者 first_rows_10以使得Oracle使用索引扫描来减少读块数量。
Oracle SQL tuning 步骤[图片]
    注意:从Oracle 9i R2开始,Oracle 性能调整指导指出了first_rows 优化器模式已经被废弃,且使用first_rows_n代替

    当仅有一些表包含CBO统计信息,而另一些缺乏统计信息时,Oracle使用基于成本的优化模式来预估其他表在运行时的统计信息(即动态采样
    ),这在很大程度上影响单个查询性能下降。

    总之,Oracle 数据库管理员应当总是将尝试改变优化器模式作为SQL tuning的第一步。Oracle SQL tuning的首要原则是避免可怕的全表扫
    描。一个特性之一是一个非高效的SQL语句为提高查询性能使用所有的索引此仍然为一个失败的SQL语句。

    当然,有些时候使用全表扫描是合适的,尤其是在做聚合操作象sumavg等操作,因为为了获得结果,表上的绝大部分数据行必须被读入到
    缓存。SQL tuning 高手应当合理的评估每一个全表扫描并要核实使用索引能否提高性能。

    在大多数Oracle 系统,SQL语句检索的仅仅是表上数据一个子集。Oracle 优化器会检查使用索引是否会导致更多的I/O。然而,如果构建了
    一个低效的查询,基于成本的优化器难以选择最佳的数据访问路径,转而倾向于使用全表扫描。故Oracle数据库管理员应当总是审查那些走
    全表扫描的SQL语句。

    更多有关全表扫描的问题,以及选择正确的优化模式请 :"Oracle Tuning: The Definitive Reference"















    
 
 

您可能感兴趣的文章:

  • 请问:谁在linux下安装过oracle?详细安装步骤共享一下吧!我有急用。谢谢了!
  • 有人在fedora 10下安装 oracle database 11g,没有呀?提供个安装步骤
  • 上传一个非常详细的Oracle10G在IBMAIX 5L上的安装步骤与大家分享
  • Oracle移动数据文件到新分区步骤分析
  • oracle 创建表空间步骤代码
  • 使用X manager连接oracle数据库的步骤
  • oracle定时备份压缩的实现步骤
  • Linux/UNIX下,C++程序通过那些步骤访问Oracle或者Sybase SQL数据库?
  • oracle scott 解锁步骤
  • oracle单库彻底删除干净的执行步骤
  • oracle SQL解析步骤小结
  • 在oracle数据库里创建自增ID字段的步骤
  • oracle停止数据库后linux完全卸载oracle的详细步骤
  • Oracle与FoxPro两数据库的数据转换步骤
  • oracle 10g 精简版安装步骤分享
  • Oracle数据库的十种重新启动步骤
  • oracle iis7站长之家
  • Oracle中取固定记录数详细步骤
  • 安装Linux与Oracle数据库步骤精讲
  • Oracle 10g表空间创建的完整步骤
  • Oracle SQL tuning 数据库优化步骤分享(图文教程)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,