Monthly Archives: April 2013
Oracle Performance Survival Guide读取笔记–第21章 磁盘IO调优基础
磁盘性能指标 标服务时间:从磁盘获取单个条目消耗的时间,等于寻道时间+旋转时间+传输延时 吞吐量:给定时间内磁盘能由完成的IO数量,通常用IOPS表示。随机读的时候,IOPS由寻道时间和旋转时间共同决定;当IO是连续的时候,主要由旋转时间决定。 过去20年中,磁盘容量增长了20倍,但是服务时间基本没有变化,因此每兆数据的平均IO比以前少。 磁盘数据分布:尽可能保持磁盘半满状态,数据保存在外圈的1/3磁道,可以显著减少寻道时间。 监控Oracle的IO IO等待次数:使用V$YSTEM_EVENT,限制WAIT_CLASS IN (‘User IO”, ‘System IO’) Oracle 11g中,使用V$IOSTAT_FILE可以查看各类文件(Data Fiel,Control File等)的IO等待,V$IOSTAT_FUNCTION可以查看各种进程(LGWR,DBWR等)的IO等待 文件IO:11g中使用V$IOSTAT_FILE,10g使用V$FILESTAT UNION V$TEMPSTAT,更具体的数据查看V$FILEMETRIC和V$FILE_HISTGRAM IO基准测试:11g中提供了DBMS_RESOURCE_MANAGER.CALIBRATE_IO测试工具 优化数据文件IO:保持磁盘半满,磁盘负载控制在50%-70% RAID阵列:RAID5会大大降低写IO,一次写操作包括了读取目标块,奇偶校验块,写目标块共4次IO 文件IO排布策略:通常情况下重做和归档分配到独立的磁盘,避免影响数据文件的IO。 重做和归档优化:重做文件的奇数编号放在一个磁盘设备,偶数编号放到另外一个磁盘;LGWR执行的写操作不需要条带化,一般情况下LGWR的写入数据量小,只能写到一块磁盘,条带化的优势无法体现。 重做日志大小:5分钟以下的日志切换,建议增加日志文件大小。
Oracle Performance Survival Guide读取笔记–第1章 Oracle数据库调优:一种系统化方法
Oracle性能调优的历史 1、追求高命中率,如Buffer Cache Hit Ratio,Latch Ratio等。 但这些命中率反应的是Oracle内部的效率,与使用数据库的应用的性能关系不大。 2、从Oracle 7.1开始,产生了基于等待事件接口的调优方法,其代表性人物是Anjo Kolk,方法论的文章是: YAPP – Yet Another Performance Profililing(本地我也放该文档)。 基于等待事件的调优方法,可以帮助我们快速发现问题,但需要挖掘出现问题的根因,否则将出现盲目扩展硬件、局限于解决当前问题的困境。 系统化的Oracle性能优化方法 数据库分层调优的概念是Steve Adams提出的,相关资料为:Tuning by Layers,本地我也放了该文档。 第一阶段:最小化应用系统负载,主要目标是从根源上减少数据库的工作量 主要方法是分为: 应用系统代码优化:改变应用程序的代码,如Java、C#、PHP、Ruby等,也包括了SQL语句的优化 修改数据库的物理实现,包括索引调整、反规范化、分区等。 第二阶段:降低争用和瓶颈 内存数据争用:Latch或Mutex调优 磁盘数据库争用:Lock争用,最可能的原因是应用设计方面,可能是大量进程更新同一条记录,或者是应用使用了悲观锁,导致锁的持有时间过长。 第三阶段:降低物理IO 调整Oracle的SGA/PGA设置,使得应用访问的数据尽可能不产生物理IO 第四阶段:优化磁盘IO 确保IO子系统有足够的带宽处理物理IO:一般的磁盘都能处理100次随机IO请求,但只有磁盘的使用率低于70%才能保证响应时间。因此对于大多数的数据库,满足IO请求意味着增加磁盘个数,而不是扩展存储空间。 通过RAID技术,确保数据在所有磁盘上均匀分布。对于大部分三少,RAID5是最差的方式,在写IO方面有严重的缺陷。 IO子系统压力过载的明显特征是IO请求的响应时间过长,一般情况下磁盘的响应时间不超过10ms。