分类:
2009-07-12 16:01:13
我们在创建DMS表空间容器时可以选择使用裸设备或文件系统,下面我们来看看两者的区别。我们知道,内存的读写效率比磁盘高近万倍,因此数据库通常会在内存中开辟一片区域,称为Buffer Pool,使数据的读写尽量在这部分内存中完成。同样地,在文件系统中,操作系统为了提高读写效率,也会为文件系统开辟一块Buffer用于读写数据的缓存。这样,数据库中的数据会被缓存两次。为了避免操作系统的这次缓存,我们可以采用裸设备作为数据文件的存储设备。裸设备,也称为裸分区(Raw Partiton),是一个没有被加载(Mount)到操作系统的文件系统上的磁盘分区,它通过字符设备驱动来访问。裸设备的I/O读写不由操作系统控制,而是由应用程序(如数据库)直接控制。
裸设备的优点:
由于屏蔽了文件系统缓冲器而进行直接读写,从而具有更好的性能。对硬盘的直接读写就意味着取消了硬盘与文件系统的同步需求。这一点对于纯OLTP系统非常有用,因为在这种系统中,读写的随机性非常大以至于一旦数据被读写之后,它们在今后较长的一段时间内不会得到再次使用。除了OLTP,裸设备还能够从以下几个方面改善DSS(决策支持系统)应用程序的性能:
排序:对于DSS环境中大量存在的排序需求,裸设备所提供的直接写功能也非常有用,因为对临时表空间的写动作速度更快。
顺序访问:裸设备非常适合于顺序I/O动作。同样地,DSS中常见的顺序I/O(表/索引的全表扫描)使得裸设备更加适用于这种应用程序。
直接读写,不需要经过操作系统级的缓存。节约了内存资源,在一定程度上避免了内存的竞争。
避免了操作系统的cache预读功能,减少了I/O。
采用裸设备避免了文件系统的开销。比如维护I-node、空闲块等。
裸设备的缺点:
裸设备的空间大小管理不灵活。在放置裸设备的时候,需要预先规划好裸设备上的空间使用。还应当保留一部分裸设备以应付突发情况。这也是对空间的浪费。
需要操作系统root用户干预,因为裸设备的创建、更改权限、扩展大小等都需要root用户完成,增加了管理的成本。
文件系统的优点:
文件系统易于管理和维护,如文件的基本管理以及安全和备份等。
文件系统的缺点:
性能比不上裸设备。
我们在选择表空间容器时,从性能上考虑尽量采用裸设备,但是如果我们使用自动存储方式创建数据库和表空间,这种方式不支持裸设备。或者我们为了便于管理而采用文件系统方式。这时候我们采用合理设置文件系统相关选项和表空间的相关选项。下面我们来讲解文件系统方面应该注意的事项。
CIO/DIO
直接 I/O(DIO)由于可以绕过在文件系统级别进行高速缓存,从而改进内存性能。此过程可减少CPU开销并使得更多的内存可用于数据库实例。并发I/O(CIO)具有DIO的优点,并且还可以消除串行化写访问权。与使用文件系统缓冲I/O相比,在具有大量事务处理工作负载和回滚时CIO/DIO机制可增大吞吐量。
DIO和CIO在HP-UX、Solaris、Linux和Windows操作系统最新版本上都受支持。
关键字NO FILE SYSTEM CACHING和FILE SYSTEM CACHING是CREATE和ALTER TABLESPACESQL语句的一部分,允许您指定将对每个表空间使用DIO还是CIO。当 NO FILE SYSTEM CACHING有效时,只要可能,数据库管理器都会尝试使用"并发 I/O"。在不支持CIO的情况下(例如,当使用了JFS 时),将取而代之使用DIO。
建议在表空间级别启用或禁用UNIX、Linux和Windows上的非缓冲I/O。这将允许您在特定表空间上启用或禁用非缓冲I/O,同时避免数据库的物理布局中的任何依赖性。它还允许数据库管理器确定每个文件最适合使用哪种I/O,缓冲的还是非缓冲的。
NO FILE SYSTEM CACHING子句用于启用非缓冲I/O,从而禁用特定表空间的文件高速缓存。一旦启用了非缓冲 I/O,数据库管理器就会根据平台自动确定将使用直接 I/O还是并发I/O。由于使用CIO可以提高性能,所以只要支持CIO,数据库管理器就会使用它。
FILE SYSTEM CACHING选项并不是总没有好处,例如当一个应用程序检索LOB或LONG数据时,这些大对象数据不能经过数据库缓冲池,每次应用程序需要其中一个页时,数据库管理器必须从磁盘对其进行直接读取。但是,如果LOB或LONG数据存储在SMS或DMS文件容器中,文件系统高速缓存可提供缓冲,因此也就改善了性能。
未在CREATE TABLESPACE语句或CREATE DATABASE命令中指定此属性时,数据库管理器将使用基于平台和文件系统类型的默认行为处理请求。查看是否启用FILE SYSTEM CACHING属性,可以使用:
GET SNAPSHOT FOR TABLESPACES命令(此命令会在第12章讲解)
例如,以下是DB2 GET SNAPSHOT FOR TABLEPSACES ON SAPMPLE输出:
- 表空间名 = USERSPACE1
- 表标识 = 2
- 表空间类型 =数据库管理的空间
- 表空间内容类型 = 所有永久数据。大型表空间。
- 表空间页大小(以字节计) = 4096
- 表空间扩展数据块大小(以页计) = 32
- 已启用自动预取大小 = Yes
- 当前正在使用的缓冲池标识 = 1
- 下一次启动的缓冲池标识 = 1
- 使用自动存储器 = Yes
- 已启用自动调整大小 = Yes
- 文件系统高速缓存 = No
- 表空间状态 = 0x'00000000'
- …………………………………………略……………………………….
db2pd -db sample -tablespaces命令(此命令会在第12章讲解)
D:\Program Files\IBM\SQLLIB\BIN>db2pd -db sample -tablespaces
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:03:20
Tablespace Configuration:
Address Id Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC
NumCntrs MaxStripe LastConsecPg Name
0x7F90C230 0 DMS Regular 8192 4 Yes 4 1 1 Off
1 0 3 SYSCATSPACE
0x7F90CA20 1 SMS SysTmp 8192 32 Yes 32 1 1 On
1 0 31 TEMPSPACE1
0x7F90F1E0 2 DMS Large 8192 32 Yes 32 1 1 Off
1 0 31 USERSPACE1
0x7F90F9D0 3 DMS Large 8192 32 Yes 32 1 1 Off
1 0 31 IBMDB2SAMPLEREL
0x7EF22240 4 DMS Large 8192 4 Yes 4 1 1 Off
1 0 3 SYSTOOLSPACE
0x7EF22A30 5 DMS Large 8192 32 Yes 32 1 1 Off
1 0 31 IBMDB2SAMPLEXML
0x7EF23220 6 SMS UsrTmp 8192 4 Yes 4 1 1 On
1 0 3 SYSTOOLSTMPSPACE
db2look -d
下面我们举几个关于文件缓存的例子:
例3-1 假定数据库和所有相关表空间容器位于AIX JFS文件系统上,并且发出了以下语句:
DB2 CREATE TABLESPACE DATA_SPACE MANAGED BY DATABASE USING (file '/db2data1' 800M)
在先前版本中,如果未指定该属性,那么数据库管理器将使用缓冲I/O(FILE SYSTEM CACHING)作为I/O机制;对于版本9.5,数据库管理器使用NO FILE SYSTEM CACHING。
例3-2 在以下语句中,NO FILE SYSTEM CACHING子句指示对于此特定表空间,文件系统级高速缓存将OFF。
- CREATE TABLESPACE table space name ... NO FILE SYSTEM CACHING
例3-3 以下语句对现有表空间禁用文件系统级高速缓存:
- ALTER TABLESPACE table space name ... NO FILE SYSTEM CACHING
例3-4 以下语句对现有表空间启用文件系统级高速缓存:
- ALTER TABLESPACE table space name ... FILE SYSTEM CACHING
经过上面的讲解,建议创建表空间时,表空间的容器采用裸设备或支持并发I/O或直接I/O的文件系统。
If you use a Journaled File System, it is easier to manage and maintain database files than it is if you use raw devices. In prior versions of AIX, file ystems used to support only buffered read and write and added extra contention due to undesirable inode locking. These two issues are solved by JFS2's Concurrent I/O and GPFS' Direct I/O, allowing file systems to be used in place of raw devices even when optimal performance is required. If placing the Oracle Database's logs on a JFS2 filesystem, the optimal configuration is to create the file system with option "agblksize=512" and to mount it with option "cio". This delivers logging performance similar, within a few percents, to the performance of a raw device. |
通过上面的介绍,我们了解了从AIX 5L开始已经支持在JFS,jfs2和GPFS上的DIO,从AIX 5.2开始又包含了CIO。那么这些怎么在AIX操作系统上设置呢?是不是就如上面所说的mount文件系统的时候加上cio选项就可以了呢?
见下文“AIX5L上的CIO,DIO”,引用自:
http://blog.chinaunix.net/u/10516/showart_718110.html
AIX JFS2的Concurrent IO(CIO)是指在进行文件IO操作时不需要给文件的i节点加锁,只有在需要对i节点本身进行修改时(如改变 文件的大小)时才锁定i节点。启用CIO有两种方法,一是应用程序可以通过使用系统调用open()的O_CIO选项以 CIO方式打开文件,或者在安装文件系统时以 CIO的模式安装。
Direct IO(DIO)屏蔽了AIX虚拟内存管理程序(VMM)对文件的内存缓冲功能,它不但减少了CPU的负载,同时也避免了由于缓存文件页面所造成的内存空间紧张,进而引发内存页面替换操作。Direct IO在读入或写出的文件页面不会马上再次使用的情况下是一种非常有效的IO方式。Direct IO虽屏蔽了对IO性能有好处的JFS2预读算法,但我们可以使用异步IO或加大单次IO的数据量来提高性能。
并发I/O(Concurrent I/O)介绍
本文适用平台为pSeries系列服务器,分四个部分描述:
1,概述
2,为什么使用并发I/O
3,如何使用并发I/O
4,注意事项
1,概述
基于JFS文件系统,AIX提供了缓冲读写(cache I/O)和直接读写(direct I/O)两种文件操作方式。
从AIX 5.2 ML01开始,对JFS2(Enhanced Journal Filesystem)文件系统,系统提供并发的I/O读写方式(concurrent I/O),本文将介绍并发I/O的使用。
2,为什么使用并发I/O
许多情况下,并发I/O的使用可提高系统的性能,尤其是关系数据库的应用系统。在很多基于数据库系统的测试项目中,并发I/O的使用,其性能表现完全可以同使用裸设备相对比。大多数情况下,并发I/O是同数据库配合使用的,借助于并发I/O功能,在数据库的性能没有降低的情况下,用户可以充分利用文件系统的特点。
数据库系统的应用中,使用文件系统存储数据,对比与使用裸设备,主要关注文件系统的以下几个特点:
1) 文件缓存
2) 文件的读写锁,或者是inode的锁
3) 后台同步进程(sync)
文件系统的这些特点,可以保证数据的一致性,提供数据的冗余,而且实际上,很多使用文件系统的应用,可以提高其性能。但是对数据库系统的应用,这反而会影响到系统的性能,所以数据库的存储系统,用户会选择裸设备存储数据,而不是文件系统,JFS2的文件系统提供的并发I/O的功能,可以很好的解决这一问题。
3,如何使用I/O
文件使用并发I/O可以有两种不同的方式,分别为:
1) 使用mount命令加载需要并发I/O的文件系统,参数为cio,命令使用如下 mount -o cio /filesystem_name
2) 使用open()系统调用打开相应文件,参数为O_CIO
这两种使用方式,对文件的作用域是不同的,当文件系统使用-o cio参数加载时,文件系统下的所有文件的缺省读写方式为并发I/O,而第二种使用方式,则是只有打开的文件使用并发 I/O的操作方式。另外,并发I/O也可以限定在文件系统的一组文件上,具体的方法是将需要并发I/O 方式操作的文件集中存放在单独的子目录下,使用namefs参数加载到文件系统的子目录下。例如,如果一个文件系统test包含部分文件使用并发I/O操作,而另一些则不需要,可以在文件系统/test下创建subtest子目录,将所有需要并发I/O操作的文件放于此目录下,而加载test文件系统时不需指定-o cio参数,但是加载subtest时需指定-o cio参数,相应的操作命令如下:
1)在/etc/vfs文件中增加文件类型namefs,如已有namefs文件类型,则跳过此步,
内容如下: namefs 1 none none
2)以普通方式加载test文件系统
mount /test
3)指定cio参数,加载/test/subtest,命令如下:
mount -v namefs -o cio /test/subtest /test
直接I/O遵从并发I/O的使用,使用并发I/O的文件自动使用直接I/O的通路,因而,并发I/O也满足直接I/O的限制:固定的对齐(alignment)方式和长度限制。如下表所示:
4,注意事项
并发I/O的使用可以提高文件系统的读写性能,这对数据库应用系统比较明显,对其他的应用系统,用户应根据实际情况选择,是使用直接I/O、并发I/O还是普通