个人笔记005之分享DM8数据库体系架构、内存、线程

一、物理与逻辑架构:

1.1逻辑架构:

1.1.1数据库与实例:

数据库:
在DM数据库中当同时出现数据库、实例时,数据库指的是磁盘上存放在DM数据库中的数据的集合,包括数据文件、日志文件、控制文件以及临时数据文件等;
DM数据库存储在服务器的磁盘上;
实例:
实例一般是由一组正在运行的DM后台进程线程以及一个大型的共享内存组成。
实例就是操作DM数据库的一种手段,是用来访问数据库的内存结构 以及后台进程的集合。
DM实例则存储在服务器的内存中。
数据库与实例:
任何时候:一个实例只与一个数据库进行关联(装载、打开或关闭数据库);
单机架构:一个数据库也只有一个实例对其进行操作。
DM共享存储集群DMDSC:多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。
对应Oracle:单机、RAC

1.1.2DM逻辑存储结构:

表空间、段、簇、页:
(Oracle:表空间、段、区、块);

**注意:**Oracle 块(DB_BLOCK_SIZE)默认为8kb,正常最大表空间理论上可扩展至32G,实际上要根据你的块大小判断可以增长多大,因为最大只允许4194304个数据块,另类大文本表空间除外。
DM页可选 4kb、8kb、16kb、32kb,所以表空间大小也随页的大小而变化,例如选择8kb,表空间最小32MB,最大16TB。
在这里插入图片描述

DM逻辑关系如下:
数据库由一个或多个表空间组成;
每个表空间由一个或多个数据文件组成;
一个段可以跨多个数据文件存在;
一个段由多个簇组成,每个数据文件由一个或多个簇组成,段是簇的上级逻辑单元;
一个簇由多个连续的页组成,一个簇总是在一个数据文件中;
页是数据库中最小的分配单元,最小的IO单元。
总结:表空间 > 段 > 簇 > 页 ,段和簇之间有数据文件。
DM逻辑存储结构:
表空间:
DM数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间对应的数据文件中,在创建DM数据库时,会自动创建5个表空间。
SYSTEM表空间:数据库的字典信息;(Oracle:System + Sysaux)
ROLL表空间:
事务回滚数据,运行过程中执行DML操作之前的值;(Oracle:undo)
MAIN表空间:用户默认的表空间;(Oracle:Users)
TEMP表空间:临时表空间,用于创建索引、无法在内存中完成的排序操作、SQL 语句中间结果集以及用户创建的临时表;(Oracle:temp)
HMAIN表空间:
HTS表空间,默认Huge表的表空间(Huge表针对海量数据的存储 和高效分析的一种表,实现了Huge File System存储机制)。
每一个用户都有一个默认的表空间;
对于SYS、SYSSSO、SYSAUDUTOR系统用户,默认的用户表空间是SYSTEM;
SYSDBA的默认表空间是MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定MAIN表空间为用户默认的表空间。
(Oracle:sys、system对应SYSTEM、SYSAUX;普通用户对应users)。
记录:
数据库中的每一行是一条记录(Huge表除外)(Oracle:行:row)
页:
数据页(也成数据块)是DM数据库汇总最小的存储单元。在达梦数据库中,页带大小可分为4kb、8kb、16kb、32kb,在创建数据库时指定大小,默认为8kb,在创建好数据库之后不可修改页大小。
在这里插入图片描述

簇:
簇是数据页的上级逻辑单元,由同一个数据文件中16个或32个连续的数据页组成。簇的大小由用户在创建数据库时指定,默认大小为16个页,创建数据库后不能修改。
举例说明:(理论上)某个数据文件大小为32MB,页大小为8kb,则共有32MB/16/8kb=256个簇,每个簇大小为8kb * 16 = 128kb。(Oracle:区:extent)
段:
段是簇的上级逻辑单元,它由一组簇组成,在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件,可以被定义成特定对象的数据结构。(Oracle:段:segment)
段分类:
数据段:存在于数据表空间中,当用户使用create语句创建表或索引时产生的数据段或索引数据段。
临时段:存在于临时表空间中,功能即临时表空间的作用,自动分配的段。
回滚段:存在于回滚表空间中,保存了用于恢复数据库操作的信息,主要用于回滚。

1.1.3DM物理存储结构:

DM物理结构:

配置文件
控制文件
数据文件
重做日志文件
归档日志文件
备份文件
问题跟踪日志文件
事件日志文件
在这里插入图片描述

配置文件:
配置文件是DM数据库用来设置功能选项的参数文件**(Oracle:参数文件pfile/spfile)**
启用/禁止特定功能项
针对当前系统运行环境设置更优的参数值以提升系统性能
DM常用配置文件:
dm.ini(数据库服务器的各种功能和性能选项)
dmmai.ini(MAL系统的配置文件,通过MAL协议实现redo日志传输,用于主备)
dmarch.ini(本地归档和远程归档)
dm_svc.ini(服务名连接配置文件)(Oracle:tnsnames.ora)
sqllog.ini(sql日志的配置)
dmrep.ini(用于配置复制实例)
控制文件:
每个DM数据库都有一个名为dm.ctl的控制文件。控制文件是一个二进制文件,它记录 了数据库必要的初始信息,其中主要包含以下内容:
1.数据库名称,数据库服务器模式,OGUID全局唯一标识;(Oracle:dbid)
2.数据库服务器版本,数据文件版本;
3.数据库的启动次数,数据库最近一次启动时间;
4.表空间信息,包括表空间名、表空间物理文件路径等,记录了所有数据库中使 用的表空间,数组的方式保存起来。
5.控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保 证控制文件合法性,防止文件损坏或手工修改。
数据文件:
数据文件以dbf为扩展名,它是数据库中最重要的文件类型,一个DM数据文件对应磁 盘上的物理文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的 数据文件,在实际应用中,通常有多个数据文件。
重做日志文件:(Oracle:Redo)
重做日志文件,又称联机日志文件,主要用于数据库的备份和恢复;
在达梦数据库中添加、删除、修改对象、改变数据,DM都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中;
重做日志文件以log为扩展名;
每个达梦数据库实例必须至少有2个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用。
归档日志文件:(Oracle:Archive log)
日志文件分为联机日志文件和归档日志文件;
达梦数据库可以再归档归档模式和非归档模式下运行;
非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;
归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储;
归档日志文件,就是在归档模式下重做日志被连续写入到归档日志后所生成了归档日志文件,归档日志文件以归档时间命名,扩展名也是log;
归档日志文件是数据守护功能的核心,数据守护中的备库就是通过重做归档日志中的redo日志来完成与主库的数据同步的。
逻辑日志文件:(Oracle:流复制)
如果在达梦数据库上配置了复制功能,复制源就会产生逻辑日志文件,逻辑日志文件是一个流式的文件;
物理逻辑日志文件:(Oracle:logmnr日志挖掘)
是按照特定的格式存储的服务器的逻辑操作,专门用于DBMS_LOGMNR包挖掘获取数据库系统的历史执行语句,当开启记录物理逻辑日志的功能时,这部分日志内容会被存储到重做日志文件中。
备份文件:
对达梦数据库进行备份产生的文件,一般备份文件以bak为扩展名;
跟踪日志文件:(Oracle:trace、dump)
主要用于排查、调优等,默认关闭,开启会影响性能;
在dm.ini中配置SVR_LOG和SVR_LOG_SWITCH_COUNT参数就会打开跟踪日志。
跟踪日志文件是一个纯文本文件,以dm_commit_日期 时间 命名,默认生成在DM安装目录的log子目录下面。
事件日志文件:(Oracle:alter)
DM数据库系统在运行过程中,会在log子目录下产生一个dm_实例名 日期命名的事件日志文件;
事件日志文件对达梦数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO错误等一些致命错误;
事件日志文件主要用于系统出现严重错误时进行查看并定位问题;
事件日志文件随着DM数据库服务的运行一直存在。

二、内存与线程:

2.1 内存结构:(Oracle:SGA)

DM数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等,根据系统中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。
DM数据库内存管理优点:
申请、释放内存效率高;
能够有效地了解内存使用情况;
易于发现内存泄漏和内存写越界的问题。
内存池:
DM Server 的内存池包括共享内存池和其他一些运行时内存池。
动态视图 V$ MEM_POOL 详细记录了当前系统中所有的内存池状态,可通过查询这个动态视图掌握DM Server的内存使用情况。
共享内存池:
是DM Server在启动时从操作系统申请的一大片内存;
当系统运行过程中需要申请内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池;
共享内存池的参数为MEMORY_POOL,该配置默认为200M;
MEMORY_EXTENT_SIZE指定了共享内存池每次扩展的大小;
MEMORY_TARGET指定了共享内存池能扩展到的最大大小。
运行时内存池:(Oracle:java池等)
除了共享内存池,DM Server的一些功能模块在运行时还会使用自己的运行时内存池,这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如回话内存池、JVM虚拟机内存池等。
缓冲区:
数据缓冲区:
在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。
四种缓冲区参数(dm.ini文件中默认值):
BUFFER(100MB):NORMAL缓冲区大小,缓冲区主要是提供个系统处理的一些数 据页,可以再创建表空间或修改表空间指定。
KEEP(8MB):KEEP缓冲区大小,对缓冲区中很少用或者淘汰出去的页的缓存;
RECYCLE(64MB):缓冲区供临时表空间使用;
FAST_POOL_PAGES(3000):FAST缓冲区数据页总数,系统自动管理。
日志缓冲区:
日志缓冲区适用于存放重做日志的内存缓冲区;
为了避免由于直接的磁盘IO而使系统性能受到影响,系统在运行过程中产生的日 志并不会立即被写入到磁盘,而是和数据页一样,先将其放置到日志缓冲区中;
参数:RLOG_BUF_SIZE
字典缓冲区:
字典缓冲区主要存储一些数据字典信息,如模式、表、列、触发器等;
SQL缓冲区:
SQL缓冲区提供在执行SQL语句过程中所需要的内存,包括SQL语句、执行计划、 结果集缓存。
排序区:
排序缓冲区提供数据排序所需要的内存空间。当用户执行SQL语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。参数:SORT_BUF_SIZE
哈希区:
DM8提供了为哈希连接而设定的缓冲区。
SSD缓存区:(DM独有)
DM Server将SSD文件作为内存缓存与普通磁盘之间的缓冲层,需要保证设置的路径是位于固态磁盘上,用于提升普通磁盘的执行效率。

2.2 线程结构:

DM数据库使用对称服务器架构的单进程、多线程结构。
这种对称服务器构架在有效地利用了系统资源的同时又提供了较高的可伸缩性能。
DM数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。
DM进程主要包括:
监听线程、IO线程、工作线程、调度线程、日志线程等;
(Oracle:专用模式为多进程结构,共享模式为单进程多线程结构)
(MySQL:单进程多线程结构)

监听线程:
监听线程主要的任务是在服务器端口上进行循环监听,负责客户的连接请求,保证在处理大量客户连接时系统具有较短的响应时间。
工作线程:
工作线程是达梦服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。
IO线程:
主要用来处理数据库IO读写操作,IO线程在启动后,通常都处于睡眠状态;
一般在以下几种情况下触发:
需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
缓冲区满或系统关闭时,此时需要将部分脏数据页写入缓存;
检查点到来时,需要将所有脏数据页写入磁盘;
调度线程:
调度线程用于接管系统中所有需要定时调度的任务,调度线程每秒钟轮训一次。
日志flush线程:
事务运行时,会把生成的redo日志保留在日志缓冲区,当事务提交或者执行检查点时,会通知flush线程进行日志刷盘;
日志归档线程:
日志归档线程包括异步归档线程,负责远程异步归档任务。
日志APPLY线程:
主备环境中,在备库中应用从主库接收到的redo日志文件。
定时器线程:
负责一些定时需要完成的任务,定时操作的事件如下:
逻辑日志异步归档;
异步归档日志发送(只有在primary模式下,且open状态下);
作业调度;
逻辑日志归档线程:
当配置了数据复制,系统才会创建本地逻辑日志归档线程、远程逻辑日志归档线程,目的是加快异地访问的响应速度。
MAL系统相关线程:
MAL系统是DM内部高速通信系统,基于TCP/IP协议实现。
MAL系统内部包含一系列线程,如MAL监听线程、MAL发送工作线程、MAL接收工作线程等。
DM服务器的很多重要功能都是通过MAL系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。
其他线程:
回滚段清理PURGE线程,审计写文件线程、重演捕获写文件线程等。

2.3 达梦数据库线程视图:

V$ LATCHES记录当前正在等待的线程信息;
V$ THREADS记录当前系统中活动线程的信息;
V$ WTHRD_HISTORY记录自系统启动以来,所有活动过线程的相关历史信息;
V$PROCESS记录服务器进程信息;
更多知识尽在达梦交流社区:https://eco.dameng.com/

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值