使用直接I/O

使用直接I/O

由于内存访问比磁盘访问快很多,操作系统通常会在内存中缓存文件I/O操作。应用写入到一块后面会被刷回存储设备(在Greenplum数据库系统中通常是一个RAID控制器)的内存中。每当应用访问一个仍然驻留在内存中的块时,就可以避免一次设备访问。直接I/O允许用户绕过缓存,这样应用会直接写到存储设备。这种方式可以节约CPU消耗并且消除一次数据拷贝操作。对于备份这类文件块只会被处理一次的操作来说,直接I/O效率很好。

注意: 只有Red Hat、CentOS和SUSE上支持直接I/O。

打开直接I/O

gp_backup_directIO系统配置参数设置为on就可以为备份启用直接I/O:
$ gpconfig -c gp_backup_directIO -v on
要查看直接I/O是否被启用,使用这个命令:
$ gpconfig -s gp_backup_directIO

当数据库繁忙时减少发送到转储的网络数据块

gp_backup_directIO_read_chunk_mb配置参数设置直接I/O启用时I/O块的尺寸,单位是MB。默认块尺寸(20MB)已经被测试过并且被发现是最优的。减小它会增加备份时间并且增加它会导致备份时间很小的改变。

要找出当前的直接I/O块尺寸,输入下面这个命令:

$ gpconfig -s gp_backup_directIO_read_chunk_mb

下面的例子把默认块尺寸改成10MB。

$ gpconfig -c gp_backup_directIO_read_chunk_mb -v 10