1.存储文件一览:
1.1数据文件
存储数据的二进制文件,以dbf作为扩展名,在逻辑上有与之对应的表空间。大致分为如下:
行存储数据文件
对于系统自带的系统表空间SYSTEM,默认用户表空间MAIN以及用户自定义的行存数据表空间
可用来存储以行存储方式组织的B树、堆表以及图索引的数据
逻辑上采用段,簇,页分层的方式进行管理
列存储数据文件
对应系统自创的列存目录HMAIN以及用户白定义表空间列存目录
存储列存数据
逻辑上采用数据分片的方式进行管理
回滚数据文件
对应系统自创的回滚表空间ROLL
保存系统的回滚记录
临时数据文件
对应系统自创的临时数据表空间TEMP
用于存储临时表数据以及缓存不足时转存到磁盘的临时数据
1.2重做日志文件
在DM数据库中添加,删除,修改对象,或者改变数据,DM都会按照特定的格式将这些操作执行的结果写入到当前的重做日志文件中
重做日志文件是以log为扩展名的二进制文件。
注意:不是际有的以log为扩展名的都是重做日志交件
每个DM数据库安例必须至少有2个重做日志文件默认两个日志文件为DAMENG01.1og. DAMENGO2.log.这两个文件循环使用。
因为是数据库正在使用的日志文件,因此被称为联机日志文件。
存储数据库的事务日志,以便系统在出现故障时能够进行执障恢复
日志归档
配置了归档的运行模式下,会对重做日志文件进行归档;
归档日志文件以归档时间命名,广展名也是 log。
归档模式下运行会更安全,当出现故障时其丟失数据的可能性更小
重做日志归档是一些数据库高级功能,比如数据守护等的基础
1.3事件日志文件和跟踪日志文件
记录服务器运行期间信息的文本文件,用于分析定位系统错误。常见的有:
服务器事件日志
DM数据库系统在运行过程中,会在log子日录下产生一个“dm_实例名_日期°命名的事件日志文件。
事件日志文件对运行时的关键事件进行记众,如系統启动,关用。内存申请失败。IO错识等错误。
事件日志文件随着DM数据库服务的运行—直存在。
SQL跟踪日志
配置中打开了SQL跟综之后会生成的日志
记录运行期问服务路锁运行的SQL语句及其行结果
可在sqllog.ini中对所跟踪的内容进行定制
1.4各文件的存储方式
2.逻辑存储结构
DM使用表空间对数据文件在逻辑上进行管理,按照数据的类型,表空间大致分为如下:
系统数据表空间
回滚表空间
临时表空间
用户存储表空间
所有的数据文件组合在一起被划分到一个或者多个表空间中,所有表数据都存放在这些表空间中。
表空何使得存储有更好的扩限性。
除列存数据外,其他的表空间数据都使用段、 簇和页分层的逻辑进行管理
2.2行存数据表空间的逻辑分层
表空间划分为段、族和页。可以使得DM数据库能够更加高效地控制磁盘空间的利用率。
每个表空间由一个或多个数据文件组成,创建表空间时指定或后的添加:
2.3数据页概述
数据页是DM数据库中最小的数据存储单元。
页的大小对于物理存储空间特定数量的存储字节,页的大小可以分为4kb,8kb,16kb或者32kb,用户在创建数据库时可以指定,默认的大小为8kb,一旦创建好了数据库,则该数据库的整个生命周期内,页的大小都不能够改变。
页在头部和尾邮预留一些空间,记录控制信息,称为页头和页尾。
使用(表空间ID, 文件ID,页号)的组合来标识定位一个数据页
一个经典的表数据页的结构图
页头控制信息包含关于页类型,页地址等信息
页的中部存储数据
在数据页的尾部专门留了一部分空间用于存放偏移数组,用于表示页上的空间占用情况以便管理数据页自身的空间。
2.4簇概述
簇是数据页的上级逻辑,由同一个数据文件中16个或者32个或64个连续的数据页组成
簇的大小由用户在创建数据库时指定,默认的大小为16kb,一旦创建好了数据库,则该数据库的整个生命周期内,页的大小都不能够改变。
簇是数据库对象分配存储空间的基本单位
根据簇内数据页的使用情况,将簇分为:空闲簇,半满簇,全满簇。
2.5表空间内簇的管理
●使用32Byte可以来描述一 个领, 其中使用-个位图了描述该膜内数据页的使用情况。
族链表指针状态段d页 标记位日
●使用专用的数据页来记录簇的信息,这些员破称为簇描述页。
●一个控制页内规定能够管理固定个数的簇,管理簇的个数= page size /64;
●数据文件按照描述页 理的页数来平均分面描述页。
2.6段概述
段是簇的上级逻辑单元,是按照数据库对能及数据类型划分的簇的逻辑集合。
DM按照数据的使用类型,将段分为以下几种类型
数据段:”可以被定义成特定对象的数据结构,如表易据段、索引数据段。LOB数据段等。表中的数据以表数据段结构存储,索引中的数据以索引数据段结构存储。
回滚段:保存了对象在事务中操作的信息,所有对象的回滚段都在回滚表空间中。用于回滚还原数据以及保证多事务并发时的读一致性。
3.表数据组织方式
3.1概述
行存储的表有两种组织方式:
B树
堆表
B树方式
最广泛的存储形式,其数据是按B树索引组织的
普通表、分区表、B树索引的物理存储格式都是B树。
B树使用的是逻辑ROWID,从1开始递增。
B树索引的数据按照用户指定的聚族key进行排序。当未指定聚集key时,使用逻辑rowid作为聚集key.
堆表
堆表是指采用了物理ROWID形式的表,即使用文件号、页号和页内偏移而得到ROWID值。B树方式逻辑ROWID的生成和存储影响了插入的效率,使用链表的方式进行存储。
3.2 B树存储结构
B树中的每个节点都是一个 数据页。
实际数据全部存储在叶子节点上,中间节点(也称为B树内节点)仅用来存放B树的分
支信息,其中每个记录都指向一个下级节点(页)。
为B树分配两个数据段:
内节点段,存放内节点数据;
叶子段,存放叶子节点数据。
B树是分层的,叶子节点的层数为0,依次递增
B树根页的下一个页作为B树的控制页,其中存放B树的行数、NEXT ROWID等控制
信息。
B树的根页中记录叶子节点段与内节点段的段头信息
3.3数据页的组织方式
不管是B树的内节点还是叶子节点,其数据页的组织方式是相同的。只是其中的记录
格式有所不同。
页头控制信息包含了关于页类型。页地址等信息。
还存储了该页内数据机关的信息,包括记录的数量,首个空记录位置号
还频留了该页所属的索引的树数据段的信息,但仅根页才公设置该值息
页的中部存放数据。国数据交动,有效记录间的空间被认为是己间记员,在页上挂链以便后快使用
在数据页的尾部专门留出一部分空间用于存放行偏移改组, 用标识页上的空间占用情况以便管理数据页自身的空间。
3.4记录组织方式
不管是B树的内节点还是叶子节点,其数据页的组织方式是相同的。只是其中的记录
格式有所不同。
DM在组织数据记录时,为了方便读取,并不是完全按照列定义的逻辑顺序来组织记
录;而是根据列的数据类型,采用先定长类型字段后变长类型字段的组织方式。
快速加列会允许后加的列打破该规定,属于优化,这里不详述。
内节点记录
内节点记录就是叶子节点中作为key的字段加上一个用6Byte (fleid、 pageno) 来描述下级节点页的指针。
B树记录描述
B树根据其所属的索引的定义,构建逻辑上的描述,根据描述来解析数据页中的记录。
根据记录的不同,分为内节点描述及叶子描述。
3.5堆表存储结构
堆表的数据是以挂链形式存储的,一般情况下,支持最多128个链表,每个链表都使
用一个独立的数据段。
也可以将堆表的链表视为“扁平B树”,在系统中描述其的内存结构就是B树的描述结
构,链表中的数据页都是叶子数据页。
堆表的数据页及记录的组织方式与B树方式相同
3.6术语与结构
4.大字段
行存储的数据存放在数据页中,记录的长度有限制
大字段的数据可能会导致记录长度超长
大字段数据有两种存储方式
行内存储
行外存储
表中如果存储有大字段(BLOB、CLOB) 数据,则会在其所在的表空间内另外分配一
个LOB段来存储大字段数据
4.1外行存储
如果大字段的数据无法在行内存储,则转为行外存储,其行内存放真实数据的指针。
根据行外存储数据的长度,可采用两种存储方式
紧密存储
独立数据页存储
紧密存储
类似与记录的存储,在一个数据页内存储多个大字段数据
一般用于大字段的长度小于页-半的情况
紧密存储的大字段页称为LOB REC PAGE
独立数据页存储
长度超过页一 半,甚至可能要使用多个页
为该大字段分配其专属的一个或多个数据页
独立存储的大字段数据页称为LOC DATA PAGE
LOB REC PAGE和LOB DATA PAGE都存放在该表的LOB段中。
5.1行列存储对比
行存储:
优点:
.数据被保存在一起
INSERT、UPDATE DELETE操作简便
基于索引的整条记录检索非常高效
缺点:
●经常需要读取整条记录
无法有效的进行数据压缩
分析型道询1代价大
适用场曼:
OLTP:单机主备、读写分离、RAC
列存储:
优点:
查询只需读取需要的列,大幅减少10
数据压缩比非常高
●任何列都能作为卖引数据即索引
缺点:
.高更组装列形成记录
.
INSERT. UPDATE DELETE代价较大
不适合增删改密集的OLTP型应用
适用场景:
OLAP/数据仓库等道询密集型应用
5.2列存数据表空间的文件结构
DM的列存数用来处理大量的数据,所以也称为HUGETABLE.
列存数据文件存储于表空间的列存目录中。
CREATE TABLESPACC TS NAME WITH HUGE PATH e,HT SSPACE:
列存数据不再按照数据页方式进行管理,而是通过HFS (Huge File System) 存储机制来管理的,它相当于个文件系统,其管理相对简单。
创建一个列存目录,其实就是创建一个2的文件目录。在创建-一个列存表并插入数据时,数据库会在指定的HUGE目录下创建一系列的目录及文件。
每个列都有一个或多个文件
5.3列存数据表空间的逻辑分层
列存数据表根据固定的记录行数将数据划分为不同的数据区(Section) 。
数据区的大小在创建列存表时指定。区的大小必须是2的n次方。默认值为65536行。
数据区内并没有该区内数据的描述,其描述是通过行存辅助表来存储的。
两种列存表:事务型的和非事务型的。通过列表存储参数指定,两者对数据的组织方式有所
不同。CREATE HUGE TABLE x0x storage( with| withoutdelta, section size(10) )
转存失败重新上传取消
5.4非事务型列存
只有一个辅助表:
SAUX来存储数据区信息。
每次修改都直接修改列存储数据文件。
不支持事务特性。
5.5事务型列存
有4个辅助表:
$AUX :数据区信息
$RAUX擂入的未满区的数据
$DAUX :删除的数据
$UAUX更新的数据
插入新数据时,如果当前插入的数据未满一个区, 则先插入到RAUX表中,待后续插入填满后再移到列存文件中:
修改和删除数据时,直接将信息记录到UAUX和DAUX表中,不直接修改列存文件的数据。
当管理员数据重整时,才将修改同步到列存文件中。
支持事务特性
5.6列存文件中数据区的数据组织
如果定义的数据区内行数section_size
定长类型
●一个区的长度是固定的: section size*type len
●数据顺序排列存储
变长类型
●数据头部有section size + 1个整型数组记录区内数据的偏移
●NULL数据的偏移为-1
●一个记录的数据长度=下一个有效偏移-自身偏移
文章
阅读量
获赞