博客
关于我
DM达梦数据库体系结构详解
阅读量:566 次
发布时间:2019-03-09

本文共 1866 字,大约阅读时间需要 6 分钟。

DM数据库系统结构分析

1、DM逻辑结构

达梦(DM)数据库系统的逻辑结构与Oracle类似,主要包括实例和数据库两个概念。两者唯一的区别在于:达梦是单进程模型,而Oracle是多进程模型。

实例与数据库

  • 实例:在达梦中,实例是由共享内存和后台进程或线程组成的。通常情况下,一个数据库对应一个实例,不过在DSC(DM共享集群)环境下,多个实例可以共享同一个数据库。

  • 数据库:数据库是存储在磁盘文件中的容器,类似Oracle的schema。数据库可以由一个或多个表空间组成。

数据库的组成

  • 表空间:数据库由一个或多个表空间组成,每个表空间由一个或多个数据文件组成。
  • 数据文件:数据文件是存储实际数据的地方,每个数据文件对应磁盘上的一个物理文件。
  • :页是数据库中的最小存储单位,也是IO操作的基本单位。

2、DM物理结构

DM数据库的物理存储结构包括配置文件、控制文件、数据文件、重做日志文件、归档文件、逻辑日志文件、备份文件以及日志文件等。

2.1 配置文件

配置文件是DM数据库的功能设置文件,主要以ini为扩展名,例如dm.inidmarch.ini

2.2 控制文件

每个数据库都有一个名为dm.ctl的控制文件,记录了数据库的初始信息。这是一个二进制文件。

2.3 数据文件

数据文件以dbf为扩展名,是数据库中最重要的文件类型。一个数据库至少有一个数据文件,实际应用中通常有多个数据文件。

2.4 重做日志文件

重做日志文件用于数据库的备份和恢复,是数据库Crash recovery的重要依据。

2.5 归档文件

归档日志文件支持恢复到故障前的时间点,也可以还原到指定的时间点。

2.6 逻辑日志文件

在配置数据库复制时,会产生逻辑日志文件。

2.7 备份文件

备份文件以bak为扩展名。

2.8 日志文件(事件日志)

在DM数据库上配置SVR_LOG和SVR_LOG_SWITCH_COUNT参数后,会生成事件日志文件,这些文件记录了系统运行中的关键事件,如启动、关闭、内存申请失败等。

3、DM内存结构

在DM数据库中,内存结构主要包含内存池、缓冲区、排序区、哈希区等区域。这些区域的设计和管理方式与Oracle类似。

3.1 共享内存

共享内存是指系统可用的物理内存资源,用来存放各个数据库的共享区域。查看共享内存大小可以通过以下SQL语句:

SQL> select para_name, para_value from v$dm_ini where para_name='MEMORY_TARGET';

3.2 数据缓冲区

数据缓冲区用于存储数据库操作的相关内容,是实现高效数据访问的关键。缓冲区采用LRU(最不_recently_used)的回收策略。

状态 描述
free 最近未使用
dirty 数据已修改
clean 无数据
pending 数量不足

查看缓冲区大小和最大值可以通过以下SQL语句:

SQL> select para_name, para_value from v$dm_ini where para_name='BUFFER';  -- 查看缓冲区大小SQL> select para_name, para_value from v$dm_ini where para_name='MAX_BUFFER';  -- 查看最大缓冲区大小

3.3 字典缓冲区

字典缓冲区用于存储数据字典信息,参数DICT_BUF_SIZE控制字典缓冲区的大小。

3.4 SQL缓冲区

SQL缓冲区存储最近执行的SQL语句和查询结果集,用于减少硬interpreted(解析)次数。

3.5 排序区

排序区用于存放排序操作的缓存。当内存不足时,部分排序操作会临时写到磁盘上。

3.6 HASH区

HASH区用于存放哈希表的数据,是查询某些信息的有效区域。

3.7 重做日志文件管理

管理重做日志文件可以通过以下SQL命令:

SQL> select path from v$rlogfile;  -- 查看重做日志文件路径SQL> alter database add logfile '/dm7/data/DAMNEG/DAMENG04.log' size 512;  -- 添加日志文件SQL> alter database resize logfile '/dm7/data/DAMNEG/DAMENG04.log' to 1024;  -- 修改日志文件大小

需要注意所有重做日志文件大小必须一致。

转载地址:http://ydcpz.baihongyu.com/

你可能感兴趣的文章
php flush()刷新不能输出缓冲的原因分析
查看>>
Referenced classpath provider does not exist: org.maven.ide.eclipse.launchconfig
查看>>
Refactoring-Imporving the Design of Exsiting Code — 代码的坏味道
查看>>
PHP imap 远程命令执行漏洞复现(CVE-2018-19518)
查看>>
php include和require
查看>>
ref 和out 区别
查看>>
php JS 导出表格特殊处理
查看>>
php json dom解析
查看>>
ReentrantReadWriteLock读写锁解析
查看>>
php laravel实现依赖注入原理(反射机制)
查看>>
php laravel请求处理管道(装饰者模式)
查看>>
ReentrantReadWriteLock读写锁底层实现、StampLock详解
查看>>
PHP mongoDB 操作
查看>>
ReentrantLock读写锁
查看>>
ReentrantLock的公平锁与非公平锁
查看>>
php mysql procedure获取多个结果集
查看>>
php mysql query 行数,PHP和MySQL:返回的行数
查看>>
php mysql session_php使用MySQL保存session会话
查看>>
PHP mysql_real_escape_string() 函数防SQL注入
查看>>
php mysql优化方法_MySQL优化常用方法
查看>>