Skip to content

DM 物理架构

达梦数据库的物理架构主要包括以下组件:

  • 数据文件:存储数据库的实际数据
  • 日志文件:记录数据库的修改操作
  • 控制文件:存储数据库的元数据和状态信息
  • 参数文件:存储数据库的配置参数
  • 临时文件:存储临时数据

数据文件

数据文件是达梦数据库中最主要的物理文件,用于存储数据库的实际数据,包括表数据、索引数据、大对象数据等。

数据文件的结构

达梦数据库的数据文件采用了页(Page)、区(Extent)、段(Segment)的层次结构:

  • 页(Page):最小的存储单位,默认大小为8KB,可配置为4KB、8KB、16KB或32KB
  • 区(Extent):由连续的页组成,是分配存储空间的基本单位,大小为64个页
  • 段(Segment):由多个区组成,是表、索引等对象的存储单位

数据文件的类型

达梦数据库的数据文件包括以下类型:

  • 系统数据文件:存储系统表空间的数据,包括SYSTEM、ROLL、TEMP等系统表空间
  • 用户数据文件:存储用户表空间的数据,如MAIN表空间和自定义表空间
  • 临时数据文件:存储临时表空间的数据,用于排序、哈希等临时操作

数据文件的管理

达梦数据库的数据文件管理包括以下方面:

  • 数据文件的创建:使用CREATE TABLESPACE语句创建表空间时,会自动创建对应的数据文件
  • 数据文件的扩展:当表空间空间不足时,数据文件会自动扩展,可配置扩展大小和最大大小
  • 数据文件的收缩:使用ALTER TABLESPACE语句可以收缩数据文件,释放未使用的空间
  • 数据文件的备份和恢复:使用备份工具可以对数据文件进行备份和恢复

日志文件

日志文件用于记录数据库的所有修改操作,确保事务的持久性和可恢复性。达梦数据库的日志包括重做日志(Redo Log)和归档日志(Archive Log)。

重做日志

重做日志记录了数据库的所有修改操作,用于崩溃恢复和实例恢复。

  • 重做日志的结构:重做日志以日志文件组的形式组织,每个日志文件组包含一个或多个日志文件
  • 重做日志的切换:当当前日志文件组满时,会自动切换到下一个日志文件组
  • 重做日志的循环使用:重做日志文件组采用循环使用的方式,当所有日志文件组都满时,会覆盖最早的日志文件组

归档日志

归档日志是重做日志的副本,用于数据库的介质恢复和时间点恢复。

  • 归档模式:达梦数据库支持归档模式和非归档模式,生产环境建议使用归档模式
  • 归档日志的生成:在归档模式下,当重做日志切换时,会将当前日志文件的内容归档到归档目录
  • 归档日志的管理:归档日志可以自动管理,也可以手动管理,需要定期清理过期的归档日志

日志缓冲区

日志缓冲区是内存中的一块区域,用于临时存储重做日志记录,提高日志写入效率。

  • 日志缓冲区的大小:可通过参数配置,默认大小为16MB
  • 日志缓冲区的刷新:当日志缓冲区满、事务提交或定期(默认3秒)时,会将日志缓冲区的内容刷新到磁盘
  • 日志写入方式:支持同步写入和异步写入,生产环境建议使用同步写入,确保数据安全

控制文件

控制文件是达梦数据库的重要物理文件,存储了数据库的元数据和状态信息,包括:

  • 数据库的名称和ID
  • 数据文件和日志文件的位置和状态
  • 数据库的创建时间和检查点信息
  • 归档日志的位置和状态

控制文件的特点

  • 控制文件的数量:达梦数据库支持多个控制文件,建议至少创建2个控制文件,存储在不同的磁盘上,提高可靠性
  • 控制文件的大小:控制文件的大小相对较小,通常在几MB到几十MB之间
  • 控制文件的更新:当数据库的结构或状态发生变化时,控制文件会自动更新
  • 控制文件的备份:控制文件需要定期备份,以防止控制文件损坏导致数据库无法启动

控制文件的管理

  • 控制文件的创建:数据库创建时自动创建控制文件
  • 控制文件的添加:使用ALTER DATABASE语句可以添加新的控制文件
  • 控制文件的备份:使用BACKUP CONTROLFILE语句可以备份控制文件
  • 控制文件的恢复:如果控制文件损坏,可以使用备份的控制文件进行恢复

参数文件

参数文件用于存储数据库的配置参数,控制数据库的运行行为。达梦数据库的参数文件包括:

dm.ini 文件

dm.ini是达梦数据库的主要参数文件,存储了数据库的核心配置参数,包括:

  • 数据库的基本配置,如实例名、端口号、字符集等
  • 内存配置,如缓冲区大小、共享池大小等
  • 存储配置,如表空间、数据文件等
  • 性能配置,如并发连接数、查询优化参数等
  • 安全配置,如审计、加密等

dmarch.ini 文件

dmarch.ini是归档配置文件,用于配置归档日志的存储位置和方式。

dmcluster.ini 文件

dmcluster.ini是集群配置文件,用于配置集群环境的相关参数。

dm_svc.conf 文件

dm_svc.conf是客户端配置文件,用于配置客户端的连接参数。

进程结构

达梦数据库的进程结构包括以下主要进程:

主进程(DBW)

  • 功能:数据库写进程,负责将数据缓冲区中的脏数据写入数据文件
  • 工作机制:定期扫描数据缓冲区,将脏数据写入数据文件
  • 配置参数:可通过参数DB_WRITER_THREADS配置DBW进程的数量

日志写进程(LGWR)

  • 功能:日志写进程,负责将日志缓冲区中的重做日志记录写入重做日志文件
  • 工作机制:当事务提交、日志缓冲区满或定期(默认3秒)时,将日志缓冲区的内容写入重做日志文件

检查点进程(CKPT)

  • 功能:检查点进程,负责更新控制文件和数据文件头的检查点信息
  • 工作机制:定期执行检查点,将内存中的脏数据写入数据文件,更新检查点信息
  • 配置参数:可通过参数CKPT_INTERVAL配置检查点的间隔时间

归档进程(ARCH)

  • 功能:归档进程,负责将重做日志文件的内容归档到归档目录
  • 工作机制:在归档模式下,当重做日志切换时,ARCH进程会将当前日志文件的内容归档

监听进程(DMSERVER)

  • 功能:监听客户端的连接请求,建立和管理客户端连接
  • 工作机制:监听指定的端口,接受客户端的连接请求,创建会话进程处理客户端请求

会话进程

  • 功能:会话进程,负责处理客户端的SQL请求
  • 工作机制:每个客户端连接对应一个会话进程,处理SQL语句的解析、优化和执行

内存结构

达梦数据库的内存结构包括以下主要组件:

数据缓冲区

  • 功能:缓存数据文件中的数据页,提高数据访问效率
  • 类型:包括缓冲区池(BUFFER_POOL)、大对象缓冲区(LARGE_BUFFER_POOL)等
  • 配置参数:可通过参数BUFFER和LARGE_BUFFER配置缓冲区的大小

日志缓冲区

  • 功能:缓存重做日志记录,提高日志写入效率
  • 配置参数:可通过参数LOG_BUFFER配置日志缓冲区的大小

共享池

  • 功能:缓存SQL语句、执行计划、数据字典等共享数据
  • 类型:包括SQL缓存(SQL_CACHE)、计划缓存(PLAN_CACHE)、字典缓存(DICT_CACHE)等
  • 配置参数:可通过参数SHARED_POOL_SIZE配置共享池的大小

工作区

  • 功能:用于排序、哈希、聚合等操作的临时内存区域
  • 配置参数:可通过参数SORT_BUF_SIZE配置工作区的大小

版本差异

DM7 物理架构

DM7的物理架构相对简单,主要包括:

  • 数据文件采用页、区、段的层次结构
  • 支持重做日志和归档日志
  • 主要进程包括DBW、LGWR、CKPT、ARCH等
  • 内存结构包括数据缓冲区、日志缓冲区、共享池等

DM8 物理架构

DM8在DM7的基础上进行了扩展和优化,主要改进包括:

  • 增加了对大页内存的支持,提高内存访问效率
  • 改进了日志写入机制,提高日志写入性能
  • 增加了多租户支持,每个租户有独立的系统表空间
  • 增强了对SSD等新型存储设备的支持
  • 改进了内存管理机制,提高内存利用率

最佳实践

物理架构设计建议

  • 合理配置数据文件:将数据文件分布在不同的磁盘上,避免I/O瓶颈
  • 合理配置日志文件:将日志文件放在高速存储设备上,提高日志写入性能
  • 使用归档模式:生产环境建议使用归档模式,确保数据的可恢复性
  • 配置多个控制文件:将控制文件存储在不同的磁盘上,提高可靠性
  • 合理配置内存参数:根据系统配置和业务需求,调整内存参数,提高性能

性能优化建议

  • 使用大页内存:配置大页内存可以提高内存访问效率
  • 优化磁盘I/O:使用RAID、SSD等技术提高磁盘I/O性能
  • 调整检查点频率:根据业务需求调整检查点频率,平衡性能和恢复时间
  • 优化日志写入:使用高速存储设备存放日志文件,配置合适的日志缓冲区大小
  • 监控磁盘空间:定期监控数据文件和归档日志的磁盘空间,避免空间不足

可靠性建议

  • 定期备份控制文件:防止控制文件损坏导致数据库无法启动
  • 定期备份归档日志:将归档日志备份到离线存储设备,防止数据丢失
  • 配置多路归档:将归档日志同时归档到多个位置,提高可靠性
  • 定期检查数据库完整性:使用DB_CHECK工具定期检查数据库的完整性

常见问题(FAQ)

Q1: 达梦数据库的数据文件默认大小是多少?

A1: 达梦数据库的数据文件默认大小为128MB,可在创建表空间时指定初始大小。

Q2: 如何查看达梦数据库的数据文件和日志文件信息?

A2: 可以通过以下方式查看:

  • 查询系统视图:SELECT * FROM V$DATAFILE; 查看数据文件信息
  • 查询系统视图:SELECT * FROM V$LOGFILE; 查看日志文件信息
  • 使用DM管理工具,在表空间和日志文件管理界面查看

Q3: 达梦数据库的重做日志文件大小如何配置?

A3: 可以在创建数据库时指定重做日志文件的大小,也可以使用ALTER DATABASE语句修改重做日志文件的大小。建议将重做日志文件大小配置为1GB-2GB,以减少日志切换频率。

Q4: 如何配置达梦数据库的归档模式?

A4: 可以通过以下步骤配置归档模式:

  1. 修改dm.ini文件,将ARCH_INI参数设置为1
  2. 创建dmarch.ini文件,配置归档路径和方式
  3. 重启数据库实例
  4. 使用ALTER DATABASE ARCHIVELOG语句启用归档模式

Q5: 达梦数据库的内存结构包括哪些部分?

A5: 达梦数据库的内存结构包括:

  • 数据缓冲区:缓存数据文件中的数据页
  • 日志缓冲区:缓存重做日志记录
  • 共享池:缓存SQL语句、执行计划、数据字典等
  • 工作区:用于排序、哈希、聚合等操作

Q6: 如何优化达梦数据库的磁盘I/O性能?

A6: 优化达梦数据库磁盘I/O性能的方法包括:

  • 将数据文件和日志文件分布在不同的磁盘上
  • 使用RAID技术提高磁盘I/O性能
  • 使用SSD等高速存储设备
  • 合理配置数据文件的大小和扩展方式
  • 调整检查点频率,平衡性能和恢复时间