上海蒙马软件技术有限公司
2021年8月8日
一、DM数据库初始化参数说明
达梦数据库初始化实例后初始化参数无法修改,如果要调整必须重新初始化库,所以为了移植、开发、维护的方便,根据应用特征合理规划初始化参数尤为重要,确定后形成安装规范项目组成员保持一致,如果初始化参数不一致的数据库实例间的物理备份、逻辑备份等将不能互用。
初始化参数进行详细说明:
初始化参数 | 对数据库使用的影响 |
---|---|
页大小(page size) | 字符串字段的最大长度及每行记录的总长度 |
日志文件大小(rlog) | 高并发事务下的刷盘速度 |
时区(time zone) | 时区不同时造成的时间不一致 |
字符串比较大小写敏感(string case sensitive) | SQL 语句及应用是否兼容 |
字符集(charset) | 字符的存储空间及可识别字符的数量 |
VARCHAR 类型以字符为单位(lengthin char) | dm 字符类型默认以字节来存储,影响应用对字符长度的判断 |
改进字符串 HASH 算法 | 改进字符串 HASH 算法 |
1) 页大小
在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。
页大小对字符数据类型实际最大长度及每行记录的影响如下表所示(不同的数据库版本略有差异):
数据库页大小 | 每个字符类型字段实际最大长度(字节) | 每行记录除大字段外其他字段总长度(字节) |
---|---|---|
4K | 1900 | 2000 |
8K | 3900 | 4000 |
16K | 8000 | 8000 |
32K | 8188 | 16000 |
除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为 16 或者 32。
2) 日志文件大小
每个 DM 数据库实例必须至少有 2 个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用,日志文件在初始化实例后可以增加和扩大,小型 OA 系统建议设置为 2*256M,在线大型交易系统建议设置为 4*2048M。
3) 时区
选择时区前,需要确认操作系统时区和数据库时区一致,以避免操作系统上看到的时间,和数据库中的时间存在差异。建议使用北京时间+8:00。
4) 字符串比较大小写敏感
为了兼容不同的数据库,达梦在初始化数据库的时候有一个参数,用来设置字符串比较是否大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感, ORACLE 迁移过来的系统,使用大小写敏感,以便和原来系统匹配。
5) 字符集
建议采用默认值 GB18030,如果需要国际字符可以采用 Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间些。
6)以字符为单位
该参数的作用是建表时 VARCHAR 的长度是按照字符计算还是字节计算,默认以字节为单位,即字段的长度单位按照字节计算,如果采用字符为单位,字段的长度单位按照字符来计算,不同的字符集会导致字段长度不一样,实际最大长度受到页大小的限制。建议采用默认以字节为单位,如果从 MYSQL 迁移的同时又不方便扩大表结构的长度,需要设置为以字符为单位。
7)改进字符串 HASH 算法
在之前的达梦版本上用的旧的 HASH 算法(大概 2014 年 10 月前后,具体时间未知),之后的版本默认使用新 HASH 算法,如果是从之前旧版本数据还原到新版本上使用,不能使用改进字符串 HASH 算法,其他情况使用改进字符串 HASH 算法。
示例一:从 ORACLE 迁移一个 24 小时在线交易型系统,数据量 300G 以上,表数量 500张以上,表含有少量 VARCHAR2(4000)字段,日增数据量 10 万条以上,建议:
簇大小:16 #每次申请的页数,表存满了以后会一次性连续申请16个页
页大小:16K
日志文件大小:4*2048M
时区:+8:00
字符串比较大小写敏感:是
字符集:GB18030
VARCHAR 类型以字符为单位:否
改进字符串HASH算法:是
示例二:从 MYSQL 迁移一个电子政务系统,含大量 VARCHAR2(4000)字段,日增数据量 100 条,建议:
簇大小:16
页大小:32K
日志文件大小:2*256M
时区:+8:00
字符串比较大小写敏感:否
字符集:GB18030 (如果涉及非中英文字符选择 Unicode,VARCHAR 类型以字符为单位:如果采用达梦 DTS 迁移选否,采用 SQL 脚本迁移选是)
改进字符串HASH算法:是
二、已有实例
系统中已经按照下面的指令建立了一个实例
./dminit PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1 DB_NAME=arpdb PATH=/opt/dmdbms/data
三、多实例注意事项
如果需要在初始化数据库实例,需要修改一下参数
-
DB_NAME 数据库名称(缺省:DAMENG)
-
INSTANCE_NAME 实例名(缺省:DMSERVER)
-
PORT_NUM 监听端口号(缺省:5236)
四、创建第二个实例
cd /opt/dm8/bin
./dminit PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1 DB_NAME=memadb PATH=/opt/dm8/data PORT_NUM=5327
五、启动第二个实例和数据库
./dmserver /opt/dmdbms/data/memadb/dm.ini
再开一个终端:
进入dmdba用户,查看进程状态:
ps -ef|grep dm
查看端口情况:
ss -nltp
六、用disql访问
使用disql访问,需要提供端口号
七、注册实例到系统服务
注册实例实现systemd管理,实现自动启停。
注册前:
注册(root用户运行):
命令:dm_service_installer.sh
关键参数:
-
-t
服务类型,包括dmimon,dmap,dmserver,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr,dmdcs,dmdrs,dmdras,dmdss -
-p
服务名后缀,对于dmimon,dmap服务类型无效
cd /opt/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p memadb -dm_ini /opt/dmdbms/data/memadb/dm.ini
注册后:
八、查看实例服务状态
重启机器,查看服务状态
九、实例启停查看
#用root用户
#启动数据库服务
systemctl start DmServicememadb
#停止数据库服务
systemctl stop DmServicememadb
#查看数据库服务状态
systemctl status DmServicememadb
十、练习
1、初始化数据库
以dmdba
用户运行
## dmdba用户
cd /opt/dmdbms/bin
# 创建新的数据库testdb,实例名称test
./dminit PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 LENGTH_IN_CHAR=0 BLANK_PAD_MODE=1 PATH=/opt/dmdbms/data DB_NAME=testdb INSTANCE_NAME=test PORT_NUM=5000
# 启动
./dmserver /opt/dmdbms/data/testdb/dm.ini
2、注册实例到服务
以root
用户运行 (注册服务前,再dmserver控制台按ctrl+C,停止数据库例程)
cd /opt/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p testdb -dm_ini /opt/dmdbms/data/testdb/dm.ini
# -t 服务类型,包括dmimon,dmap,dmserver,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr,dmdcs,dmdrs,dmdras,dmdss
# -p 服务名后缀,对于dmimon,dmap服务类型无效
3、数据库实例运行日志
数据运行运行日志位于/opt/dmdbms/log下:
-
例程日志:dm_TEST_202107.log
-
数据库日志:DmServicetestdb.log