Focus On Oracle

Installing, Backup & Recovery, Performance Tuning,
Troubleshooting, Upgrading, Patching

Oracle Engineered System


当前位置: 首页 » 技术文章 » 性能优化

如何做数据库优化

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





  
关键词:optim oracle 

相关文章

基于PDB的Active Data Guard(Oracle 21.7+)
在Oracle数据库中使用REST
OGG from MySQL to Oracle
Oracle数据库容灾之两地三中心实践
低代码开发用Oracle Apex,看这篇就够了
Oracle Database 20c之SQL宏
Java beginner for Oracle DBA
Oracle Database 20c之区块链表
Oracle Database 20c的一些微妙变化
关于Oracle的Sequence,你需要知道的
Oracle数据库优化方面资料
Oracle Database 19c在优化方面有哪些新特性
Top