暂无图片
暂无图片
9
暂无图片
暂无图片
暂无图片

浅谈ORACLE数据库优化(1)

3045

性能优化介绍

1.性能计划

  • 增加硬件配置;应用系统设计改善

  • 良好的应用设计可以更好的适应负载变化,而增加硬件在可以暂时缓解,但是持续性差。

2.实例调优

  • 识别性能瓶颈然后采取一定措施去改变或减少瓶颈。

  • 参照的基线包括:事务量,响应时间,数据库统计信息,操作系统统计信息,磁盘统计信息,网络统计信息

  • 症状包括:Slow physical I/O,latch 征用,CPU过载
    调优时机:
    1)事前监控如:主机资源监控工具,数据库诊断工具如EM

    2)消除瓶颈如:修改应用,修改ORACLE参数,调整硬件配置

3.Sql调优

SQL语句的执行依赖于统计信息,准确的统计信息才能找到更适合的执行计划。同样开发和维护人员更了解SQL执行的步骤才能书写出更高效的sql语句。

4.性能优化工具

  • 自动性能调优
    AWR,ADDM,ASH,SQL TUNING ADVISTOR,SQL ACCESS ADVISTOR……etd

  • 数据库附加组件
    V$ Performance views 具体参见文档

设计与开发性能

1.理解投资选择

硬件投资见效快,不可持续;性能应该是设计到系统中。

2.理解系统扩展性

扩展性是系统处理更高负载的能力,如果负载加倍,是否使用加倍的资源就能满足要求?
举例:

1)用户大量增加导致并发量

2)增加大量锁

3)增加操作系统负载

4)数据体量增加导致事务请求时间长

5)BAD SQL和索引导致大量逻辑IO

6)数据对象需要更长时间维护到时可用性减小

7)硬件过载

8)大事务量的扫描导致不必要IO资源短缺

9)过量的网络请求

10)内存分配导致分页或换出

11)过多的进程或线程

应用程序设计阶段就应该考虑系统的扩展性

3.扩展性影响因素

1)应用设计不合理,如不好的对象设计导致BAD SQL

2)不好的事务导致锁问题,不好的连接管理导致响应时间下降

3)硬件选择问题

4)所有的软件都有扩展性和资源使用限制

5)硬件的使用限制

4.系统架构

  • 硬件组件
    CPU,MEMORY,I/O SUBSYSTEM,NETWORK

  • 软件组件
    用户前端程序,业务逻辑核心,用户请求和资源管理,数据库核心

依需求配置更合理的系统架构:

1)流程驱动系统
 
2)多用户驱动系统
例如:
  a.多少用户使用该系统,少量几个,中量,无限制用户

  b.用户在哪,如何交互,网络速度,访问的数据量

  c.是否只读访问,相应时间要求,是否24小时在线,是否允许异步,数据库大小

5.应用设计的原则

  • 简单原则
    表过于复杂,sql过长,重复索引,大量非认证请求
  • 数据模型
    使用数据模型来进行前期设计
  • 表和索引的设计
1)表的设计要在性能和灵活性上折中,适当的添加冗余字段有助于提高性能

2)专注于核心表的设计,非核心的表在日后迭代开发的时候较容易优化

3)索引设计也是一个迭代的过程:
     a.复合索引或索引组织表,相对逻辑读少

     b.不同的索引类型,例如B-TREE\BITMAP\FUNCTION-INDEX\分区索引\反序索引

     c.索引的维护代价也很大,是把双刃剑

     d.索引序列化问题是指使用时间或序列做索引列,这样会造成倾斜,是索引处于非平衡的状态。

     e.索引列的顺序,也同样对索引的效率起到关键影响

  • SQL高效的执行
1)连接管理,因为连接是昂贵的

2)游标的使用和管理,众所周知的硬解析和软解析甚至快速软解析

3)一次解析多次执行是非常好的游标使用方式,绑定变量的使用同样也是影响系统扩展的关键

  • 应用系统的实现方式
1)开发环境,语言或组件的选择不能限制性能
    a.业务逻辑使用JAVA或PL/SQL移植性好;
    b.如果选择第三方软件,不能使用绑定变量和连接管理的,尽量不用2

2)业务逻辑与sql要尽量分开

3)如果条件可以尽量使用缓存技术,select sysdate from dual会增加60%的工作负载

  • 负载的测试与实施
1)索引和表大小的估计,索引的碎片情况存储空间的监控和管理

2)负载的估计和压力测试,压力测试可以较为准确的反应io子系统性能

3)测试与验证应用,使用ADDM、记录所有SQL和执行计划

  • 发布行的应用系统
发布应用可以采用渐进割接或一步到位的割接方式

性能检查项目如下:
     1)控制文件设置

     2)设置最小化的初始化参数,尽量使用DEFAULT设置

     3)合理设置中间件连接池

     4)验证应用的SQL语句正确使用CURSOR

     5)一旦系统成功上线,建议建立基线

性能改善方法

性能优化首先是发现瓶颈,然后依次解决瓶颈,在解决第一个瓶颈的时候性能不一定立刻就得到提升,因为第二个瓶颈的出现也许覆盖了上一次的优化结果。优化是一个迭代的过程不断发现不断修改。如我要在3个小时内完成1,000,000个账户处理;在系统的高峰时间,系统的响应时间不能超过5s;1点种的处理单量在25,000笔等。

  • 通用性能改善
通用步骤如下:

   前提:同用户沟通得到反馈

     1)获得系统全方面的统计数据,操作系统,数据库,中间件

     2)全方位从操作系统角度检查系统相关的硬件信息,是否有错误和诊断

     3)查看系统top10错误,可以使用ADDM查看,选其中相关性高的进一步分析

    4)记录分析查看的内容,找到其中线索进一步分析

    5)提出改进方法,并评估风险对系统的影响,一次做一个动作,然后观察变化

    6)通常系统的宕机时间有限制,有时候需要一次做出多个动作,原则上保证每个动作有隔离性。

    7)检查系统是否达到了预期,关键是用户的感知,否则继续查找另一个瓶颈然后迭代

分析步骤举例:
1)可以使用ADDM作为性能分析的入口

2)可以采用手动方式最后汇总性能问题
      a.在单用户操作的时候,响应时间或批量时间是否满足要求?
      b.CPU使用率使用情况,先查看SYSCPU使用率,然后查看非数据库进程的,最后查看数据库
      c.CPU没有过载话,系统存在串行或不可扩展的等待,找到等待解决

3)Top10 Mistakes	
      a.Bad connections
      b.Bad cursor uses
      c.Bad sql
      d.错误的使用了隐含参数
      e.IO子系统设计缺陷
      f.日志文件过小或过少
      g.使用非ASSM管理表,数据库访问串行
      h.长时间全表扫描
      i.过高的递归SQL
      j.应用系统的发布或迁移,缺少索引或同级信息等

  • 紧急情况性能改善
    数据库从稳定的运行状态转变到用户感知受限的状态,需要DBA介入迅速的分析问题并解决问题。在处理过程中尽量记录诊断信息以备事后继续分析。
    一般步骤:
概述性能问题同时收集相关症状

  1)听取用户反馈

  2)询问是否有新部署或外部环境发生变化

  3)使用自动诊断管理

  4)全面检查硬件层面的指标,磁盘,内存,cpu,网络,最后是应用系统

  5)判断是CPU问题还是等待时间问题

       a.是否会话数达到操作系统限制
       b.相应的活动回话是否执行了过多的逻辑读
       c.SQL语句执行计划是否选择了一个非最优的
       d.初始化参数设置错误
       e.部署了新应用造成的问题

   6)在实施处理方法的时候,可能包括应用重启或限制应用请求等方法

   7)检查系统是否趋于稳定,然后根据上述的优化步奏对系统做进一步分析。

数据库等待问题,根据oracle OWI进行进一步诊断,具体参照ORACLE 手册

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论