达梦8数据库体系结构

  • 1.DM8存储结构
    • 1.1物理结构
      • 1.1.1配置文件
      • 1.1.2数据文件
      • 1.3控制文件
      • 1.4重做日志文件
      • 1.5 归档日志文件
      • 1.6 跟踪日志文件
      • 1.7 事件日志文件
      • 1.8 备份文件
    • 1.2逻辑结构
      • 1.2.1 页
      • 1.2.2 簇
      • 1.2.3 段
      • 1.2.4 表空间
  • 2.DM8内存结构
    • 2.1 共享内存池(主内存池)
    • 2.2 运行时内存池
    • 2.3 数据缓冲区
    • 2.4 重做日志缓冲区
    • 2.5 SQL缓冲区
    • 2.6 字典缓冲区
    • 2.7 排序缓冲区
    • 2.8 HASH缓冲区
  • 3.DM8线程结构
    • 3.1 监听线程
    • 3.2 IO线程
    • 3.3日志刷新线程
    • 3.4日志归档线程
    • 3.5日志重做线程
    • 3.6调度线程
    • 3.7 工作线程
  • 4.达梦是个单进程多线程的数据库
  • DMSERVER:C/S架构,由客户端+服务器构成
  • 达梦数据库是由数据库和实例构成
  • 数据库
    • 数据库指的是磁盘上存放在数据库中的数据的集合
    • 数据库文件:配置文件和控制文件(丢失损坏数据无法启动到mount状态)、数据文件和重做日志文件(丢失损坏无法启动到open状态)、归档日志文件、备份文件、跟踪日志文件、事件日志文件。+ 实例
  • 实例
    • 实例一般是由一组正在运行的后台进程/线程以及一个大型的共享存储组成
    • 单实例:一个实例管理一个数据库
    • DMDSC:多个实例管理一个数据库(类似于oracle rac)

1.DM8存储结构

1.1物理结构

1.1.1配置文件
  • 在实例安装路径下以.ini结尾的文件为配置文件:/dmdata/DM/dm.ini
  • 该文件类似于oracle的spfile和pfile文件,可以通过alert去更改、vim命令去直接修改、函数方式去修改、console工具去更改
  • 配置文件视图为dm_ini:desc v$dm_ini;
  • PARA_TYPE列解答:
    • sys:影响全局
    • session:动态,针对于当前会话有效
    • infile:静态参数,实例重启生效
    • readonly:只读参数,只能手动通过vim去修改dm.ini
  • 修改参数
    • 判断是参数类型,是否需要重启生效
    • 更改方式
  • 案例1静态参数修改:
alter system set 'COMPATIBLE_MODE'=2 spfile;
both会同时改变内存中和参数中的值,无需重启便可生效。spfile只会改变参数文件中的值,实例重启才能生效。
sp_set_para_value(2,'COMPATIBLE_MODE',0);
前面的数值:1等同于both,会同时改变内存中和参数中的值,无需重启便可生效。2等于infile,只会改变参数文件中的值,实例重启才能生效。

  • 案例2动态参数修改:
select para_name,para_value,para_type from v$dm_ini where para_name='ENABLE_BLOB_CMP_FLAG';
alter system set 'ENABLE_BLOB_CMP_FLAG'=1 both;
sp_set_para_value(1,'ENABLE_BLOB_CMP_FLAG',0);
1.1.2数据文件
  • 数据存储路径下以.DBF结尾的文件是数据文件
查看当前数据库有哪些数据文件,以及详细信息
select * from dba_data_files;
select * from v$datafile;
1.3控制文件
  • 数据存储路径下以.ctl结尾的文件是控制文件,只有一个控制文件

  • 会在ctl_bak下备份是个控制文件

查看控制文件存储位置
select para_name,para_value from v$dm_ini where para_name like '%PATH%';

  • 查看控制文件内容
./dmctlcvt help
./dmctlcvt type=1 src=/dmdata/DM/dm.ctl dest=/tmp/dmctl.txt
  • 控制文件中记录了数据库的模式、数据库名、上一次的启动时间、数据库启动次数、表空间和数据文件相关信息。
1.4重做日志文件
  • 重做日志文件记录的是数据库发生变更的信息,达梦没有日志组,至少需要两个日志文件
  • 重做日志文件的特点,循环写、可覆盖
  • 重做日志文件频繁切换会对数据库的性能产生影响
  • 查询重做日志文件
select * from v$rlogfile;
  • 调整重做日志文件大小,重做日志文件大小保持一致
alter database resize logfile'/dmdata/DM/DM01.log' to 300;
  • 添加重做日志文件,添加的日志文件大小和原有日志文件大小保持一致
alter database add logfile '/dmdata/DM/DM03.log' size 300;
  • 重做日志文件存储在本地的数据存放路径下以.log结尾文件

  • 移动重做日志文件存放地点

该行为需要数据库处于mount状态下的normal模式

alter database mount;
select instance_name,status$ from v$instance;
alter database rename logfile '/dmdata/DM/DM04.log' to '/dmdata/DM04.log';
select * from v$rlogfile;

  • 达梦的重做日志文件是不可被删除的,最小大小为256M
1.5 归档日志文件
  • 重做日志文件的副本,将覆盖掉的重做日志文件复制一份转换形式保留在归档日志文件中。主要用来做数据库恢复,主备之间的同步。
  • 数据库开启归档命令行
数据库启动到mount状态
SQL> alter database mount;
数据库开启归档模式
SQL> alter database archivelog;
设置归档路径
SQL> alter database add archivelog 'type=local,dest=/dmarch,file_size=80,space_limit=0';
数据库启动到open状态
SQL> alter database open;
查看数据库当前归档模式
SQL> select name,status$,arch_mode from v$database;
  • 数据库开启归档图形化


    点击配置模式,再点击转换,将数据库转换成mount模式


  • 达梦数据库,不会随着你手动的alter system switch logfile;切归档而产生新的归档文件,只有当你数据库有变更的时候去切归档他才会生成,如果不手动切也会自动切。

1.6 跟踪日志文件
  • 跟踪日志文件记录的是系统各会话执行的SQL语句信息,主要是错误的信息、性能的问题,默认是关闭的,参数SVR_LOG。
select para_name,para_value from v$dm_ini where para_name='SVR_LOG';
1.7 事件日志文件
  • 记录的是数据库运行期间产生的关键性事件,数据库的启动、关闭、内存申请失败、IO错误
  • 命名:dm_实例名_日期
1.8 备份文件
  • 以.bak结尾的文件,备份文件就是数据库在某一时间点做的副本。

1.2逻辑结构

1.2.1 页
  • 数据页(也称数据块)是 DM 数据库中最小的数据存储单元。页的大小对应物理存储空间上特定数量的存储字节,在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,则在该库的整个生命周期内,页大小都不能够改变。

  • 页头控制信息包含了关于页类型、页地址等信息。页的中部存放数据,为了更好地利用数据页,在数据页的尾部专门留出一部分空间用于存放行偏移数组,行偏移数组用于标识页上的空间占用情况以便管理数据页自身的空间。

1.2.2 簇
  • 簇是数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页组成。在 DM 数据库中,簇的大小由用户在创建数据库时指定,默认大小为 16。假定某个数据文件大小为 32MB,页大小为 8KB,则共有 32MB/8KB/16=256 个簇,每个簇的大小为8K*16=128K。和数据页的大小一样,一旦创建好数据库,此后该数据库的簇的大小就不能够改变。
1.2.3 段
  • 段是簇的上级逻辑分区单元,它由一组簇组成。在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件。而一个簇以及该簇所包含的数据页则只能来自一个文件,是连续的 16 或者 32 个数据页。由于簇的数量是按需分配的,数据段中的不同簇在磁盘上不一定连续。
select * from dba_segments;
segments_type 表示段类型;分为索引和表
1.2.4 表空间
  • 一个数据库拥有多个表空间,一个表空间可以拥有多个数据文件,一个数据文件只能属于一个表空间
  • 在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN表空间、TEMP 表空间和 HMAIN 表空间。
select * from v$tablespace;

2.DM8内存结构

2.1 共享内存池(主内存池)

  • 共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。在 DM Server 的运行期间,经常会申请与释放小片内存,而向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。采用共享内存池则可一次向操作系统申请一片较大内存,即为内存池,当系统在运行过程中需要申请内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。
  • 查看共享内存出信息
select para_name,para_value from v$dm_ini where para_name like '%MEMORY%';
MEMORY_N_POOLS  有多少个共享内存池,该数值默认为1,范围是0-2048
MEMORY_POOL 共享内存池大小
MEMORY_EXTENT_SIZE 增量大小
MEMORY_TARGET 目标大小,0代表不限制

2.2 运行时内存池

  • 除了共享内存池,DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。在需要时被创建,使用完立即销毁。

2.3 数据缓冲区

  • 缓存的是数据也,使用数据缓冲区可以提高数据库的性能
select para_name,para_value from v$dm_ini where para_name like '%BUFFER%';
BUFFER行代表缓冲区大小
  • 数据缓冲区内存分配参考值:OLTP场景下分配物理内存的40%-60%,OLAP场景下分配物理内存的60%-80%
  • 数据缓冲区有4种类型:
    • normal默认,可以手动调整
    • keep:表空间
    • fast 、reycle:表,系统自动管理,缓存的是临时表,回滚页。
  • 数据缓冲区和共享内存没有关系,数据缓冲区满就会淘汰很少使用的数据页。

2.4 重做日志缓冲区

  • 存放的是重做日志的信息,单位是页
select para_name,para_value from v$dm_ini where para_name like '%RLOG_BUF_SIZE%';

  • 查询结果需要乘以8
  • 重做日志缓冲区与共享内存池没有关系,重做日志缓冲区不够用时,向操作系统直接申请。

2.5 SQL缓冲区

  • 用来存放执行计划,SQL结果集、包。对于SQL类别比较多,包比较多,应该适当调整SQL缓冲区。参数:CACHE_POOL_SIZE
  • 当SQL缓冲区用完时,会向共享内存池申请内存。默认为20M
select para_name,para_value from v$dm_ini where para_name like '%CACHE_POOL_SIZE%';

2.6 字典缓冲区

  • 字典缓冲区是存在数据库对象的一片缓冲区,对应DM_INI参数DICT_BUF_SIZE。
  • 字典缓冲区主要缓存的是数据字典的信息。包含表、列、权限相关信息。当数据库存在很多表,应该适当调整该参数。
  • 该缓冲区一是避免了频繁向磁盘请求获取系统表信息,二是可以减少系统表信息解析开销
  • 默认大小为5M,当字典缓冲区用完后会向共享内存池申请。
select para_name,para_value from v$dm_ini where para_name like '%DICT_BUF_SIZE%';

2.7 排序缓冲区

  • 排序就是SQL排序需要的内存空间,排序区用完后,会向共享内存池申请,无法完成排序操作将转移到临时表空间上,需要时分配,用完销毁
select para_name,para_value from v$dm_ini where para_name like '%SORT_BUF_SIZE%';

2.8 HASH缓冲区

  • 表做HASH连接时会分配空间,用完立即销毁
  • 当HASH区满后,会向共享内存池申请内存
select para_name,para_value from v$dm_ini where para_name like '%HJ_BUF_SIZE%';

3.DM8线程结构

3.1 监听线程

  • 在数据库服务端检测来自客户端的连接请求,把任务交给工作线程
  • netstat -lnt |grep 5237,当数据库启动时才可以看到

3.2 IO线程

  • 类似于oracle的DBWR
  • 将数据页从磁盘读入到数据缓冲区中,将数据缓冲区中的脏页在一定急之下更新到磁盘的数据文件中。
  • 机制:在执行检查点,数据缓冲区满,数据库关闭。

3.3日志刷新线程

  • 将重做日志缓冲区中的记录在一定机制下更新到重做日志文件中。
  • 机制:在事务提交,执行检查点,数据库关闭时触发

3.4日志归档线程

  • 数据库开启归档模式后,才会出现该线程
  • 将重做日志文件在切换时拷贝到归档路径下做副本

3.5日志重做线程

  • 主要用于系统故障恢复,日志重做线程根据redo日志进行并行的故障恢复。

3.6调度线程

  • 检查系统级的时间触发器
  • 清理SQL缓存、计划缓存中失效的项,或者超出缓存机制后淘汰不常用的缓存项
  • 动态缓冲区检查,根据需要动态扩展或动态收缩系统缓冲池。
  • 自动执行检查点。会话超时检测,必要时执行数据更新页刷盘,唤醒等待的工作线程。

3.7 工作线程

  • 内核的工作线程机制分为普通内核线程和用户态线程两种,普通内核线程的切换完全由系统决定,单操作系统无法了解进行内部的运行机制,只能采取通用的调度策略来管理各个内核线程;用户态线程在内核线程内部自主调度,有效减少上下文切换。

4.达梦是个单进程多线程的数据库

  • 进程查看,系统内部
ps -ef |grep dmserver

  • 线程查看,数据库内部
select * from v$threads;

达梦8数据库体系结构相关推荐

  1. 三场直播丨达梦DM8数据库体系结构、从零快速搭建一整套监控体系、Oracle Database Server经典体系结构...

    1.  达梦DM8数据库的体系结构介绍 2. 触类旁通– Oracle Database Server经典体系结构 3. 如何从零快速搭建一整套监控体系(日志采集+主机+数据库)

  2. 两场直播丨易鲸捷SQL编译器、达梦DM8数据库体系结构

    1. 易鲸捷HTAP融合型分布式数据库EsgynDB SQL编译器详解 2.  达梦DM8数据库的体系结构介绍

  3. 达梦DM8数据库体系结构

    一.数据类型 登录DM数据库,执行SELECT * FROM SYS.SYSTYPEINFOS:可以查询DM支持的全部数据类型及精度说明等信息.主要包含如下数据类型: 1.数值数据类型 1.NUMER ...

  4. 达梦DM数据库—线上培训学习简记

    达梦DM数据库-线上培训学习简记 (20200812) 有幸参加国内领先的达梦数据库(自主研发)的线上学习,达梦的老师都非常的NICE, 遇到问题会非常耐心的线上解答.现将这次的学习中的一些知识点做了 ...

  5. oracle数据库dblink创建语句_3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  6. 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  7. 达梦dm8可视化工具_DM8(达梦8)数据库安装和使用

    达梦8(DM8)数据库入门及使用 to 达梦大学 刘秀君原创,抄袭必究 目录 1     介绍 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库 ...

  8. Flowable6.8(6.x版本通用)整合集成达梦8数据库(DM8)详解,解决自动生成表时dmn相关表语法报错问题。

    Flowable集成达梦8数据库 相信大部分人都和我一样,以为只要换个数据源就可以了,起初我只更换了数据源,并开启了自动创建表功能. spring:datasource:url: jdbc:dm:// ...

  9. 中标麒麟系统安装达梦8 数据库

    中标麒麟系统安装达梦8 数据库 最近国产化软件相继进入各大软件公司使用,达梦作为国内数据库的佼佼者,我们也应该学会使用,软件都是一点点推广,积累了一点小经验,拿来分享.... 环境准备 1.VMwar ...

最新文章

  1. 迈克尔 · 乔丹:我讨厌将机器学习称为AI
  2. 10分钟学会使用YOLO及Opencv实现目标检测
  3. pycharm同一目录下无法import其他文件
  4. CABAC之手把手教你编码
  5. 图像处理中的通信原理——冈萨雷斯读书笔记(一)
  6. C++学习之路 | PTA乙级—— 1049 数列的片段和 (20 分)(精简)
  7. OpenCV图像识别初探-50行代码教机器玩2D游戏
  8. PYTHON学习0011:enumerate()函数的用法----2019-6-8
  9. Python 处理前端反调试(无限debugger)
  10. Unity中使用Protobuffer探讨
  11. 《灵枢-五色》明堂藩蔽图
  12. 关于.NET异常 你应该知道的更多点
  13. MFC Windows程序设计源码免费下载
  14. [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.14
  15. 8700k超频测试软件,超频及功耗温度测试_Intel 酷睿i7 8700K_CPUCPU评测-中关村在线...
  16. 安静!听听AI眼中岛国老师的声音~
  17. 系列超声发现脊柱关节炎附着点处新骨形成
  18. 通过jenkins构建服务,并发布服务,修改Jenkins以Root用户运行
  19. Cobalt Strike使用教程一
  20. jdk8以上G1垃圾回收器的配置参数

热门文章

  1. Help Hanzo LightOJ - 1197 (素数 筛法)
  2. iPhone 手机官方查询网站
  3. 研究War3编辑器(3):单位的基本操作
  4. 【论文翻译】异构信息网络挖掘的活动边缘中心多标签分类
  5. 【进阶指南】数据结构 - 楼兰图腾【BIT】
  6. jquery 让div添加滚动条?
  7. 如何自己计算机硬盘故障,新手怎么快速学习电脑打字 电脑硬盘出现错误怎么办...
  8. html引入babel-polyfill,【React】如何让babel-polyfill按需加载?
  9. 人工智能研究,一共可以划分为几个分支?
  10. vue3 + wow + animate