在极高负荷情况下oracle redolog的配置建议
2006-10-12 22:28
337 查看
在极高负荷情况下oracle redolog的配置建议
在oracle数据库的现有体系结构下,redolog承担了很大的压力。这是因为所有提交给数据库的交易都需要在commite确认前通过LGWR进程将相关信息写入redolog,而一个oracle实例只有一个LGWR进程,并且在UNIX系统上该进程是一个单线程程序,所以只能运行在一个内核上。在早期的主机系统上这个问题并不严重,但是随着多内核/多线程技术的发展-目前已经有了可以支持128个内核/256个线程的主机,而且支持更多内核和线程的主机即将出现,这个问题将表现得更加严重。
你想象一下如下场景,就可以感受到LGWR进程的处境:
有一个水池(redolog),只有一个人(LGWR)可以把水桶(transsion)里的水(transsion data)倒进去,这个人的边上站了127个人(server processor)不停的争相把手中的水桶(transsion)交到他的手中。
虽然我们很同情这个倒霉的老兄,可是由于oracle这个黑心的老板不愿意给它加派人手,我们也只好想想其它办法来加快他的工作速度了,比如强健一下他的体魄或者改造一下水池结构,让他工作起来轻松一点。
本文就是讨论如何让LGWR进程工作起来更有效率。
由于目前的主机不支持不同型号的CPU混用,所以给他吃独食(用高性能CPU运行该进程)是不可能了。但是我们可以让操作系统的进程调度程序给它开小灶,让它的运行优先级比其它oracle进程高,或者干脆把它设为实时进程,让他尽量不受操作系统进程调度的影响,尽可能多地占用CPU时间,从而达到让它多干活的目的。
那么如何改造水池(也就是redolog文件)呢?其实很简单,就是把它放到最快的存储设备上就行了。
内存毫无疑问是整个计算机系统中我们可以设置的最快存储设备,通过memory FS或者ramdisk软件,我们就可以在系统的内存空间中分出一部分来存储redolog文件。这个办法乍看起来确实不错,我们所需要付出的就是多买点内存。可是仔细想想,就会觉得有问题了。为什么呢?万一主机或主机上的软件(如:操作系统/数据库/应用)出现问题导致系统crash,oracle数据的完整性就没法保证了。所以我建议,除非你的系统是拿来演示系统性能的-如TPCC测试,就不要使用这个方法。
另外一个选择的可靠性就强多了,速度也很不错,可惜就是一个字-贵!好在支撑如此庞大和繁忙的业务系统的用户肯定不缺钱,所以应该问题不大。废话说了很多,答案到底是什么?cache LUN!目前市场上有一些厂商(如惠普/HDS)的最高档磁盘阵列支持在它的内部cache中划一部分出来存储一些对速度要求极高的数据,这部分的CACHE在主机看来和普通磁盘空间没有区别,可是由于这些数据是存在磁盘阵列的cache里,不需要写入物理硬盘,所以性能奇快。至于数据的安全性,由于高端存储都有专门的电源设计用来保证即使外部电源断电,CACHE中的数据也不会丢失,加上这些存储的控制软件可靠性极高,基本上不存在软件crash的可能性,所以应该可以放心。
如果很不幸,你的老板是既要马儿跑又要马儿不吃草的主,不愿意出钱使用cache LUN,那就只能尽量使用最好的存储设备,然后研究它的手册,把这个存储的每一滴血都榨出来。一个需要注意的事项是存储redolog的设备尽量不要与存储数据库其它文件的设备相互干扰。如果可能,最好把redolog和其它文件放在不同的存储设备上。
下面我们讨论几个在晚上经常问到的问到的问题:
1.我们应该使用裸设备还是文件系统?
如果只从性能最佳角度考虑,当然是裸设备,因为它会带来5~20%的性能提高。当然,文件系统的管理要比裸设备容易得多。
2.我想使用文件系统,但是又想尽可能的提高性能,该怎么办?
我的第一推荐是用veritas JFS软件的quick IO功能,第二个推荐就是仔细的调整文件系统的相关参数,尽可能的提高性能(详见我的另一篇文章《如何优化ORACLE redolog使用的文件系统性能》)
在oracle数据库的现有体系结构下,redolog承担了很大的压力。这是因为所有提交给数据库的交易都需要在commite确认前通过LGWR进程将相关信息写入redolog,而一个oracle实例只有一个LGWR进程,并且在UNIX系统上该进程是一个单线程程序,所以只能运行在一个内核上。在早期的主机系统上这个问题并不严重,但是随着多内核/多线程技术的发展-目前已经有了可以支持128个内核/256个线程的主机,而且支持更多内核和线程的主机即将出现,这个问题将表现得更加严重。
你想象一下如下场景,就可以感受到LGWR进程的处境:
有一个水池(redolog),只有一个人(LGWR)可以把水桶(transsion)里的水(transsion data)倒进去,这个人的边上站了127个人(server processor)不停的争相把手中的水桶(transsion)交到他的手中。
虽然我们很同情这个倒霉的老兄,可是由于oracle这个黑心的老板不愿意给它加派人手,我们也只好想想其它办法来加快他的工作速度了,比如强健一下他的体魄或者改造一下水池结构,让他工作起来轻松一点。
本文就是讨论如何让LGWR进程工作起来更有效率。
由于目前的主机不支持不同型号的CPU混用,所以给他吃独食(用高性能CPU运行该进程)是不可能了。但是我们可以让操作系统的进程调度程序给它开小灶,让它的运行优先级比其它oracle进程高,或者干脆把它设为实时进程,让他尽量不受操作系统进程调度的影响,尽可能多地占用CPU时间,从而达到让它多干活的目的。
那么如何改造水池(也就是redolog文件)呢?其实很简单,就是把它放到最快的存储设备上就行了。
内存毫无疑问是整个计算机系统中我们可以设置的最快存储设备,通过memory FS或者ramdisk软件,我们就可以在系统的内存空间中分出一部分来存储redolog文件。这个办法乍看起来确实不错,我们所需要付出的就是多买点内存。可是仔细想想,就会觉得有问题了。为什么呢?万一主机或主机上的软件(如:操作系统/数据库/应用)出现问题导致系统crash,oracle数据的完整性就没法保证了。所以我建议,除非你的系统是拿来演示系统性能的-如TPCC测试,就不要使用这个方法。
另外一个选择的可靠性就强多了,速度也很不错,可惜就是一个字-贵!好在支撑如此庞大和繁忙的业务系统的用户肯定不缺钱,所以应该问题不大。废话说了很多,答案到底是什么?cache LUN!目前市场上有一些厂商(如惠普/HDS)的最高档磁盘阵列支持在它的内部cache中划一部分出来存储一些对速度要求极高的数据,这部分的CACHE在主机看来和普通磁盘空间没有区别,可是由于这些数据是存在磁盘阵列的cache里,不需要写入物理硬盘,所以性能奇快。至于数据的安全性,由于高端存储都有专门的电源设计用来保证即使外部电源断电,CACHE中的数据也不会丢失,加上这些存储的控制软件可靠性极高,基本上不存在软件crash的可能性,所以应该可以放心。
如果很不幸,你的老板是既要马儿跑又要马儿不吃草的主,不愿意出钱使用cache LUN,那就只能尽量使用最好的存储设备,然后研究它的手册,把这个存储的每一滴血都榨出来。一个需要注意的事项是存储redolog的设备尽量不要与存储数据库其它文件的设备相互干扰。如果可能,最好把redolog和其它文件放在不同的存储设备上。
下面我们讨论几个在晚上经常问到的问到的问题:
1.我们应该使用裸设备还是文件系统?
如果只从性能最佳角度考虑,当然是裸设备,因为它会带来5~20%的性能提高。当然,文件系统的管理要比裸设备容易得多。
2.我想使用文件系统,但是又想尽可能的提高性能,该怎么办?
我的第一推荐是用veritas JFS软件的quick IO功能,第二个推荐就是仔细的调整文件系统的相关参数,尽可能的提高性能(详见我的另一篇文章《如何优化ORACLE redolog使用的文件系统性能》)
相关文章推荐
- pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
- plsql配置(不安装oracle的情况下)
- 将Oracle数据库改为归档模式并启用RMAN备份 如下Linux环境下对Oracle单节点数据库采用文件系统情况的配置归档模式过程。首先查看数据库归档模式和磁盘使用情况,确定归档文件放到什么位置。
- 通过plsql查询当前连接的数据库的配置情况,如查询oracle的安装地址,和oracle的tns配置
- pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
- hibernate使用c3p0的情况下直接oracle的配置文件
- 不装Oracle客户端的情况下配置plsql
- oracle查看控制文件的配置情况
- 如何配置Oracle客户端以及sys系统超级管理员无法登录的问题
- ORACLE即时客户端及PL/SQL的联合配置
- php连接oracle配置
- ORACLE:实例化 EM 配置文件时出错…
- Tomcat 6.0中配置Oracle、sql 2000数据库连接池
- vs2008 重新配置工作环境方法(建议用图形化界面)
- oracle创建类似配置数据库
- Oracle查询表空间使用情况
- MyEclipse配置oracle 连接
- Oracle 远程连接配置文件
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。(遇到了这个问题网上查了下保存下来)
- oracle database filesystem (DBFS) 简单配置文档