一、物理存储结构
1.1 *.ini 配置文件
以.ini 结尾的文件,查询视图v$dm_ini
1.2*.ctl 控制文件
控制文件记录了数据库的模式、数据库的版本、数据文件的版本、数据库名、oguid,启动次数,上一次启动时间,表空间和数据文件的信息。
./dmctlcvt
1.3*.dbf 数据文件
存放的是真实数据
SQL> select file_name,status from dba_data_files; --查询
1.4重做日志文件
重做日志文件记录的是数据库发生变化的信息。达梦没有日志组,至少需要两个重做日志文件。重做日志文件的特点:循环写,可覆盖。重做日志文件可以重命名、扩展大小、新增,不能删除。
SQL> select file_id,path,rlog_size from v$rlogfile;
重做日志文件频繁切换,会对数据库产生较大的影响,应该添加日志文件,resize 日志文件大小。
SQL>alter database ADD LOGFILE '/dm8/data/DAMENG/DAMENG03.log' SIZE 300; --新增重做日志文件
SQL>alter database resize logfile '/dm8/data/DAMENG/DAMENG01.log' to 300; -- resize 重做日志文件大小
迁移重做日志文件:
SQL>alter database mount;
SQL>alter database RENAME LOGFILE '/dm8/data/DAMENG/DAMENG01.log' TO '/dm8/DAMENG01.LOG';
SQL>alter database open;
1.5归档日志文件
就是重做日志文件的副本。用来做数据库备份恢复、数据库守护集群、dmhs 的同步。
SQL> select name,arch_mode from v$database;
1.6*.bak备份文件
备份文件就是数据库在某一个时间点的副本。
1.7跟踪日志文件
记录的是各会话执行sql 信息,数据库错误信息,性能相关问题。值为0 就是没开启。跟踪日志文件是一个纯文本文件,以“dm_commit_日期_时间”命名,默认生成在DM安装目录的log子目录下面,管理员可通过ini参数SVR_LOG_FILE_PATH设置其生成路径。
SQL> select para_name,para_value from v$dm_ini where para_name='SVR_LOG';
二、逻辑结构
页对应的是操作系统块,是数据库最小的分配和使用单元
查询段:select * from dba_segments
查询表空间:select * from dba_tablespaces
三、内存结构
select * from V$MEM_POOL --查询系统中所有内存池状态
3.1 内存池
共享内存池是DMServer 在启动时从操作系统申请的一大片内存。由于向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。采用共享内存池则可一次向操作系统申请一片较大内存,即为内存池,当系统在运行过程中需要申请内存时, 可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。可以在dm.ini中进行设置
MEMORY_POOL ,该配置默认为200M。如果在运行时所需内存大于配置值,共享内存池也可进行自动扩展,
MEMORY_TARGET,指定了共享内存池能扩展到的最大大小, 0 表示不限制内存使用
MEMORY_EXTENT_SIZE ,指定了共享内存池每次扩展的大小
运行时内存池是DM Server的一些功能模块在运行时还会使用自己的运行时内存池。这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。
3.2 缓冲区
数据缓冲区是DMServer 在将数据页写入磁盘之前以及从磁盘上读取数据页之后数据页所存储的地方。这是DMServer至关重要的内存区域之一,将其设定得太小,会导致缓冲页命中率低,磁盘IO频繁;将其设定得太大,又会导致操作系统内存本身不够用。
SQL> select para_name,para_value from v$dm_ini where para_name='BUFFER';
Oltp:物理内存的40%-60%;OLAP:物理内存的60%-80%
缓存的是数据页(空闲、干净、脏、正在使用)
数据缓冲区有4 种类型:
Normal /keep:可以手动调整 无特殊情况默认NORMAL,KEEP的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去,主要针对用户的应用是否需要经常处在内存当中 ,如果是这种情况,可以指定缓冲区为KEEP
Fast/recycle:系统自动管理。Fast 主要是undo 数据,recycle 主要是临时数据。
重做日志缓冲区,存放的单位是页,日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘IO而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。RLOG_BUF_SIZE
字典缓冲区,主要缓存的是数据字典的信息,包含表、列的信息。数据库存在大量分区表时,应该要调整字典缓冲区 DICT_BUF_SIZE
SQL缓冲区,提供在执行SQL语句过程中所需要的内存,包括计划、SQL语句和结果集缓存。很多应用当中都存在反复执行相同 SQL 语句的情况,此时可以使用缓冲区保存这些语句和它们的执行计划,这就是计划重用。这样带来的好处是加快了 SQL 语句执行效率,但同时给内存也增加了压力。
3.3 排序区
排序缓冲区提供数据排序所需要的内存空间。sql在排序区空间不够时,转移到磁盘上(临时表空间). SORT_BUF_SIZE
3.4 HASH区
Hash 区是虚拟的内存区,在排序的数据量进行了计算。只有计算出的数据量大小超过了哈希缓冲区的大小,才会生成。HJ_BUF_SIZE,由于该值的大小可能会限制哈希连接的效率,所以建议保持默认值,或设置为更大的值。
四、线程结构
DM使用单进程、多线程结构。服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的线程完成不同的任务。DM数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。
4.1 监听线程
监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高。
4.2 工作线程
工作线程是DM服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。DM8的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理请求。为了保证用户所有请求及
4.3 io线程
IO线程的职责:当事务需要的数据页不在缓冲区中时,从处理从工作线程中分离的IO操作。IO线程在启动后,通常都处于睡眠状态,当系统需要进行IO时,只需要发出一个IO请求,此时IO线程被唤醒以处理该请求,在完成该IO操作后继续进入睡眠状态。
通常情况下,DM Server需要进行IO操作的时机主要有以下三种:
1. 需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
2. 缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
3. 检查点到来时,需要将所有脏数据页写入磁盘。
IO_THR_GROUPS
4.4 日志flash(刷新)线程
任何数据库的修改,都会产生重做REDO日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的REDO日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知FLUSH线程进行日志刷盘。
4.5 日志归档线程
日志归档线程包含异步归档线程,负责远程异步归档任务。如果配置了非实时归档,由日志FLUSH线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档类型做相应归档处理。
4.6 日志APPLY(重做)线程
在配置了数据守护的系统中,创建了一个日志APPLY线程。当服务器作为备库时,每次接收到主库的物理REDO日志生成一个APPLY任务加入到任务队列,APPLY线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。
4.7 调度线程
调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒钟轮询一次,负责的任务有以下一些:
- 检查系统级的时间触发器;
- 清理SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
- 动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
- 自动执行检查点;
- 会话超时检测;
- 必要时执行数据更新页刷盘;
- 唤醒等待的工作线程