首先,我们要先回顾一下LGWR进程的特点:
LGWR进程在以下情况下写redolog文件:
1.某个session committe transission
2.redo buffer 数据达到三分之一满
3.每3秒钟
这导致LGWR进程每次写redolog的数据块大小变化很大,从1KB~400KB都有。
为了适应上述特点,有效的提高LGWR写redolog的性能,就需要为redolog专门创建文件系统,并且将该文件系统的block size设为1KB。
为什么要设为1KB呢?这就涉及到了文件系统写操作的具体过程。
当一个进程向JFS文件系统写数据时,JFS文件系统管理进程会首先检查buffer cache中是否有该进程要写的数据存放的数据块,如果有,那么这些写入的数据会被存放在buffer cache里对应的数据块中;如果没有,JFS文件系统管理进程会从磁盘中读对应的数据块并将其放在buffer cache里,然后用写入的数据update buffer cache里的数据块。上述工作完成后,JFS文件系统管理进程才会以数据块为单位把数据写入磁盘。
如果我们把block size设置过大,有可能会出现这种情况:
LGWR写1k的数据到redolog,但是由于block size设置为2K(或者更高),JFS文件系统管理进程不得不读入2k的数据到bufer cache,并在update后再把它写入磁盘。
另外一个在创建文件系统时需要注意的事项是,尽量使用新版JFS软件的新版disk layout。目前HPUX的最新版JFS软件是version 4.1,但是veritas公司已经发布了version5.0,估计很快HPUX也会有version 5.0的发布。JFS version4.1支持的最新版disk layout是version 6。使用最新版本的原因是它可以更加充分的利用新一代主机和存储设备的特点,提高性能。
文件系统创建完成后,我们还要注意文件系统的mount options。
我推荐使用这些mount options: delaylog,nodatainlog,convosync=direct,minicache=direct
这些options会导致如下行为:
delaylog:这个选项允许文件系统把一些不重要的信息延迟写入到inetent log,以提高写性能。这样,文件系统可以通过让某些IO操作提前返回而不是等到这些不重要的信息写入磁盘的intent log区之后返回。例如:一个文件写IO如果只会导致intent log中的timestamp值发生变化,就可以从这个 mount options得到性能能够提升。
nodatainlog:由于LGWR进程总是使用同步写,这个参数可以避免文件系统进程在文件系统的intent log区和数据文件文件中两次写同样的数据。这是因为如果不设这个参数,JFS遇到同步写操作时,会先把数据写入文件系统的intent log,然后再写到数据文件中去。
convosync=direct:这个选项把LGWR发出的同步写操作转换为直接写操作,从而提高了写性能。这个性能的提升是通过避免不必要的buffer cache相关操作来达到的。
minicache=direct:这个参数的作用是把非同步IO(如ARCH进程的读操作)转化为同步IO,这样的目的是为了避免出现直接IO和buffer IO同时在该文件系统上出现,因为这会导致性能的急剧下降。