Chinaunix

标题: 认识Quick I/O 和Cached Quick I/O (vxfs) [打印本页]

作者: 风之幻想    时间: 2009-05-14 10:48
标题: 认识Quick I/O 和Cached Quick I/O (vxfs)
首先,来介绍一下什么是Quick I/O合Cached Quick I/O。VERITAS Quick I/O是VXFS为oracle数据库提供的一种特殊的功能。数据库和文件系统有机的整合在一起同时更好的帮助系统管理员和数据库管理员进行oralce数据库服务器的配置。同时,VERITAS Quick I/O还为普通文件的创建提供裸设备接口。它避开了一定得文件系统开销的操作方式(比如:数据锁层面的操作)同时提供kernel的异步I/0(KAIO),因此,Quick I/O为文件系统管理和裸设备性能方面带来的便捷。Cached Quick I/O是一种增强型Quick I/O,它能够帮助oracle DBA更好的使用大系统内存的效率。\r\n换句话来说,传统的文件系统,由于对文件的single write lock存在,导致文件系统在并发环境中读写效率比较低。而裸设备则不存在这个问题。Quick I/O其实就是消除了单写锁,提高文件系统的效率。\r\nCached Quick I/O是对Quick I/O的一种增强处理,核心的思想就是不断的记录访问的文件的频度,将最热的文件放在cache中,提高cache的命中率,从而提高文件系统的效率。\r\n使用Cached Quick I/O可以更好的在文件系统下运行数据库。\r\n能够方便的提供系统生产环境下的文件I/O统计。\r\n收集在用文件的文件I/O统计。\r\n使用Cached Quick I/O能够方便的分析文件的I/O统计。\r\n不使用Cached Quick I/O在命中率上差异较大。\r\n可以简单的理解这两个特性:\r\n1)Quick I/O解决的是传统的unix文件系统的single write lock问题。\r\n2)Cached Quick I/O解决的是cache的命中率问题。\r\n\r\n先来介绍一下Quick I/O。\r\n首先确认使用的文件系统是vxfs。这是VERITAS storage foundation的特性。\r\n需要购买veritas license\r\n使用veritas提供的脚本来创建需要转化的数据文件列表\r\n $/opt/VRTSdbed/bin/qio_getdbfiles执行该脚本可以将vxfs下所有需要转化的数据文件都输出到mkqio.dat文件中。脚本目录在/opt/VRTSdbed/bin。在老的版本中这个脚本名称为:getdbfiles.sh.\r\n   这个脚本会自动排除所有类型为temproary的数据文件。这些文件在转化之后,oracle将无法进行写入。\r\n mkqio.dat文件也可以自己手工创建。但必须要注意排除temporary datafiles。文件中包含数据文件和大小,样例如下:\r\n\r\n$cat mkqio.dat\r\n/db01/file1 210358\r\n/db01/file2 157996\r\n/db01/file3 38098\r\n/db01/file4 394935\r\n/db01/file5 911787\r\n/db01/redo_t04.log 209715\r\n在上面的过程中,数据库需要打开。\r\n\r\n $/opt/VRTSdbed/bin/qio_convertdbfiles,执行该脚本转化mkqio.dat列表中的数据文件。在老的版本中这个脚本名称为:mkqio.sh\r\n在转化之前,必须先关闭数据库。\r\n这些脚本都以oracle用户执行。\r\n那么现在再来说如何启动Cached Quick I/O呢?可以通过使用命令vxtunefs命令将qio_cache_enable标志改为1来设定。命令如下:\r\n\r\n# vxtunefs -s -o qio_cache_enable=1 /mount_point\r\n\r\n比如:\r\n\r\n# /opt/VRTSvxfs/sbin/vxtunefs -s -o qio_cache_enable=1 /happy\r\n\r\nvxfs vxtunefs: Parameters successfully set for /happy\r\n\r\n接下来看如何关闭Cached Quick I/O呢?可以通过使用命令vxtunefs命令将qio_cache_enable标志改为0来设定。命令如下:\r\n\r\n# vxtunefs -s -o qio_cache_enable=0 /mount_point\r\n\r\n比如:\r\n\r\n# /opt/VRTSvxfs/sbin/vxtunefs -s -o qio_cache_enable=0 /happy1\r\n\r\nvxfs vxtunefs: Parameters successfully set for /happy1\r\n\r\n如果想让Cached Quick I/O设置固定不受重启的影响,就需要在/etc/vx/tunefstab文件下面增加qio_cache_enable条目。\r\n如果tunefstab不存在的话,需要手工加一个就可以了。\r\n举例:\r\n/dev/vx/dsk/datadg/datavol  qio_cache_enable=1\r\n/dev/vx/dsk/datadg/myvol    qio_cache_enable=1\r\n\r\n可以通过vxtunefs命令来查看Cached Quick I/O的情况。\r\n命令如下:\r\n# vxtunefs  /mount_point\r\n\r\n举例:\r\n# /opt/VRTSvxfs/sbin/vxtunefs /happy\r\nFilesystem i/o parameters for /happy\r\nread_pref_io = 65536\r\nread_nstream = 1\r\nread_unit_io = 65536\r\nwrite_pref_io = 65536\r\nwrite_nstream = 1\r\nwrite_unit_io = 65536\r\npref_strength = 10\r\nbuf_breakup_size = 131072\r\ndiscovered_direct_iosz = 262144\r\nmax_direct_iosz = 1048576\r\ndefault_indir_size = 8192\r\nqio_cache_enable = 1\r\nwrite_throttle = 15104\r\nmax_diskq = 1048576\r\ninitial_extent_size = 8\r\nmax_seqio_extent_size = 2048\r\nmax_buf_data_size = 8192\r\nhsm_write_prealloc = 0   \r\n\r\n# /opt/VRTSvxfs/sbin/vxtunefs  /happy1\r\nFilesystem i/o parameters for /happy1\r\nread_pref_io = 65536\r\nread_nstream = 1\r\nread_unit_io = 65536\r\nwrite_pref_io = 65536\r\nwrite_nstream = 1\r\nwrite_unit_io = 65536\r\npref_strength = 10\r\nbuf_breakup_size = 131072\r\ndiscovered_direct_iosz = 262144\r\nmax_direct_iosz = 1048576\r\ndefault_indir_size = 8192\r\nqio_cache_enable = 0\r\nwrite_throttle = 15104\r\nmax_diskq = 1048576\r\ninitial_extent_size = 8\r\nmax_seqio_extent_size = 2048\r\nmax_buf_data_size = 8192\r\nhsm_write_prealloc = 0    \r\n\r\n同时还可以为个别文件设置Cached Quick I/O。使用qioadmin命令来设置文件的Cached Quick I/O。使用qiostat或者其他的分析工具来分析文件的Cached Quick I/O。当打开和关闭个人文件的Cached Quick I/O时,需要数据库是运行的。通过使用qiostat命令来观察文件的缓存命中率是否发生足够的改变打开或者关闭Cached Quick I/O对于个人文件也需要考虑设置cache.\r\n关闭个人文件的Cached Quick I/O使用qioadmin命令设置标志位OFF。\r\n命令如下:\r\n# qioadmin -S file=OFF mount_point\r\n举例:\r\n# /opt/VRTSvxfs/sbin/qioadmin -S myfile=OFF /happy\r\n\r\n打开个人文件的Cached Quick I/O使用qioadmin命令设置标志位ON。\r\n命令如下:\r\n# qioadmin -S file=ON mount_point\r\n举例:\r\n# /opt/VRTSvxfs/sbin/qioadmin -S myfile=ON /happy\r\n\r\n如果想让设置一直生效不受重启的影响需要在文件/etc/vx/qioadmin下增加相应的条目。\r\n如果这个文件不存在,可以手工添加上去。\r\ncache建议使用qioadmin来存储时需要加上Inode属性。这些设置可以在重新mount和系统重启中一直生效,但是,这些属性通过一般的备份方法并不能被备份。他们是不能恢复的,因此,任何一次文件系统的恢复都需要重新设置属性。如果在/etc/vx/qioadmin增加了Quick I/O文件系统条目的话,这些工作可以不需要做。\r\n\r\n/etc/vx/qioadmin的文件内容如下:\r\n以happy文件系统为例:\r\ndevice=/dev/vx/dsk/datadg/datavol\r\nmyfile, OFF\r\nmydata, ON\r\n\r\n可以通过是使用qioadmin命令的-P选项来查看现在文件的Cached Quick I/O情况。\r\n命令如下:\r\n# qioadmin -P file mount_point\r\n\r\n例如:\r\n\r\n# /opt/VRTSvxfs/sbin/qioadmin -P myfile /happy\r\n\r\nmyfile,OFF \r\n\r\n# /opt/VRTSvxfs/sbin/qioadmin -P mydata /happy\r\n\r\nmydata,ON\n\n[ 本帖最后由 风之幻想 于 2009-5-14 11:51 编辑 ]
作者: alex_linux    时间: 2009-05-14 13:22
用的太少,反正我没见过
作者: alongx    时间: 2009-05-14 13:30
多强大的东西啊 ,可惜一直没机会碰
作者: 风之幻想    时间: 2009-05-14 14:54
veritas的很多的理念真的是很不错。
作者: wolfop    时间: 2009-05-14 16:13
cached quick IO,能保证数据库写是durable的么?难道只是读做了cache?
作者: 风之幻想    时间: 2009-05-14 17:04
I/O on files using read() and write() system calls typically results in data being copied\r\ntwice: once between user and kernel space, and later between kernel space and disk. In\r\ncontrast, I/O on raw devices is direct. That is, data is copied directly between user space\r\nand disk, saving one level of copying. As with I/O on raw devices, Quick I/O avoids the\r\nextra copying.
作者: anfield    时间: 2009-05-15 02:23
veritas版本的裸设备。\r\n和传统的单纯的裸设备比较,下面一段话是不错的总结\r\nVERITAS Quick I/O has been developed to combine the performance advantages of raw volumes with the maintenance advantages of a journaled file system. Studies conducted at the Large Systems Support Belmont data center showed performance benefits similar to raw volumes. The availability of the traditional UNIX file commands greatly improves the ability of the technical staff to manage the database files correctly and efficiently. VERITAS Quick I/O deserves serious consideration for implementation in any data center running Oracle databases on UNIX.
作者: bxwz2004    时间: 2009-05-15 08:43
那么, oracle 数据库的 datafile 是放在了 veritas 的文件系统上呢 还是 裸设备上?\r\n\r\n感觉楼主是放到了文件系统上了, 但是 oracle 有自己的 data buffer 呀, 还要经过veritas 的文件系统的cache 吗。 为什么不能直接将数据文件放到裸设备上,更省事啊。难道就是为了能够在裸设备上方便地使用 unix 命令进行操作吗?
作者: 孔方兄    时间: 2009-05-15 09:18
在原来IO性能是瓶颈的时候挺好,但是现在存储的IO性能大幅度提升,价格快速下降的时代,已经意义不大了。。。还不如把那个钱买好点的存储呢;另外ZFS等已经引入了这些概念,关键还是免费的。。。\n\n[ 本帖最后由 孔方兄 于 2009-5-15 22:15 编辑 ]
作者: bxwz2004    时间: 2009-05-15 09:42
是啊 , 原来SUN的产品不尽如人意的时候, 需要牛逼的veritas罩着, 现在 SUN 在文件系统和集群方面取得进步后, 还需要veritas吗?可能就剩备份这块儿了吧?
作者: 风之幻想    时间: 2009-05-15 09:59
其实,我个人认为在文件系统和备份存储的管理方面veritas还是很有自己独到的地方的。数据库一般情况下都会跑在裸设备上,但是,我这里有2台机器没有接存储用的是本地硬盘(跑的应用的需求也比较小),所以,采用文件系统方式。这样比较方便一些,对于备份等等。现在存储的I/O性能确实是大幅提高了。而且,对于很多的东西也免费了。也许,这个就是技术进步带来的好处吧。呵呵。
作者: mike79    时间: 2009-05-15 19:49
貌似在AIX平台上意义不是很大。JFS2+CIO已经消除了single write lock,而且AIX5.3 TL07之后JFS2也是采用KAIO。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2