正德厚生,臻于至善

如何做数据库优化

原文链接:如何做数据库优化

Oracle能优化的地方很多。抛开其他因素,单从DBA的角度来说,个人觉得可以分为以下几个方面进行优化,从各个层面进行优化,进而达到最佳效果。操作系统内核参数优化

 以Linux平台为例,下面的参数设置的大小,
 kernel.shmall =
 kernel.shmmax =
 kernel.shmmni =
 hugepage是否启用
 Solaris中DISM的设置
 Hp-Ux异步IO的设置
 AIX VMM(Virtual Memory Manager)的设置

数据库架构上的优化

  A.通过安装规范(Grid Infrastructure, Database, Dataguard),可以减少很多误操作,方便管理归档、逻辑备份、物理备份等,进而提高工作效率,也可以减少故障率
  B.RAID级别的设置,RAID组的规划,存储Cache的设置,ASM磁盘组的磁盘的大小,LUN的划分等
  C.表空间大小、表空间多少、LOB存储
  D.表是否分区、是否采用压缩、是否有合适的索引、合适的pctfree(减少行连接和行迁移,也可以减少cache buffers chains)、合适的storage减少表碎片
  E.逻辑备份的规划
  F.物理备份的规划
  G.操作系统、数据库监控的规划

一个好的、长期的规划,可以保证数据库运行平稳,方便管理,以及后续的升级、迁移都不是问题

数据库层面最优

 A. 通过分析AWR,我们可以手动指定各个组件的大小
     Oracle推出了AMM,ASMM等SGA自动化管理,但是这些自动化当然也会带来一定的弊端,比如内部资源协调等,这些都需要latch,也会带来CPU的争用
    db_cache_advice参数相关的latch
    simulator lru latch,simulator hash latch
    _library_cache_advice参数相关的latch
    shared pool simulator    
    通过设置_library_cache_advice为false,可以关闭shared pool的建议。使用statistics_level=basic也可以关闭,
    但是不建议调节statistics_level,这也会关闭其他信息的收集
 B. 一些新功能是否启用等
 C. Cursor相关参数
 D. Optimizer相关参数
 E. IO相关参数

客户端层面优化

  A.客户端可能使用的有.NET,Java开发的程序比较多,可以启用连接池,还可以启用statement cache并设置大小,提高软解析的次数
  B.根据情况,还可以适当调整SDU,SEND_BUF_SIZE,RECV_BUF_SIZE

最后一步sql优化

  SQL优化是重中之重,也是最难的一部分,尤其是SQL语句的改写,涉及到业务逻辑。常见的方法
  A.使用合适的统计信息收集的方式
  B.设置表、索引或列的信息
  C.使用profile
  D.通过Hint
  E.使用DBMS_SQLDIAG
  F.使用DBMS_SPM
  G.创建合理的索引
  H.调整业务逻辑,减少执行频率
  I.使用临时表或视图
  J.改写SQL

常用的工具

AWR, ASH, ADDM and Sql Tuning Advisor,SQL Access Advisor,SQLT,SQLHC,ASHV,EM,Grid Control,Cloud Control

赞(0) 打赏
未经允许不得转载:徐万新之路 » 如何做数据库优化

评论 抢沙发

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫

微信扫一扫

登录

找回密码

注册