现在有一种经典的说法是oracle安装的祼设备上面比安装在文件系统上面要快。
是不是任何情况下都是这样呢?
以下是我的一点个人分析,如有不对之处请指出。
目前一般的文件系统都是有日志的。为了尽量减少文件系统的不一致性,缩短操作系统的启动时间,文件系统需追踪引起系统改变的记录,这些记录存放在与文件系统相分离的地方,通常我们叫“日志”。一旦这些日志记录被安全地写入,日志文件系统就可以应用它们清除引起系统改变的记录。这个日志的作用就像oracle中redo的作用一样。
数据库建在文件系统上面主要有以下几点需要考虑:
1.日志维护的开销。这点要根据文件系统具体的日志模式,像ext3就有三种日志模式,为了安全起见,这个日志维护的开销将不可忽视。
2.OS维护和管理文件系统的开销。在数据库的情况下,用户一般都是在现存文件的中间写入数据,甚至覆盖现存文件。这种操作一般是先截断该文件,然后再写入数据。每次都会涉及到文件的改变,因此这部分的管理开销也将不小。
3.采用文件系统,就会涉及到文件系统的缓存(pagecache)。有这个文件系统的缓存,就会导致写操作比写祼设备的速度要慢。因为当发生一个IO,将oracle buffer中的块写入硬盘时,一般都是先将这个块写到pagecache中,然后再从pagecache flush到硬盘上。而oracle为了保证确保不会有数据丢失必须等这个块从pagecache flush到硬盘的操作完成后才会收到一个写入完成的消息。所以说采用文件系统,写操作比直接写到祼设备的操作要慢。
4.采用文件系统,因为有文件系统缓存,读操作一般会比采用祼设备要快。这点不仔细描述了。我想大多数人都能接受这一点。
根据上面4点,我觉的,如果一个系统在系统资源(包括CPU,内存,IO)不存为瓶颈时,同时读操作又多于写操作时,一般情况下采用文件系统会比采用祼设备要快。
如果能够预估到系统资源可能会成为瓶颈,或者写操作又较多时,应该考虑采用祼设备。