存储的一些基本概念

学过linux的没有不听说过block块的,
         linux中有两种类型的设备文件:块设备文件和字符设备文件。一个块设备每次读取或者写入一块数据(一组字节,通常是512的倍数),字符设备每次读取或者写入一个字节。

字符设备:按照字符流的方式被有序访问,不能随机存取,如键盘、串口打印机、磁带。

块设备:能够随机(不需要按顺序)访问固定大小数据片(chunks),采用块缓冲技术,如硬盘、软盘、光驱。

裸设备:是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。
现在问题来了,Oracle在使用裸设备时(如ASM、甚或表空间直接建在裸设备上),难道还是顺序存取?显然不符合事实。
其实,说裸设备是字符设备,只是从操作系统的角度来说的;从使用裸设备的应用程序(如Oracle)的角度,还是块设备,Oracle会去对磁盘进行分块管理。

逻辑卷是逻辑概念,可以包含多块物理硬盘,实现了存储跨盘功能,同时提供了数据复制机制,提供了数据安全保护机制。

--------------

裸设备适用于每次改动数据较小、需大量并发交易,OLTP;
对于大规模顺序读写,裸设备性能是最差的,所以对OLAP,应使用块设备或卷。

 

---------------------------------------------------------------------

块设备 裸设备 字符设备
2010-01-22 01:02

在AIX里,每个LVM设备支持两种操作方式,分别被抽象为 Block Device (块设备)和 Character Device (字符设备),
其中Character Device 又被称为 Raw Device (原因往下看):
比如:

# ls -l /dev/*hdisk0
brw------- 1 root     system    22,   2 May 15 2007   hdisk0
crw------- 2 root     system    22,   2 May 15 2007   rhdisk0

# ls -l /dev/*hd3
brw-rw---- 1 root     system    10,   7 May 15 2007   /dev/hd3
crw-rw---- 1 root     system    10,   7 May 15 2007   /dev/rhd3

这里文件属性开头的'c'字母代表Character, 文件名开头的'r'字母代表Raw。

字符设备支持不定长的数据传输 (data transfers of arbitrary sizes),最小一个字节(但绝不是每次只能传一个字节或字符!),
LVM和存储设备的单次最大I/O只受 LTG (logical track group) 大小的限制,缺省为128KB,可修改。

块设备只能做定长的数据传输,数据必须经过 'kernel buffer cache'。
这个以512-byte block 为单位的buffer cache是传统的块设备的缓存,千万不要和文件系统的缓存混为一谈!!
这样的存取方式不仅效率低,而且带来诸多问题,严重影响大数据量传输的性能,
所以现代操作系统中几乎不用块设备的方式进行高速存储设备的数据存取。

数据库建议直接使用裸设备,意指避开文件系统和文件系统的缓存管理,直接和字符设备打交道。
(注意:文件系统一定是建在字符设备上的,不可能建到块设备上)

这样做的好处主要是三个:
1. 实现每个I/O的代码大大减少:filesystem 和 virtual memory for filesystem 的代码都规避了。
2. 避免了重复缓存造成的内存浪费(数据库和文件系统都有自己的数据缓存)。
3. 避免了文件锁的问题:文件系统里的文件不能同时被多个进程或线程更新。

坏处也有:
1. 失去了通过对普通文件进行管理的易用性。
2. 不能利用文件系统的 Readahead 的功能,顺序读的速度可能做不到最优

自从有了DIO和CIO之后,基于文件系统的数据库性能得以大大提高。
CIO是最接近与裸设备的一种基于文件系统的数据库运行方式,因为它解决了两个问题:
没有文件缓存(就是裸设备优势之2.);
没有文件锁(就是裸设备优势之3.)。
它保持了文件的可见性,所以不存在裸设备劣势之1。
当然DIO和CIO同样不支持Readahead。

综上所述:

+字符设备和块设备是对同一个物理设备的两种不同的存储方式的抽象。
+裸设备这个感念是针对其上有无文件系统来说的,和字符及块设备在概念上没有任何实质联系;
+块设备的block buffer机制和文件系统的缓存是两回事;
+块设备在现代操作系统中基本没有任何用途。
+数据库用裸设备或文件系统mount with CIO, 结合AIO (异步I/O),可以达到最佳I/O性能
  (在AIX 新版本中raw LV 和 CIO FS 均支持 AIO Fast Path );

注:相关概念或称谓在不同的操作系统中可能不尽相同,但原理是一样的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值