性能优化之写在前面
-
不是所有的数据库都需要(能够)优化
-
数据库库的性能,大多数都不是从数据库层面能够解决的
-
在不了解业务之前,不可能找到正确的优化思路
-
优化要有一个度,要适可而止
性能优化的原则
先尽可能从小范围分析问题
- SQL层
- 如果能定位到SQL,就不要从会话层面分析
- 工具:执行计划,10053,10046
- 会话层
- 如果能定位到会话层,就不要从系统层面分析
- 工具:V$SESSION,V$SESSTAT,V$SESSION_WAIT,V$SQL,V$LOCK,SQL_TRAC
- 系统层
- 如果无法定位任何性能问题,那么就得从系统层面入手
- 工具:AWR(Statspack), OS Tuning Tools (IOSTAT,VMSTAT,TOP)
Oracle调优的合理步骤:
- 通过调整SQL、PL/SQL以及优化物理设计(分区、索引等)尽可能减少应用的请求
-
调整索引、创建分区、反规范化
-
找出 Top SQL 优化 单条SQL,并行SQL,PL/SQL代码
-
- 通过减少对锁、Latch、缓存以及Oracle代码层级中其他资源的争用来获得最好的并发能力。
-
在Oracle中,因为并发,存在资源争用。
-
表内记录的争用(通常表现为锁Enqueue等待);
-
共享内存区域的争用(表现为闩锁Latch等待,内存缓冲区等诸多等待)
-
-
- 在前两步规范化逻辑IO需求的基础上,通过优化Oracle内存来最小化物理IO的需求
-
确保Oracle能从操作系统得到足够内存
-
确保内存在SGA和PGA的合理分配。在Oracle11g中,启用自动内存管理(Automatic Memory Management)
-
在特定的内存区域中对段的分配作出微调
-
对控制排序和连接的参数作出微调
-
监控Oracle内存分配
-
- 如果到现在为止还无法满足物理IO的需求,就得通过提供足够的IO带宽并均匀分布系统负载来配置IO子系统以满足物理IO需求
-
确定IO子系统有足够的带宽来处理物理IO请求。主要影响因素是磁盘的数量,而非磁盘的存储空间。不同的磁盘性能差异较大,但每秒基本上能处理100次随机IO
- 在配置的所有磁盘上均匀的分布负载。RAID0(条带化)是最好的方式
-
Oracle调优的具体技术手段:
链接1: