达梦数据库体系架构

  1. DM体系架构
    1. 数据库实例

实例一般是由一个正在运行的DM后台进程(包含多个线程)以及一个大型的共享内存组成的。简单来说,实例就是操作达梦数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。

DM数据库存储在服务器的磁盘上,而DM实例存储在服务器的内存中。通过运行DM实例,可以操作DM数据库中的内容。在任何时候,一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库)。

在大多数情况下,一个数据库也只有一个实例对其进行操作,但是在DM共享磁盘高性能集群中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。此时,可以同时从多台不同的计算机访问这个数据库。

    1. 内存结构

数据库管理系统是一种对内存申请和释放操作频率很高的软件,如果每次对内存的使用都调用操作系统函数来申请和释放,效率会比较低,数据库管理系统使用自己的内存管理可以带下以下好处:

  1. 申请、释放内存效率更高。
  2. 能够有效地了解内存的使用情况。
  3. 易于发现内存泄漏和内存写越界的问题。

DM数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。

    1. 线程结构

DM数据库使用的是单进程、多线程的架构(跟Oracle的共享模式类似,Oracle的专用模式是多进程构架),这跟MySQL是一样的。

DM数据库使用“对称服务器构架”的单进程、多线程结构。这种对称服务器结构在有效地利用了系统资源的同时又提供了较高的可伸缩性能,这里所指的线程即为操作系统的线程。服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的线程完成不同的任务。线程通过一定的同步机制对数据结构进行并发访问和处理,以完成客户提交的各种任务。

达梦数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。DM进程中主要包括:监听线程、IO线程、工作线程、调度线程、日志线程等。

    1. 数据库逻辑存储结构

DM数据库逻辑存储结构描述了数据库内部数据的组织和管理方式。达梦数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在DM数据库内部,所有的数据文件组合在一起被划分到一个或多个表空间中,所有的数据库内部对象都存放在这些表空间中,同时,表空间被进一步划分为段、簇和页(也称块)。通过这种细分,可以使用DM数据库更加高效地控制磁盘空间的利用率。

存储的层次结构如下:

  1. 系统一个或多个表空间组成。
  2. 每个表空间由一个或多个数据文件组成。
  3. 每个数据文件由一个或多个簇组成。
  4. 段是簇的上级逻辑单元,一个段可以跨多个数据文件。
  5. 簇由磁盘上连接的页(块)组成,一个簇只能属于一个数据文件。
  6. 页(块)是数据库中最小的分配单元,也是数据库使用的最小的I/O单元。

      1. 页(对应Oracle的块)

数据页(也称数据块)是DM数据库中最小的数据存储单元。页的大小对应物理存储空间上特定数量的存储字节,在DM数据库中,页的大小可以为4KB、8KB、16KB或32KB,用户在创建数据库时可以指定页的大小,默认大小为8KB,一旦创建好了数据库,而在该库的整个生命周期内,页大小都不能够改变。

在DM数据库页的格式中,页头控制信息包含了页类型、页地址等信息。而的中部存放数据,为了更好地利用数据页,在数据页的尾部专门留出一部分空间用于存放行偏移数组,行偏移数组用于标识页上的空间占用情况以便管理数据页自身的空间。

在绝大多数情况下,用户无需干预DM数据库对数据页的管理,但是DM数据库还是提供了选项供用户选择,傅得在某些情况下可以为用户提供更佳的数据处理性能。

FILLFACTOR是DM数据库提供的一个与性能有关的数据库页级存储参数,它指定一个数据页初始化后插入数据时最大可以使用空间的百分比(100),该值在创建表/索引时可以指定。

设置FILLFACTOR参数的值,是为了指定数据页中的可以空间百分比(FILLFACTOR)和可扩展空间百分比(100 - FILLFACTOR)。可用空间用来执行更多的INSERT操作,可扩展空间用来数据页保留一定的空间,以防止在以后的更新操作中增加列或修改变长列的长度时,引起数据页的频繁分裂,当插入的数据占据的数据页空间百分比低于FILLFACTOR时,允许数据插入该页,否则将当前数据页中的数据分为两部分,一部分保留在当前数据页中,另一部分存入一个新页中。

对于DBA来说,使用FILLFACTOR时应该在空间和性能之间进行权衡,为了充分利用空间,用户可以设置一个很高的FILLFACTOR值,如100,但是这可能会导致在后续的更新数据时,频繁引起页分裂,而导致需要大量的IO操作。为了提高更新数据的性能,可以设置一个相对较低的FILLFACTOR值,使得后续执行更新操作时,可以尽量避免数据页的分裂,提升IO性能,但这是以牺牲空间利用率来换取性能的提高。

      1. 簇(对应Oracle的区)

簇是数据页的上级逻辑单元(对应Oracle数据库的区(Extent)的概念),由同一个数据文件中16个或32个连接的页组成。在DM数据库中簇的大小由用户在创建数据库时指定,默认大小为16个页。和数据页的大小一样,一旦创建数据库后,此后该数据库的簇的大小就不能修改了。

假设某个数据文件大小为32MB,页大小为8KB,则共有32MB/8KB/16=256个簇,每个簇的大小为8KB*16=128KB。

分配簇:

当创建一个表/索引时,DM为表/索引的数据段分配至少一个簇,同时数据库会自动生成对应数量的空闲数据页,供后续操作使用。如果初始化分配的簇中所有数据页都已经用完,或者新插入/更新数据需要更多的空间,DM数据库将自动分配新的簇。在默认情况下,DM数据库在倾巢出动表/索引时,初始分配1个簇,当初始分配的空间用完时,DM数据库会自动扩展。

当DM数据库的表空间为新的簇分配空闲空间时,首先在表空间中按文件从小到大的顺序在各个数据文件中查找可用的空闲簇,找到后进行分配;如果各个数据文件都没有空闲簇,则在各数据文件中查找空闲空间足够的,将需要的空间行进行格式化,然后进行分配;如果各数据文件的空闲空间也不够,则选择一个数据文件进行扩充。

释放簇:

对于用户数据表空间,在用户将一个数据段对应的表/索引对象DROP之前,该表对应的数据段会保留至少一个簇不被回收到表空间中,在删除表/索引对象中的记录时,DM数据库通过修改数据文件中的位图来释放簇,释放后的簇被视为空闲簇,可以供其他对象使用。当用户删除了表中所有记录时,DM数据库仍然会为该表保留1或2个簇供后续使用。如果用户使用DROP语句删除表/索引对象时,则此表/索引对应的段以及段中包含的簇将全部收回,并供存储在此表空间的其他模式对象使用。

对于临时表空间,DM数据库会自动释放在执行SQL过程中产生的临时段,并将属于此临时段的簇空间还给临时表空间。需要注意的是,临时表空间文件在磁盘所占大小并不会因此而缩减,用户可以通过系统函数SF_RESET_TEMP_TS来进行磁盘空间的清理。

对于回滚表空间,DM数据库将定期检查回滚段,并确定是否需要从回滚段中释放一个或多个簇。

段是簇的上级逻辑分区单元,段由一个或多个簇组成,在同一个表空间中,段可以包含来自不同数据文件的簇,即一个段可以跨越不同的数据文件。而一个簇以及该簇所包含的数据页则只能来自一个数据文件,是连续的16个或32个数据页。由于簇的数量是按需分配的,因此数据段中的不同簇在磁盘上不一定是连续的。

一般情况下,一个对象(表、索引…)对应一个段。

段的类型:

  1. 数据段

段可以被定义成特定对象的数据结构,如表数据段或索引数据段。表中的数据以表数据段结构存储,索引中的数据以索引数据段结构存储。DM以簇为单位给每个数据段分配空间,当数据段的簇空间用完时,DM数据库就给该段重新分配簇,段的分配和释放完全由DM数据库自动完成,可以在创建表/索引时设置存储参数来决定数据段的簇如何分配。

当用户使用create语句创建表/索引时,DM数据库会创建相应的数据段。表/索引的存储参数用来决定对应数据段的簇如何被分配,这些参数将会影响与对象相关的数据段的存储与访问效率,对于分区表,每个分区使用单独的数据段来存储数据,对于分区表上的非分区索引,使用一个索引数据段来存储所有索引数据,而对于分区索引,每个分区使用一个单独的索引数据段来存储相应分区索引的数据。

表的数据段和与其相关的索引段不一定存储在同一个表空间中,用户可以在创建表和索引时,指定不同的表空间存储参数。

  1. 回滚段

DM数据库在回滚表空间的回滚段中保存了用于恢复数据库操作的信息。对于未提交事务,当执行回滚时,回滚记录被用来回滚变更,在数据库恢复阶段,回滚记录被用来做任何未提交变更的回滚;在多个并发事务运行期间,回滚段为用户提供一致性读(CR读)。所有正在读取受影响行的用户将不会看到行的任何改变,直到它们事务提交后发出新的查询才能看到数据的变化。

DM数据库提供了全自动回滚管理机制来管理回滚信息和回滚空间,自动回滚管理消除了管理回滚段的复杂性。此外系统将尽可能保存回滚信息,来满足用户查询回滚信息的需要。事务被提交后,回滚数据不能再回滚或恢复,但是从数据库一致性的角度出发,长时间运行查询可以需要这些早期的回滚信息来生成早期的数据页镜像,基于此,数据库需要尽可能长时间的保存回滚信息。DM数据库会收集回滚信息的使用情况,并根据统计结果对回滚信息保存周期进行调整,数据库将回滚信息保存周期设为此系统中活动的最长的查询时间稍长。

  1. 临时段

在DM数据库中,所有的临时段都创建在临时表空间中,这样可以分流磁盘设备的IO,也可以减少由于在SYSTEM或其他表空间内频繁创建临时数据段而造成的碎片。

在处理一个查询时,经常需要为SQL语句的解析与执行的中间结果准备临时空间,DM数据库会自动地分配临时段的磁盘空间。例如,DM数据库在进行排序操作时就可能需要使用临时段,当排序操作可以在内存中执行,或SQL可以利用索引执行时,就不必创建临时段。对于临时表及其索引,DM数据库也会为它们分配临时段。临时段的分配和释放完全由系统自动控制,用户不能手工进行干预。

      1. 表空间

DM 数据库的表空间是一个逻辑概念,其目的主要是为了方便数据库的管理,数据库的所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。一个表空间由一个或多个数据文件组成。

在创建DM数据库时,会自动创建5个表空间:

  1. SYSTEM表空间:存储数据库的字典信息,对应Oracle数据库中的SYSTEM表空间和SYSAUX表空间。SYSTEM表空间存放了DM数据库全局字典信息和全局系统数据,是DM数据库能够正常运行的必要前提,默认对应数据文件 SYSTEM.DBF。CREATE TABLE等DDL操作会修改SYSTEM表空间数据。
  2. ROLL表空间:事务回滚数据。ROLL表空间完全由DM数据库自动维护,用户无需干预,该表空间用来存放事务运行过程中执行DML操作之前的值,从而为访问该表的其他用户提供数据的一致性视图。对应Oracle数据库中的UNDO表空间。

ROLL表空间存放DM数据库运行过程中产生的所有回滚记录。DM中几乎所有的数据库修改操作都会生成回滚记录,并保存在ROLL表空间的数据文件中。ROLL表空间是数据库全局对象,不论修改哪一个表空间,生成的回滚记录都是写入ROLL表空间,该表空间由系统自动维护,默认数据文件为ROLL.DBF。

  1. MAIN表空间:用户默认表空间,MAIN表空间在初始化数据库时会自动创建一个大小为128MB的数据文件(MAIN.dbf),在创建用户时,如果没有指定默认表空间,则系统自动指定MAIN表空间为用户的默认表空间。对应Oracle数据库中的USERS表空间。
  2. TEMP表空间:临时表空间,用于创建索引时,无法在内存中完成的排序操作,SQL语句中间结果集,用户创建临时表时使用到的表空间。对应Oracle数据库中的TEMP表空间。

TEMP表空间完全由DM数据库自动维护。当用户的SQL语句需要磁盘空间来完成某个操作时,DM数据库会从TEMP表空间中分配临时段,如创建索引、无法在内存中完成的排序操作、SQL语句中间结果集以及用户创建临时表等都会使用到TEMP表空间。

TEMP表空间存放临时表数据以及数据库运行过程中产生的临时数据。在数据库运行过程中,SORT、HASH JOIN 等操作都可能会生成临时结果集,它们作为临时数据存放在 TEMP 表空间中。TEMP 表空间是数据库全局对象,由系统自动维护。若数据库重启,保存在 TEMP 表空间中的所有数据都会丢失。TEMP 表空间的默认数据文件为 TEMP.DBF。

  1. HMAIN表空间(大表空间):简称HTS表空间,默认Huge表数据的表空间,Oracle数据库中没有该类型的表空间。(Huge表针对海量数据的存储和高效分析的一种表,实现了Huge File Sysem存储机制)

HTS表空间完全由DM数据库自动维护,用户无需进干涉,当用户创建HFS表时,在未指定HTS表空间的情况下,HMAIN充当默认HTS表空间。

HMAIN 表空间没有默认的数据文件,如果需要使用时,需要手工去创建。

每个用户都有一个默认的表空间。对比于SYSSSO、SYSAUDITOR系统用户,默认的用户表空间是SYSTEM,SYSDBA的默认表空间为MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定MAIN表空间为用户的默认表空间。用户在创建表的时候,当指定了存储表空间A,并且和当前用户的默认表空间B不一致时,表存储在用户指定的表空间A中,并且默认情况下,在这张表上建立的索引也将存储在表空间A中,但是用户的默认表空间是不变的,仍是表空间B。

达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值