作者:黄军敬
1. CUBRID Volume 概述
CUBRID的Volume是以文件形式存在的,当创建数据库后,会产生多个Volume文件。
如下图,标蓝色的文件为volume文件
[xdbms@NC-XQA-DEV5 databases]$ mkdir testdb [xdbms@NC-XQA-DEV5 databases]$ cd testdb [xdbms@NC-XQA-DEV5 testdb]$ cubrid createdb testdb Creating database with 5000 pages.
CUBRID 2008 R3.0
[xdbms@NC-XQA-DEV5 testdb]$ ll total 42168 -rw------- 1 xdbms xdbms 20480000 Dec 16 16:20 testdb -rw------- 1 xdbms xdbms 20480000 Dec 16 16:20 testdb_lgar_t -rw------- 1 xdbms xdbms 20480000 Dec 16 16:20 testdb_lgat -rw------- 1 xdbms xdbms 207 Dec 16 16:20 testdb_lginf -rw------- 1 xdbms xdbms 263 Dec 16 16:20 testdb_vinf |
CUBRID的Volume是由page组成的,而page是由slot组成的,当使用默认值创建数据库时,每个volume包含的page数为5000页,而每个page默认大小为4K,所以使用默认值产生的volume大小为2M。而每个page内部有多少个slot而是由所存储的记录的大小来决定的。这也是CUBRID不同于其他数据库的一个特征,通过OID(Object Identifier)来标识数据存储位置(Physical OID =Volume ID + Page ID + Slot ID)。
2. CUBRID Volume 分类
我们先来看看下图:
从图中可以看出,根据存在方式CUBRID Volume 分为三类:Permanent Volume,Temporary Volume,Backup Volume。
2.1 Permanent Volume
Permanent Volume 包含: Data Volume, Index Volume, Temp Volume, Generic Volume,
Log Volume。
在对已经创建好的数据库添加Volume时,可以根据-p参数指定Volume类型
[xdbms@NC-XQA-DEV5 testdb]$ cubrid addvoldb -p 'DATA' testdb 5000 [xdbms@NC-XQA-DEV5 testdb]$ cubrid addvoldb -p 'INDEX' testdb 5000 [xdbms@NC-XQA-DEV5 testdb]$ cubrid addvoldb -p 'TEMP' testdb 5000 [xdbms@NC-XQA-DEV5 testdb]$ cubrid addvoldb -p 'GENERIC' testdb 5000 [xdbms@NC-XQA-DEV5 testdb]$ cubrid addvoldb -p 'GENERIC' -n 'gen_1' testdb 5000 [xdbms@NC-XQA-DEV5 testdb]$ ll total 142300 -rw------- 1 xdbms xdbms 20480000 Dec 16 17:18 gen_1 -rw------- 1 xdbms xdbms 20480000 Dec 16 17:18 testdb -rw------- 1 xdbms xdbms 20480000 Dec 16 17:18 testdb_lgar_t -rw------- 1 xdbms xdbms 20480000 Dec 16 17:18 testdb_lgat -rw------- 1 xdbms xdbms 33 Dec 16 17:10 testdb_lgat__lock -rw------- 1 xdbms xdbms 207 Dec 16 16:20 testdb_lginf -rw------- 1 xdbms xdbms 522 Dec 16 17:18 testdb_vinf -rw------- 1 xdbms xdbms 20480000 Dec 16 17:15 testdb_x001 -rw------- 1 xdbms xdbms 20480000 Dec 16 17:16 testdb_x002 -rw------- 1 xdbms xdbms 20480000 Dec 16 17:17 testdb_x003 -rw------- 1 xdbms xdbms 20480000 Dec 16 17:18 testdb_x004 |
i. Data Volume: 用来存储表和数据
ii. Index Volume: 存放B+树索引, 从而能快速检索数据。
iii. Temp Volume: 用来存在关联查询,排序等所产生的临时数据,当数据库重启时,存在的数据会消失,但是它所占的物理空间大小是不变的。
iv. Generic Volume: 当添加Volume不指定类型使用默认值时,是以Generic形式存在的,它可以当作data, index, temp类型使用。
v. Log Volume又分为active log和archive log, 其中active log存储数据库最近期的操作,比如commit, aborted, 或 active transaction。当数据库出现问题时,可以用它来进行还原。active log 和archive log的区分点是,当active log空间用完时,它的内容将会被拷贝并生成一个新的log文件,即archive log。
如上图testdb_lgat为 active log
testdb_lgar_t为archive log
2.2 Temporary Temp Volume
Temporary Temp Volume和Permanent Volume是相对的,当所计算的数据超过了用户指定的Permanent Volume的空间大小时,数据库会在磁盘的空余空间创建Temporary Temp Volume,当数据库server进程处理完毕后,Temporary Temp Volume会被销毁掉。
通常在进行如下的大数据量查询时会创建Temporary Temp Volume:
1)SQL语句包含GROUP BY 或 ORDER BY
2)SQL语句包含子查询
3)关联查询
4)创建索引语句
2.3 Backup Volume
Backup Volume是对数据库进行备份时候,产生的文件, 其中{dbname}_bkvinf文件为记录存放Backup Volume明细的配置文件。
[xdbms@NC-XQA-DEV5 testdb]$ cubrid backupdb testdb Backup Volume Label: Level: 0, Unit: 0, Database testdb, Backup Time: Thu Dec 16 18:44:20 2010 [xdbms@NC-XQA-DEV5 testdb]$ ll total 285848 -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 gen_1 -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 testdb -rw------- 1 xdbms xdbms 146813952 Dec 16 18:44 testdb_bk0v000 -rw------- 1 xdbms xdbms 57 Dec 16 18:44 testdb_bkvinf -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 testdb_lgar000 -rw------- 1 xdbms xdbms 20475904 Dec 16 18:44 testdb_lgar_t -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 testdb_lgat -rw------- 1 xdbms xdbms 33 Dec 16 17:10 testdb_lgat__lock -rw------- 1 xdbms xdbms 305 Dec 16 18:44 testdb_lginf -rw------- 1 xdbms xdbms 522 Dec 16 17:18 testdb_vinf -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 testdb_x001 -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 testdb_x002 -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 testdb_x003 -rw------- 1 xdbms xdbms 20480000 Dec 16 18:44 testdb_x004 |
参考内容http://www.cubrid.org/manual/intro/intro_arch_volume.htm