http://www.linuxjournal.com/arti ... ead&order=0
上一篇我们讲到了 Oracle 数据库的性能优化,我们继续保持 KISS(keep it simple, stupid) 的原则,来看文件系统对数据库性能的影响。
我们要比较的是 Linux 多设备(md),逻辑卷管理(lvm),原始文件系统和格式化后文件系统,普通文件系统和日志文件系统的区别。
在日常生活中,我们知道有“人多力量大”的说法。但是这个理论并不能适合磁盘驱动器。当代的计算机技术, CPU 能够达到 2GHz 的主频,内存的刷新速度以纳秒计,总线的数据传输速率超过了 266 Mbps。尽管磁盘的容量增大了,价格下降了,但是磁盘的输入输出速度依然成为计算机系统最大的瓶颈。转速保持在 5400-15000 RPM 之间,传输速率只有 20-160 MBps,这些不利因素使磁盘成为 Achilles 之踵,制约了整个计算机系统的速度。
对于磁盘而言,如果采购 IDE 的话,建议 7200 RPM 以上,带有至少 2MB 缓冲的磁盘。而对于那些出手阔绰老板可以考虑 SAN 和 NAS 磁盘阵列。
本文的测试环境是 双 PIII 933 CPU ,2 GB 内存,两块 Symbios SCSI Ultra 2 阵列卡,10台 SCSI Ultra 2 7200 RPM 18GB 磁盘。所有 10 台磁盘采用 RAID0 (条带化,但是不冗余)。
实现 RAID 的三种办法:
硬件(一般带有 128M Cache)
软件 md 内核
软件 卷管理 (LVM)
在其他 Unix 用过的朋友知道这些 Unix 都采用 LVM ,Linux 支持 LVM 也是不久以前的事情,因此,本文推荐你使用 LVM 作为数据库文件系统。
假设我们要添加四个 9GB 的 SCSI 磁盘(已经有四个),实现单个 RAID 0 ext2 的文件系统,命名为 /data ,那么实现的方法脚本是:
for i in e f g h
do
sfdisk /dev/sd $i << EOF
0,9216,8E
EOF
pvcreate /dev/sd $i
done
vgcreate vg01 /dev/sd[e-h]
lvcreate -i 4 -I 64 -L 36G -n lv01 vgo1
mke2fs /dev/vg01/lv01
mkdir /data
mount /dev/vg01/lv01 /data
对于其他文件系统,可以把上面的 mk2efs 改变为:
mke2fs-j 新的 ext3 日志文件系统
mkreiserfs 流行的 Reiser日志文件系统
mkfs.jfs IBM 的日志文件系统
对于 RAW 设备而言,可以把最后三行改变为:
mknod /dev/rawctl
mknod /dev/raw1 c 162 $i
raw
基准测试的工具有很多,但是我们要选择比较客观的能正确反映系统性能的工具来。我们选择 AS3AP,ANSI SQL 的基准测试工具。TPC-C ,用与 OLTP 的基准测试工具。
采用 AS3AP 后的结果显示 ext3 的性能最好,RAW 次之,但是 Reiser 几乎就是呆住了,建立索引的时间要比平均多 2.6 倍。
Table 1. AS3AP Transaction Benchmark Results
建库 载表 建索引 总共时间 每秒事务 平均时间
ext2 345 289 474 1,108 254 0.205
ext3 230 127 221 578 252 0.208
Reiser 371 291 1,029 1,691 250 0.210
IBM JFS 350 282 462 1,094 253 0.207
RAW 396 290 442 1,128 196 0.369
因此我们把 RAW 文件系统的内存加大两倍后看结果:
Table 2. TPC-C Transaction Benchmark Results
建库 载表 建索引 总共时间 每秒事务 平均时间
ext2 348 295 234 877 2.758 0.016
ext3 228 158 122 508 2.753 0.019
Reiser 378 297 537 1,212 2.757 0.028
IBM JFS 351 277 231 859 2.757 0.025
RAW 396 290 225 911 2.748 0.073
RAW X 2 396 240 263 899 2.753 0.050
因此,根据以上的结果,我们可以看出,ext3 是最佳的选择。而 RAW 文件系统不推荐在 Linux 系统中使用。
对系统还可以优化的办法:如果数据库在整个文件系统中查找数据,可以运行 fsync(),而
ext3 在 data=journal 模式下能得到巨大的性能提升,可以达到 10 倍。因为脏数据是线性写入日志,然后异步写回的。
Reiser 慢的原因:http://www.namesys.com/ ,点评这篇文章的网友认为, XFS 会是所有日志文件系统中性能最好的,但是作者没有做基准测试。