使用raw设备损失一点性能但可以提高安全性”这句话不知怎么解释?
数据库使用文件系统作为数据设备的风险在于:
当系统突然掉电时,文件系统缓冲中会有一些数据并未写入相应磁盘中,但是数据库已经认为写入数据完成造成数据不一致。
使用RAW设备时,每一次数据库写入数据都真实的写在相应磁盘中不存在数据不一致的可能,应为若写入失败,数据库也不会认为写入成功。

dd 测试文件系统肯定会比raw设备快,因为文件系统有缓冲区而raw没有,正因为如此raw设备对数据库而言性能不会比文件系统慢。
首先,如果数据库使用文件系统的话1个IO写操作需要这么一个过程:
IO write==>;database buffer==>;file system buffer ==>;array controller cache==>;hard disk
最后看看用raw设备需要的过程
IO write==>;database buffer==>;array controller cache==>;hard disk
这样开销就降低了很多,而且可以空出来更多的free memory给数据库使用,这又能大大增加database buffer的命中率。
而且确实用文件系统有数据不一致的风险,虽然很多高级文件系统都有自己的日志,但这仍是一种风险。

这种情况我们也遇到过
情况是这样的:
如果你先把裸设备格式化好了,然后用dd对这这个裸设备或者文件系统测试,如果测试的的时候选择的block大小和文件系统在格式化这个裸设备时候所默认的block大小之间没有严格的比例关系就会出现这个问题.
是因为裸设备已经备格式化成了一个个block,如果用dd对这裸设备写的时候不按照文件系统block大小或者文件系统block大小的倍数写的话,那很可能就造成了文件系统block浪费,比如dd的时候用的大小是4098,比文件系统的4096多了2b,但是这2b对于已经格式话好的文件系统来说就又占用了一个新的4096的block,也就是对着文件系统写了2个block,这样算下来对这裸设备写可能要比对这文件系统写要慢.

文件系统一方面是为了管理方便,另外一方面是为了最大的调度io资源.
当使用了文件系统以后会有很多好处,虽然多了一层处理,但是同样也多了很多裸设备所没有的好处,比如有自己的预读写机制,自己的缓存机制,这样也可能导致了很多时候文件系统的使用效率比裸设备好

数据库用raw设备,只是可靠性比文件系统高一些而已,并不是io次数少。
而且有的数据库采用文件系统会比raw设备更加快,快好几倍,如sybase。

我认为裸设备还有一点好处,就是在建表空间是,一下可以建个几十G,但文件系统就不行了吧?