DM数据库体系结构简介

达梦数据库系统结构共分为四部分,分别为:逻辑结构、物理存储结构、内存结构以及DM线程结构,本文将分别对这四部分做介绍,仅做个人学习之用。
本文所提到的达梦数据库版本,为DM v8(开发版)

一、达梦逻辑结构

1、 数据库和数据库实例在DM8里面的区别:
(1) 数据库: DM数据库指的是磁盘上存放在DM数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等。
(2) 数据库实例:实例一般是由一组正在运行的DM后台进程/线程以及一个大型的共享内存组成,实例就是操作DM数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。
一般情况下,一个实例与一个数据库进行关联,但是在DMDSC上,多个实例可以装载并打开同一个数据库。
2、 达梦逻辑存储结构组成
(1) 数据库由表空间组成:包括SYSTEM、MAIN、ROLL、TEMP、HMAIN
(2) 表空间由数据文件组成
(3) 数据文件由簇组成;
(4) 簇由连续页组成;创建好库后,簇在库的生命周期内不能被改变。
(5) 页是最小的的分配单元;页大小可设置4k、8k等,缺省值的是8KB ,创建好的数据库,页在库的生命周期内是不能被改变的。
(6) 段是簇的上级逻辑单元,一个段可以包括不连续的数据文件
3、 表空间
(1) SYSTEM:存放有关DM数据库的字典信息,
(2) MAIN:初始化库的时候,会自动创建一个大小为128M的数据文件MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定MAIN表空间为用户默认的表空间。
(3) TEMP:完全由DM数据库自动维护。
(4) ROLL:完全由DM 数据库自动维护,用户无需干预。
(5) HMAIN:属于HTS 表空间,完全由DM 数据库自动维护,用户无需干涉。
注:DM规定每条记录的总长度不能超过页面大小的一半。

二、达梦物理存储结构

1、用于进行功能设置的配置文件;
2、用于记录文件分布的控制文件;
3、用于保存用户实际数据的数据文件、重做日志文件、归档日志文件、备份文件;
4、用于进行问题跟踪的跟踪日志文件等;

三、达梦内存结构

数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区
1、内存池:
内存池包括共享内存池和其他一些运行时内存池。动态试图V$MEM_POOL详细记录了当前系统中所有的内存池的状态,可查询该动态视图掌握内存使用情况。
2、缓冲区:
数据缓冲区是DM Server在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。至关重要内存区域之一,设置过小,缓冲区命中率低,磁盘IO频繁;设置过大,会导致操作系统内存不够用。
3、排序区:
排序缓冲区提供数据排序所需要的内存空间。
4、哈希区:
DM8提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。

四、达梦线程结构

达梦进程中,主要包括了监听线程、IO线程、工作线程、调度线程、日志线程等五部分,下面将分别做介绍。
1、监听线程
监听线程的主要任务是在服务器端口上循环监听,一旦监听到用户连接请求,监听线程便会唤醒并生成一个会话任务,加入工作线程队列中,等待工作线程来处理。因此,监听线程比其他的普通线程优先级高,它在数据库启动完成后才启动,在数据库关闭时最先被关闭。
2、工作线程
工作线程是DM服务器的核心线程,它从任务队列中取出任务,负责所有实际的数据相关操作。
其初始化线程个数是定义在配置文件dm.ini中,对于的参数名叫MAX_SESSIONS,随着会话的增加,工作线程也会增加,确保每个会话都有一个线程来进行处理,且为了确保响应速度,一个会话上的所有任务全由一个工作线程来处理。
一旦会话超出预设的阈值,工作线程是不会增加的,转而由轮询线程接收用户请求,等待空闲进程出现,然后转由该线程处理。
3、IO线程
DM将IO线程从工作线程中分离出来,从而尽可能减少IO的耗时,达梦服务器的IO操作只针对以下这三种情形。
(1)需要的数据页不在缓冲区中,需要通过IO线程将数据页写入缓冲区
(2)缓冲区满或关闭系统时,需要通过IO线程将部分脏数据写入磁盘
(3)检查点到来时,需要通过IO线程将所有的数据写入磁盘。
注:IO线程启动后通常处于睡眠状态,当需要IO操作时才会被唤醒。
4、调度线程
调度线程用于接管系统中所有需要定时的任务,每秒钟轮询一次。类似于所有工作任务的调度管家
5、日志线程
(1)日志FLUSH线程:为确保数据恢复的一致性,日志的刷盘必须在数据页刷盘之前进行,DM将该线程和IO线程分开,以获得更快的响应速度,并对其进行优化,在刷盘之前,对缓冲区的日志进行合并,这样在进行刷盘时也能减少IO操作,提高整体的性能和响应速度。
(2)日志归档线程:将日志FLUSH线程和日志归档线程分开的目的是为了减少不必要的效率损失,除了远程实时归档外,本地归档、远程异步归档都可以脱离FLUSH线程来做,如果放在FLUSH线程中一起做会严重影响系统性能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值