原文链接:如何做数据库优化
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
最新评论
这个牛
放下欲望,男人从来不醉,充分且必要
勇气、责任、自信、创新,为天下先!
软件即数据,软件即服务,软件即管理,软件就是对人类各种社会活动的仿真和记录。软件很重要,但软件不可能凌驾于业务之上,尤其不可能高人一等。