一、DM 数据库逻辑结构概述
1.数据库、实例的关系:
(1)DM 数据库:磁盘上存放在 DM数据库中的数据的集合,一般包括: 数 据文件、日志文件、控制文件以及临时数据文件等。
(2)DM实例:存储于服务器的内存中。通过运行 DM实例,可以操作DM数 据库中的内容。
一般的,除了DSC(DM共享集群)是可以多个实例对一个数据库以外,其他的都是一个实例对一个数据库;
(3)DM数据库服务器的组成:
客户端是不能直接访问数据库,是要以客户端+服务器(实例+数据库)的模式,将客户端的请求给到实例,由实例去访问数据库,将访问信息响应给客户端。
2.DM数据库逻辑存储结构:
(1)数据库由一个或多个表空间组成;
(2)每个表空间由一个或多个数据文件组成;
(3)每个数据文件由一个或多个簇组成;
(4)段是簇的上级逻辑单元,一个段可以跨多个数据文件;
(5)簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
(6)页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元。
二、DM 数据库物理结构概述
1.DM物理结构
DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。主要包括:
(1)配置文件
配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩展名,如dm.ini, dmarch.ini;
dm.ini:通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,主要的配置模块包括:控制文件相关、实例名、内存相关、线程相关等。在数据库服务器运行期间,通过调用系统存储过程:
SP_SET_PARA_VALUE()
SP_SET_PARA_DOUBLE_VALUE()
SP_SET_PARA_STRING_VALUE()
对参数值进行修改;
dmmal.ini:MAL 系统的配置文件。需要用到 MAL环境的实例,所有站点 dmmal.ini 需要保证严格一致;
dmarch.ini :用于本地归档和远程归档;
(2)控制文件
每个 DM 数据库都有一个名为 dm.ctl 的控制文件。控制文件是一个二进制文件,它记录了数据库必要的初始信息。
(3)数据文件
数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁 盘上的一个物理文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的 数据文件。在实际应用中,通常有多个数据文件。
(4)重做日志文件
重做日志文件又叫redo日志。主要用于数据库的备份和恢复。当数据库服务器发生故障时,比如电源故障、系统故障、介质故障,或者数据库实例进程被强制终止等,数据库缓冲区中的数据页会来不及写入数据文件。这样,在重启 DM 实例时,通过重做日志文件中的信息,就可以将数据库的状态恢复到发生意外时的状态。
(5)归档文件
利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,如果没有归档日志文件,则只能利用备份进行恢复。
(6)逻辑日志文件
如果在DM数据库上配置了复制功能,复制源就会产生逻辑日志文件。
(7)备份文件
备份文件以 bak 为扩展名。
(8)日志文件(跟踪日志,事件日志)
用户在 dm.ini 中配置 SVR_LOG 和 SVR_LOG_SWITCH_COUNT 参数后就会打开跟踪日志。DM 数据库系统在运行过程中,会在 log 子目录下产生一个“dm_实例名_日期”命名的 事件日志文件。事件日志文件对 DM 数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO错误等一些致命错误。
三、DM 数据库内存结构概述
DM数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区。根据系统中子模块的不同功能,对内存进行了上述划分,采用了不同的管理模式。数据库管理系统是一种对内存申请和释放操作频率很高的软件,如果每次对内存的使用都使用操作系统函数来申请和释放,效率会比较低,加入自己的内存管理是DBMS系统所必须的。
1.内存池
DM Server 的内存池包括共享内存池和其他一些运行时内存池。动态视图 V$MEM_POOL 详细记录了当前系统中所有内存池状态,可通过查询这个动态视图掌握DM Server的内存使用情况。
(1)共享内存:
在DM Server的运行期间,经常会申请与释放小片内存,而直接向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。于是 DM 采用采用共享内存池的方式:一次向操作系统申请一片较大内存,作为共享内存池。当系统在运行过程中需要申请小片内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。登录disql工具查看共享内存的大小:
select para_name,para_value from v$dm_ini where para_name=’MEMORY_TARGET’;
select para_name,para_value from v$dm_ini where para_name=’MEMORY_POOL’;
(2)运行时内存
除了共享内存池,DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。
2.数据缓冲区
数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。这是 DM Server 至关重要的内存区域之一,将其设定得太小,会导致缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。
建议:OLTP:BUFFER大小设为整个物理内存的40%~60%
OLAP:BUFFER大小设为整个物理内存的60%~80%
(1)查看BUFFER大小:
select para_name,para_value from v$dm_ini where para_name='BUFFER';
select para_name,para_value from v$dm_ini where para_name='MAX_BUFFER';
(2)设置大小:
SP_SET_PARA_VALUE(SCOPE,PARA_NAME.PARA_VALUE);
通过v$parameter和v$dm_ini试图查看相关的信息:
select name,type from v$parameter where name=‘BUFFER’;
3.sql缓冲区
sql在dm数据库中的执行过程,大致为:语法义分析-->语义分析(存放数据的数据字典表,产生物理读)-->权限判断:查找数据块是否内存(在内存,逻辑读,不在内存,把数据块从磁盘读到buffer)-->找是否有可用的执行计划。有的直接按照执行计划把结果展示出来。如果没有,生成执行计划,再把数据展示出来。而Sql缓冲区中存放的就是:最近使用的sql,DMSQL代码,执行计划和最近查询的结果集),用来减少硬解析。
查看方式:
select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';
4.重做日志管理
(1)查看日志文件:
select path from v$rlogfile;
(2)增加一个日志文件:
alter database add logfile ‘/home/dmdba/dmdbms/data/DAMNEG/DAMENG04.log size 128’;
(3)修改日志文件大小:
alter database resize logfile ‘/home/dmdba/dmdbms/data/DAMNEG/DAMENG04.log size 1024’;
(4)查看日志文件与大小:
Select path,rlog_size from v$rlogfile;
四、监听线程
监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高。
1.工作线程
工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。
2.IO线程
IO 操作历来都是最为耗时的操作之一。当事务需要的数据页不在缓冲区中时,如果在工作线程中直接对那些数据页进行读写,将会使系统性能变得非常糟糕,而把 IO 操作从工作线程中分离出来则是明智的做法。IO 线程的职责就是处理这些 IO 操作。
3.调度线程
调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒钟轮询一次。
4.日志FLUSH线程
任何数据库的修改,都会产生重做 REDO 日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的 REDO 日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知 FLUSH 线程进行日志刷盘。
5.日志线程
日志归档线程包含异步归档线程,负责远程异步归档任务。如果配置了非实时归档,由日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档类型做相应归档处理。
6.日志APPLY线程
在配置了数据守护的系统中,创建了一个日志 APPLY 线程。当服务器作为备库时,每次接收到主库的物理 REDO 日志生成一个 APPLY 任务加入到任务队列,APPLY 线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。备库数据对用户只读,可承担报表、查询等任务,均衡主库的负载。
7.定时线程
在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如备份;或者是在某个时间段内反复进行某种操作等。定时器线程就是为这种需求而设计的。
8.逻辑日志线程
逻辑日志归档用于 DM8 的数据复制中,目的是为了加快异地访问的响应速度,包含本地逻辑日志归档线程和远程逻辑日志归档线程。当配置了数据复制,系统才会创建这两个线程。
9.MAL相关线程
MAL 系统是 DM 内部高速通信系统,基于 TCP/IP 协议实现。服务器的很多重要功能都是通过 MAL 系统实现通信的,例如数据守护、数据复制、MPP远程日志归档等。MAL 系统内部包含一系列线程,有 MAL 监听线程、MAL发送工作线程、MAL 接收工作线程等。
10.线程信息查看
通过动态性能视图用户可以直观地了解当前系统中有哪些线程在工作,以及线程的相关信息:
select * from V$LATCHES; -- 记录当前正在等待的线程信息;
select * from V$THREADS; -- 记录当前系统中活动线程的信息;
select * from V$WTHD_HISTORY; -- 记录线程历史信息;
select * from V$PROCESS; -- 记录服务器进程信息;
更多资讯请上达梦技术社区了解: https://eco.dameng.com