16.3 非事务型 HUGE 表
对非事务型 HUGE 表的增、删、改是直接对 HUGE 表进行写操作的,不写 UNDO 日志,
不通过 BUFFER 缓存,直接操纵文件,速度快,但也因此导致不支持事务。另外,非事务
型 HUGE 表中的 ROWID 是不固定的。
当非事务型 HUGE 表在操作过程中出现系统崩溃或者断电等问题时,因为修改时采取的
是直接写的策略,所以有可能会出现数据不一致的问题。为了保证数据的一致性,在操作时
可以适当地做一些日志来保证数据的完整性,完整性保证策略主要是通过数据的镜像来实现
的,镜像的不同程度可以实现不同程度的完整性恢复。镜像文件是放在表目录中的以.mir
为扩展名的文件。DM 提供三种方案:
1. LOG NONE:不做镜像。相当于不做数据一致性的保证,如果出错只能手动通过系
统函数来修复表数据,当然速度是最快的,不需要额外的 IO,这种选项如果用户
明确知道自己的环境不会出现问题可以采用,效率最高。
2. LOG LAST:做部分镜像。但是在任何时候都只对当前操作的区做镜像,如果当前
区的操作完成了,那么这个镜像也就失效了,可能会被下一个被操作区覆盖,这样
做的好处是镜像文件不会太大,同时也可以保证数据是完整的。但有可能遇到的问
题是:一次操作很多的情况下,有可能一部分数据已经完成,另一部分数据还没有
来得及做的问题。如果用户能接受这个问题的话这个选择不失为最佳选择,这也是
系统默认的选择。
3. LOG ALL:全部做镜像。在操作过程中,所有被修改的区都会被记录下来,当一
次操作修改的数据过多时,镜像文件有可能会很大,但好处是,能够保证操作完整
性。比如,在操作过程中失败了,那么这个操作会完整的撤消,不存在上面一部分
修改部分还没修改的问题。
需要注意的是,若创建数据库时使用参数 HUGE_WITH_DELTA 的缺省值 1 ,则不支持
创建非事务性 HUG 表。
16.3.1
AUX 辅助表
对于每个 HUGE 表,相应地配备一个 AUX 辅助表来管理其数据。因为在 HUGE 表文件
中只存储了数据,辅助表用来管理以及辅助系统用户操作这些数据,AUX 辅助表是在创建
HUGE 表时系统自动创建的,表名为―表名$AUX‖,如果该 HUGE 表为分区表,则辅助表名
为“子表名$AUX”。辅助表的表名长度不能大于 128 个字节。AUX 辅助表中每一条记录对
应文件中的一个数据区,包括下面 15 列:
1.COLID:表示当前这条记录对应的区所在的列的列 ID 号;
2.SEC_ID:表示当前这个记录对应的区的区 ID 号,每一个区都有一个 ID 号,并且
唯一;
3.FILE_ID:表示这个区的数据所在的文件号;
4.OFFSET:表示这个区的数据在文件中的偏移位置,4K 对齐;
5.COUNT:表示这个区中存储的数据总数(有可能包括被删除的数据);
6.ACOUNT:表示这个区中存储的实际数据行数;
7.N_LEN:表示这个区中存储的数据在文件中的长度,4K 对齐的;
第 16 章 管理列存储表
155
8.N_NULL:表示这个区中的数据中包括的 NULL 值的行数;
9.N_DIST:表示这个区中所有数据互不相同的行数;
10.CPR_FLAG:表示这个区是否压缩;
11.ENC_FLAG:表示这个区是否加密;
12.CHKSUM:用来存储标记位;
13.MAX_VAL:表示这个区中的最大值,精确值;
14.MIN_VAL:表示这个区中的最小值,精确值;
15.SUM_VAL:表示这个区中所有值的和,精确值。
前面 7 列是用来控制数据存取的,根据这些信息就可以知道这个区的具体存储位置、
长度及基本信息。后面 8 列都是用来对这个区进行统计分析的。其中,COLID 和 SEC_ID
的组合键为辅助表的聚集关键字。
16.4 事务型 HUGE 表
非事务型 HUGE 表在进行增、删、改时直接对 HUGE 表进行写操作,每次写操作需要至
少对一个区进行 IO,导致 IO 量较大,且并发性能不高。
为此,DM 推出了事务型 HUGE 表,通过增加 RAUX、DAUX 和 UAUX 行辅助表,减少了
事务型 HUGE 表增、删、改操作的 IO,提高效率,同时提高并行性能。事务型 HUGE 表支
持 UNDO 日志,实现了事务特性。
16.4.1
RAUX 行辅助表
RAUX 行辅助表存放最后一个数据区(不够存满一个数据区)的数据,表名为―HUGE 表
名$RAUX‖。如果该 HUGE 表为分区表,则辅助表名为“子表名$RAUX”。辅助表的表名长度
不能大于 128 个字节。
RAUX 行辅助表中内容对应于 HUGE 表中的最后一部分记录(不够存满一个数据区的)。
RAUX 表与 HUGE 表结构相同,不论数据在那个表中,每一行数据的 ROWID 固定不变。
16.4.2
DAUX 行辅助表
DAUX 行辅助表记录 HUGE 表数据文件中被删除的数据,表名为―HUGE 表名$DAUX‖。
如果该 HUGE 表为分区表,则辅助表名为“子表名$DAUX”。辅助表的表名长度不能大于 128
个字节。
16.4.3
UAUX 行辅助表
UAUX 行辅助表记录 HUGE 表被更新的数据的新值,表名为―HUGE 表名$UAUX‖。如果
该 HUGE 表为分区表,则辅助表名为“子表名$UAUX”。辅助表的表名长度不能大于 128 个
字节。
第 16 章 管理列存储表
156
16.5 创建 HUGE 表
当用户确定自己要使用 HUGE 表的时候,首先需要在模式中创建新表,创建一个 HUGE
表需要有 CREATE TABLE 数据库权限,要想在其他用户的模式中创建新表需要有 CREATE
ANY TABLE 数据库权限。
但是创建一个 HUGE 表时,如果不使用默认的表空间,则必须要先创建一个 HUGE
TABLESPACE(HTS),创建 HTS 语法如下:
CREATE HUGE TABLESPACE <表空间名> PATH <表空间路径>;
参数说明:
1. <表空间名> 表空间的名称,表空间名称最大长度 128 字节;
2. <表空间路径>
指明新生成的表空间在操作系统下的路径。
示例如下:
CREATE HUGE TABLESPACE HTS_NAME PATH 'e:\HTSSPACE';
创建 HUGE 表的语法请参考《DM8_SQL 语言使用手册》。
在创建 HUGE 表时,根据 WITH|WITHOUT DELTA 区分创建非事务型 HUGE 表还是事
务型 HUGE 表。指定 WITH DELTA,创建事务型 HUGE 表;指定 WITHOUT DELTA,则创
建非事务型 HUGE 表,缺省为 WITH DELTA。若需要创建非事务型 HUGE 表,在创建数据库
时需要将参数 HUGE_WITH_DELTA 置为 0。
例如,创建非事务型 HUGE 表 T1。
CREATE HUGE TABLE T1 (A INT, B INT) STORAGE(WITHOUT DELTA);
创建事务型 HUGE 表 T2。
CREATE HUGE TABLE T2 (A INT, B INT) STORAGE(WITH DELTA);
需要注意的是,当指定创建事务型 HUGE 表时,指定 HUGE 表镜像文件方案的选项 LOG
NONE|LOG LAST|LOG ALL 失效。
另外,在创建表 HUGE 表时,可以指定表的存储属性,存储属性包括如下几个方面:
1. 区大小(一个区的数据行数)
区大小可以通过设置表的存储属性来指定,区的大小必须是 2 的多少次方,如果不是
则向上对齐。取值范围:1024 行~1024*1024 行。默认值为 65536 行。
例如,创建 HUGE 表 test,指定区的大小为 2048,其它默认。
CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE(SECTION (2048));
例如,创建 HUGE 表 test,所有列都采用默认值。
CREATE HUGE TABLE test(name VARCHAR, sno INT);
2. 是否记录区统计信息,即在插入时是否记下其最大值最小值
关于这一点有一个原则,如果这个列经常用作查询条件,并且数据不是很均匀,或者基
本是有序的,那么做统计信息是非常有用的,反之则可以不做统计。缺省情况下,为记录区
统计信息。如果想不记录,可通过设置 STAT NONE 实现。
例如,创建 HUGE 表 test,通过列存储属性指定统计信息属性(不记录区统计信息)。
CREATE HUGE TABLE test(name VARCHAR STORAGE (STAT NONE), sno INT);
又如,创建 HUGE 表 test,通过表存储属性指定统计信息属性(不记录区统计信息)。
CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE (STAT NONE);
3. 所属的表空间
创建 HUGE 表,需要通过存储属性指定其所在的表空间,不指定则存储于默认表空间
HMAIN 中。HUGE 表指定的表空间只能是 HTS 表空间,例如 HTS_NAME 为已指定 HTS 表空
第 16 章 管理列存储表
157
间。
CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE (ON HTS_NAME)
4. 文件大小
创建 HUGE 表时还可以指定单个文件的大小,通过表的存储属性来指定,取值范围为
16M~1024*1024M。不指定则默认为 64M。文件大小必须是 2 的多少次方,如果不是则向
上对齐
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




