达梦数据库物理结构

物理结构

控制文件

  1. 实例路径、数据文件路径迁移使用到
  2. 记录了很多信息
  • 阅读控制文件
[dmdba@dmdb04 bin]$ ./dmctlcvt help
DMCTLCVT V8
version: 03134283890-20220304-158322-10045
格式: ./dmctlcvt KEYWORD=value
注意: 控制文件名称必须指定为dm.ctl、dmmpp.ctl、dss.ctl
关键字              说明
--------------------------------------------------------------------------------
TYPE                1 转换控制文件为文本文件(源文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
                    2 转换文本文件为控制文件(目标文件路径中控制文件名称必须是dm.ctl或dmmpp.ctl或dss.ctl)
SRC                 源文件路径
DEST                目标文件路径
DCR_INI             dmdcr.ini文件路径
DFS_INI             dmdfs.ini文件路径
HELP                打印帮助信息

示例:
./dmctlcvt TYPE=1 SRC=/opt/dmdbms/data/dameng/dm.ctl DEST=/opt/dmdbms/data/dameng/dmctl.txt
./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/dameng/dmctl.txt DEST=/opt/dmdbms/data/dameng/dm.ctl
[dmdba@dmdb04 bin]$ ./dmctlcvt type=1 src=/dm8/data/DAMENG/dm.ctl dest=/dm8/data/DAMENG/dm.txt
DMCTLCVT V8
convert ctl to txt success!
[dmdba@dmdb04 DAMENG]$ cat /dm8/data/DAMENG/dm.txt 
[dmdba@dmdb04 bin]$ ./dmctlcvt type=2 src=/dm8/data/DAMENG/dm.txt dest=/dm8/data/DAMENG/dm.ctl
##控制文件备份路径
[dmdba@dmdb04 DAMENG]$ cat dm.ini | grep CTL_BAK_PATH

数据文件

  1. 建议使用.DBF后缀
  2. 创建表空间时创建一个数据文件
  3. 还可以添加数据文件
create tablespace "DAMENG" datafile '/dm8/data/DAMENG/DAMENG01.DBF' size 1024 autoextend on next 1024 maxsize 40960 cache=NORMAL;
alter tablespace "DAMENG" add datafile '/dm8/data/DAMENG/DAMENG02.DBF' size 1024 autoextend on next 1024 maxsize 40960;

联机重做日志

  1. 联机重做日志只能加大大小,不能缩小大小
  2. 联机重做日志可以增加文件
alter database resize logfile '/dm8/data/DAMENG/dmdb01.log' to 2048;
alter database add logfile '/dm8/data/DAMENG/dmdb03.log' size 2048;

初始化参数

参数类型

  1. 有两个视图可以查看初始化参数的值,vKaTeX parse error: Can't use function '\v' in math mode at position 10: parameter\̲v̲dm_ini
SQL> select distinct type from v$parameter;
行号     TYPE     
---------- ---------
1          READ ONLY
2          SYS
3          IN FILE
4          SESSION
  1. READ ONLY:只读参数,不能通过系统函数或者sql命令修改,只能修改dm.ini配置文件,有些还要重建实例才能修改。
  2. IN FILE:静态参数,可以通过系统函数或者SQL命令修改
  3. SYS:动态参数(系统级)
  4. SESSION:动态参数(会话级)

静态和动态参数都可以通过系统函数或者SQL命令修改,但静态参数修改后要重启数据库才生效;
动态参数即能修改内存中的值,也能修改配置参数文件中的值。
相当于oracle中的:scope=both|spfile|memory

修改参数的方法

  1. 直接修改配置文件
  2. 通过console 工具修改,其实也是修改配置文件
  3. 通过SQL命令修改(类似oracle的)
  4. 通过函数修改
SQL命令修改参数
  • 修改静态参数:数据库兼容性参数,COMPATIBLE_MODE
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='COMPATIBLE_MODE';
行号     NAME            TYPE    VALUE SYS_VALUE FILE_VALUE DESCRIPTION                                                                                    
---------- --------------- ------- ----- --------- ---------- -----------------------------------------------------------------------------------------------
1          COMPATIBLE_MODE IN FILE 0     0         0          Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata 

## TYPE=IN FILE的不能修改内存值,只能修改文件值,重启生效
SQL> alter system set 'COMPATIBLE_MODE' = 2 both;
alter system set 'COMPATIBLE_MODE' = 2 both;
[-839]:不能修改静态配置参数的内存值.
SQL> alter system set 'COMPATIBLE_MODE' = 2 spfile;
DMSQL 过程已成功完成
  • 修改动态参数:UNDO_RETENTION
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='UNDO_RETENTION';
行号     NAME           TYPE VALUE      SYS_VALUE  FILE_VALUE DESCRIPTION                                                                             
---------- -------------- ---- ---------- ---------- ---------- ----------------------------------------------------------------------------------------
1          UNDO_RETENTION SYS  90.000000 90.000000 90.000000 Maximum retention time in seconds for undo pages since relative transaction is committed

SQL>  alter system set 'UNDO_RETENTION'=180 both;
DMSQL 过程已成功完成
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='UNDO_RETENTION';
行号     NAME           TYPE VALUE      SYS_VALUE  FILE_VALUE DESCRIPTION                                                                             
---------- -------------- ---- ---------- ---------- ---------- ----------------------------------------------------------------------------------------
1          UNDO_RETENTION SYS  180.000000 180.000000 180.000000 Maximum retention time in seconds for undo pages since relative transaction is committed
SQL>  alter system set 'UNDO_RETENTION'=300 memory;
已用时间: 3.739(毫秒). 执行号:1113.
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='UNDO_RETENTION';
行号     NAME           TYPE VALUE      SYS_VALUE  FILE_VALUE DESCRIPTION                                                                             
---------- -------------- ---- ---------- ---------- ---------- ----------------------------------------------------------------------------------------
1          UNDO_RETENTION SYS  300.000000 300.000000 180.000000 Maximum retention time in seconds for undo pages since relative transaction is committed
  • 修改会话类型的参数:只有当前会话的值变了,这个值代表默认创建的表类型,1代表创建堆表
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='LIST_TABLE';
行号     NAME       TYPE    VALUE SYS_VALUE FILE_VALUE DESCRIPTION                                          
---------- ---------- ------- ----- --------- ---------- -----------------------------------------------------
1          LIST_TABLE SESSION 0     0         0          Whether to convert tables to LIST tables when created
SQL>  alter session set 'LIST_TABLE'=1;
DMSQL 过程已成功完成
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='LIST_TABLE';
行号     NAME       TYPE    VALUE SYS_VALUE FILE_VALUE DESCRIPTION                                          
---------- ---------- ------- ----- --------- ---------- -----------------------------------------------------
1          LIST_TABLE SESSION 1     0         0          Whether to convert tables to LIST tables when created
函数的方法修改参数
  • 查看系统函数的方法
--绑定执行计划函数(有多条记录说明可能多个参数不同的用法)
select * from v$ifun where name like '%PLN%';--SP_SET_PLN_BINDED
--清理执行计划函数
select * from v$ifun where name like '%CLEAR%';--SP_CLEAR_PLAN_CACHE
  • 查看修改参数函数
  1. SP_SET_PARA_DOUBLE_VALUE:修改double类型参数
  2. SP_SET_PARA_STRING_VALUE:修改string类型参数
  3. SP_SET_PARA_VALUE :修改INT类型参数
  4. 第一个参数scope=0|1|2,分别代表修改内存值、内存和配置文件值、配置文件值
SQL> select NAME,ID,ARG_NUM,EXTRA_ATTR from v$ifun where  name like '%SP_SET%_PARA%';
行号     NAME                     ID          ARG_NUM     EXTRA_ATTR
---------- ------------------------ ----------- ----------- ----------
1          SP_SET_PARA_DOUBLE_VALUE 586         3           NULL
2          SP_SET_PARA_STRING_VALUE 585         3           NULL
3          SP_SET_PARA_VALUE        584         3           NULL
##查看函数使用方法
SQL> select ID,NAME,SEQ,DATA_TYPE from v$ifun_arg where id=586;
行号     ID          NAME     SEQ         DATA_TYPE       
---------- ----------- -------- ----------- ----------------
1          586         RVAL     -1          UNKNOWN DATATYPE
2          586         SCOPE    0           INTEGER
3          586         PARANAME 1           VARCHAR
4          586         VALUE    2           DOUBLE
  • 函数使用示例
SQL> SP_SET_PARA_VALUE(1,'LIST_TABLE',0);
DMSQL 过程已成功完成
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='LIST_TABLE';
行号     NAME       TYPE    VALUE SYS_VALUE FILE_VALUE DESCRIPTION                                          
---------- ---------- ------- ----- --------- ---------- -----------------------------------------------------
1          LIST_TABLE SESSION 0     0         0          Whether to convert tables to LIST tables when created
SQL> SP_SET_PARA_VALUE(0,'COMPATIBLE_MODE',0);
SP_SET_PARA_VALUE(0,'COMPATIBLE_MODE',0);
[-839]:不能修改静态配置参数的内存值.
SQL> SP_SET_PARA_VALUE(1,'COMPATIBLE_MODE',0);
SP_SET_PARA_VALUE(1,'COMPATIBLE_MODE',0);
[-839]:不能修改静态配置参数的内存值.
SQL> SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',0);
DMSQL 过程已成功完成
##UNDO_RETENTION是DOUBLE类型
SQL> SP_SET_PARA_DOUBLE_VALUE(1,'UNDO_RETENTION',90);
DMSQL 过程已成功完成
### 达梦数据库内存结构详解 达梦数据库内存结构主要包括共享缓冲区、SQL 缓冲区、数据字典缓存、维护工作内存等关键组成部分,它们共同作用以提升数据库的性能和响应速度。 #### 共享缓冲区(Shared Buffer) 共享缓冲区是达梦数据库中用于缓存数据块的主要内存区域。它通过减少磁盘 I/O 操作来加速数据访问。该缓冲区的大小由 `BUFFER` 参数控制,通常在 `dm.ini` 配置文件中定义,默认为 2048MB(即 2GB)[^4]。共享缓冲区采用 LRU(Least Recently Used)算法进行管理,确保最常用的数据保留在内存中。 #### 数据字典缓存(Dictionary Buffer) 数据字典缓存用于存储数据库的元数据信息,如模式信息、表信息、列信息、触发器信息等。这部分缓存的大小由 `DICT_BUF_SIZE` 参数控制,默认为 5MB [^1]。同样采用 LRU 算法管理,以提高对数据字典信息查询的效率。 #### SQL 缓冲区(SQL Cache) SQL 缓冲区用于缓存已执行过的 SQL 语句及其执行计划,以便于后续相同 SQL 的快速执行。它可以显著减少 SQL 解析和编译的时间,从而提升性能。SQL 缓冲区的具体配置参数未明确提及,但其功能类似于其他数据库系统中的 SQL 缓存机制 。 #### 工作内存(Work Memory) 工作内存主要用于排序、哈希连接等临时操作。每个查询可以使用的最大工作内存量由 `work_mem` 参数控制,通常建议设置为 64MB 或更高,具体取决于系统的物理内存容量和并发查询的复杂度 [^1]。适当增加该参数可以提高复杂查询的执行效率。 #### 维护工作内存(Maintenance Work Memory) 维护工作内存专用于执行 VACUUM、CREATE INDEX 等数据库维护操作。这些操作通常需要较大的内存空间,因此可以通过调整 `maintenance_work_mem` 参数来分配更多内存资源,以加快维护任务的完成速度 [^1]。 #### 自动内存管理(Auto Memory Management) 达梦数据库支持自动内存管理功能,能够根据系统的负载情况动态调整各部分内存的分配。启用此功能后,数据库会根据实际运行状况自动优化内存使用,减少人工干预的需求。相关参数为 `auto_memory`,可设置为 `on` 或 `off` [^1]。 #### 内存泄漏检测(Memory Leak Check) 为了防止内存泄漏问题的发生,达梦数据库内置了内存泄漏检测机制。通过启用 `enable_memory_leak_check` 参数,可以在运行时监控内存的申请和释放情况,及时发现并修复潜在的内存泄漏问题 [^1]。 #### 示例配置 以下是一个典型的达梦数据库内存参数配置示例: ```ini # 共享缓冲区大小 BUFFER = 2048 # 数据字典缓存大小 DICT_BUF_SIZE = 5 # 工作内存 work_mem = 64 # 维护工作内存 maintenance_work_mem = 512 # 启用自动内存管理 auto_memory = on # 启用内存泄漏检测 enable_memory_leak_check = on ``` ### 总结 通过合理配置上述内存参数,可以有效提升达梦数据库的性能和稳定性。具体参数的取应根据实际的应用场景、数据规模以及硬件资源情况进行综合考虑。建议在调整参数之前,先进行充分的测试和评估,以确保调整后的配置能够满足业务需求并带来预期的性能提升。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

很Man的DM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值