关于Oracle数据库性能优化,最好从什么时候开始更合适呢?,根据自己几年下来的实际经验,我想从安装前的存储规划开始最好。存储规划并不是说偏要采用技术最先进的而是要采用最合适业务需求的,先说总体原则:
1、数据文件、备份文件、归档日志文件存放位置分离原则,最好分别放到不同磁盘组,而不是同一个磁盘组的不同Lun,但这种方式缺点就是每个磁盘组都需要一块儿热备盘,空间浪费比较严重;
2、如果是读写频繁的OLTP系统,对数据文件和归档日志文件存放的磁盘组,最好采用Raid1+0,这样可以保证读写都很快。在线日志文件(online redo logfile)和控制文件同时双份放到数据区和归档区,在保证读写性能的基础上可以提高可用性和可恢复性。对备份文件所存放的磁盘组可以进行Raid5的冗余方式。
3、一般通用的方式就是数据文件与备份文件及归档日志文件存放到两个不同磁盘组,而不是同一个磁盘组的不同Lun,对两个磁盘组都进行Raid1+0的方式。这样也不会影响性能,可以节省一块儿热备盘来提高空间利用率,但如果数据量大,则通过Raid1+0的划分备份磁盘空间估计也会导致一定空间浪费;
根据以上矛盾,我们可以看出,有个重要因素就是磁盘大小和数量,还需要结合数据库大小和具体应用的综合考虑很有必要的。
同时,除了备份区,其他区域不建议采用太大的硬盘。如果数据库不大,加上磁盘数量太少,还不如将所有磁盘都做成Raid1+0,这样可以提升I/O总体带宽,也可以节省多个热备盘引起空间浪费。
随着SDD盘价格的大幅下降,也可适当的采用SDD和SAS混合的使用方式,因为一个转速10K的SAS盘的IOPS才120至150,而SSD硬盘的IOPS甚至超过10倍,因此对I/O性能和并发要求高的系统来说,值得尝试这种组合。例如:假设某个客户数据库当前大小为1T、数据增量每月100G,并发1000以上的OLTP系统。可以采取如下两种:
• 6块900GB硬盘,做完RAID5组和热备盘后,实际可用容量为:4*900GB=3.6TB,7块SSD盘主要跑在线数据,做完RAID5后,实际可用容量为:5*400GB=2TB;
• 配置11块儿转速15k的SAS盘,做RAID1+0,分区两个Lun后,在ASM里进行进一步划分;
针对空间容量较大的数据库,除了考虑以上因素外,另外一重要因素就是ASM磁盘组(ASM DISKGROUP)数量和磁盘组所需每个ASM磁盘的(ASM DISK)大小。ASM磁盘组不易太多,名称尽量规范化,例如可以分成DATADG1,DATADG2…,DATADGn来存放数据文件和日志文件,FRADG1,FRADG2…,FRADGn来存放归档(含备份文件),BACKUPDG1,BACKUPDG2…,BACKUPDGn来存放备份等。对于每个ASM磁盘组下的ASM磁盘,结合数据库大小和今后的增长量,最好采用适当的大小,不易太小或太大。例如,3年内数据库增量大小在3T,则每个ASM DISK大小最好控制在200G至500G范围,为什么呢,因为如果按300G计算,则3000G/300G=30个 ASMDISK,这样在ASM里组成磁盘组时,看起来也是比较整齐并合理的。如果磁盘数来能太多,不仅管理起来混乱、容易导致人为错误而且对ASM管理这么多盘,也带来一定管理开销。
最后,有些DBA也许采取将归档和备份单独放到独立LUN并采用文件系统而不是ASM的磁盘管理模式,这样的好处就是就算ASM出问题登录不上,但是备份和归档文件在文件系统上都能直观看到,可以避免一定的风险,也让人放心。如果采用这种模式并用LINUX操作系统,建议将该文件系统按Linux的LVM方式划分,这样今后扩展起来非常方便。但是这个方法也有一定缺点,即,因为采用是Linux的本地文件系统,而不是Cluster文件系统,两个节点的归档和备份的实现方式为两个节点独立写只属于自己分区,可以共享只读。如果不小心将彼此分区配置成双方都能读写的mount模式,将会导致数据相互覆盖而丢失的问题。
Oracle ASM 如何添加新磁盘到磁盘
Oracle 10g 手工创建ASM数据库
Ubuntu 12.04(amd64)安装完Oracle 11gR2后各种问题解决方法
如何修改Oracle 10g ASM的sys密码
: