近期有幸参加达梦DM8 DCA培训课程,之前也看过部分达梦的技术资料,俗话说好记性不如烂笔头,现将个人部分认识分享如下,知行合一,也希望后续能进一步提高达梦数据库技术水平。学一门新的数据库产品,我喜欢从产品简介、安装配置、日常管理、体系结构、备份恢复、高可用方案、SQL开发、性能调优几个方面入手,本文主要从产品简介和体系结构两方面进行分享。
达梦数据库由武汉达梦公司研发,1993年发布DM1,按照2~4年一个大版本的节奏迭代,在2019年发布了DM8,并作为稳定版本推广至今。
在产品特性上,支持基于行的多版本并发控制(MVCC),这一点与oracle基于块的MVCC有所不同。其存储引擎支持行存和列存。在兼容性方面,DM8支持SQL92标准,支持视图、触发器、存储过程、函数、序列等对象,对Oracle兼容性较好,达梦公司也提供了DMDTS产品,可实现从Oracle到DM的在线迁移,这很大程度上减少了开发适配成本和迁移的工作量。
提到体系结构,就必须提到两个概念,数据库和实例。
数据库:指的是磁盘上存放在DM数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等。
实例:一般是由一组正在运行的DM 后台进程/线程以及一个大型的共享内存组成。实例是操作DM数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。
DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在 DM 数据库内部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象都存放在这些表空间中。同时,表空间被进一步划分为段、簇和页(也称块)。通过这种细分,可以使得 DM 数据库能够更加高效地控制磁盘空间的利用率。
由上图可以看出,在 DM8 中存储的层次结构如下:
(1)数据库由一个或多个表空间组成;
(2)每个表空间由一个或多个数据文件组成;
(3)每个数据文件由一个或多个簇组成;
(4)段是簇的上级逻辑单元,一个段可以跨多个数据文件;
(5)簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
(6)页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元。
DM 数据库物理存储结构包括:
(1)用于进行功能设置的配置文件;
(2)用于记录文件分布的控制文件;
(3)用于保存用户实际数据的数据文件、重做日志文件、归档日志文件、备份文件;
(4)用来进行问题跟踪的跟踪日志文件等。
DM 数据库的内存结构主要包括内存池、缓冲区、排序取、哈希区等。
(1)内存池
DM Server 的内存池包括共享内存池和其他一些运行时内存池。
共享内存池:是DM Server在启动时从操作系统申请的一大片内存;当系统运行过程中需要申请内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池;
运行时内存池:DM Server的一些功能模块在运行时还会使用自己的运行时内存池,这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、JVM虚拟机内存池等。
(2)缓冲区
数据缓冲区:在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。
日志缓冲区:日志缓冲区适用于存放重做日志的内存缓冲区;为了避免由于直接的磁盘IO而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入到磁盘,而是和数据页一样,先将其放置到日志缓冲区中;
字典缓冲区:字典缓冲区主要存储一些数据字典信息,如模式、表、列、触发器等;
SQL缓冲区:SQL缓冲区提供在执行SQL语句过程中所需要的内存,包括SQL语句、执行计划、 结果集缓存。
(3)排序区
排序缓冲区提供数据排序所需要的内存空间。当用户执行SQL语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。
(4)哈希区
DM8提供了为哈希连接而设定的缓冲区。
(1)监听线程
监听线程主要的任务是在服务器端口上进行循环监听,负责客户的连接请求,保证在处理大量客户连接时系统具有较短的响应时间。
(2)工作线程
工作线程是达梦服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。
(3)IO线程
主要用来处理数据库IO读写操作,IO线程在启动后,通常都处于睡眠状态;
(4)调度线程:
调度线程用于接管系统中所有需要定时调度的任务,调度线程每秒钟轮训一次。
(5)日志flush线程:
事务运行时,会把生成的redo日志保留在日志缓冲区,当事务提交或者执行检查点时,会通知flush线程进行日志刷盘;
(6)日志归档线程:
日志归档线程包括异步归档线程,负责远程异步归档任务。
(7)其他线程:
回滚段清理PURGE线程,审计写文件线程、重演捕获写文件线程等。
文章
阅读量
获赞