国产数据库达梦数据库DM7实例初始化dminit参数浅析

国产达梦数据库(DM7)在初始化数据库实例时会涉及到数据库标识如端口号的配置,也有页大小、字符集等参数的初始化配置,其中一些参数是作用在数据库实例的整个生命周期内的,一旦初始化不能修改。在实际使用过程中这些参数的不同,可能会对数据存储、查询、分组等存在不同的影响,本篇根据官方文档说明、实践经验、测例总结,主要阐述参数值不同带来的不同影响效果。

1、 页大小(PAGE_SIZE)
数据页(也称数据块) 是 DM 数据库中最小的数据存储单元。 页的大小对应物理存储空间上特定数量的存储字节。页大小可以为 4KB、 8KB、 16KB 或者 32KB,默认值为8K。
该参数主要影响的是数据库中实际可存储的字符串长度大小和一行数据的总长度。
在基表列定义字符串类型时,其最大存储长度由数据库页面大小决定,可以指定一个不超过其最大存储长度的正整数作为字符长度,最大存储长度和页面大小的对应关系请见下表。另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不能大于页面大小的一半(不包含大字段列)。

数据库实例页大小 字符串列定义实际最大长度
4K 1900
8K 3900
16K 8000
32K 8188

这个限制长度只针对建表的情况,在定义变量的时候和表达式计算中,可以不受这个限制长度的限制。
选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降。通长默认为8K即够用,也可根据实际业务需求选择合理的页大小或将长字符串列变为大字段列处理。

2、 簇大小(EXTENT_SIZE)
簇是数据页的上级逻辑单元 ,由同一个数据文件中 16 个或 32 个连续的数据页组成。即每次分配新的段空间时连续的页数。没有特殊需求默认16就可以。

3、 大小写敏感(CASE_SENSITIVE)
标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,在标识符比较时也不能区分大小写。通俗来说,就是大小写不敏感时无论大小写都是一样的;大小写敏感时,只有“”中的内容是严格区分大小写的,其他都会默认转换成大写。
如下图示例中,大小写敏感的情况下,表名因为没有双引号会默认转换为大写,字段中加了双引号的c3和Cc4会保持原有大小写的样子且只有使用定义时的方式才可查询到相应内容。
国产数据库达梦数据库DM7实例初始化dminit参数浅析_第1张图片
如下图示例中,大小写不敏感的情况下,表名、列名、字符串内容全部忽略大小写,无论大写、小写、是否加双引号都不影响。
国产数据库达梦数据库DM7实例初始化dminit参数浅析_第2张图片
4、 字符集编码(CHARSET/UNICODE_FLAG)
字符集选项。 取值: 0 代表 GB18030, 1 代表 UTF-8, 2 代表韩文字符集 EUC-KR。 默认为 0 。
5、 VARCHAR类型长度是否以字符为单位(LENGTH_IN_CHAR)
1 或 Y:是, 所有 VARCHAR 类型对象的长度以字符为单位。 这种情况下, 定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为 8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;
0 或 N:否,所有 VARCHAR 类型对象的长度以字节为单位。默认是0。

当length_in_char=0时,varchar类型列存储单位为字节,如下图示例中c2列varchar(10)最多存储10个字节。
国产数据库达梦数据库DM7实例初始化dminit参数浅析_第3张图片
当length_in_char=1时,varchar类型列存储单位为字符(即2个字节),如下图示例中c2列varchar(10)最多存储20个字节。
国产数据库达梦数据库DM7实例初始化dminit参数浅析_第4张图片
6、 空格填充模式(BLANK_PAD_MODE)
设置字符串比较时, 结尾空格填充模式是否兼容 ORACLE。 取值: 1 兼容; 0 不兼容。默认为 0。通俗来说,就是在比较、count等操作时是否严格区分字符串’a’和’a '。

当BLANK_PAD_MODE=0时,除去group by 这种分组操作时严格区分外,其他比较、count等操作不严格区分’a’和’a ',认为这两个字符串是相等的,如下图示例。
国产数据库达梦数据库DM7实例初始化dminit参数浅析_第5张图片
当BLANK_PAD_MODE=1时,所有操作严格区分’a’和’a ',如下图示例。
国产数据库达梦数据库DM7实例初始化dminit参数浅析_第6张图片
除以上参数会影响到具体的使用外,还有默认加密算法、默认HASH算法、根密钥加密引擎、全库加密算法、是否使用改进的字符类型HASH算法等参数也是实例生命周期内不允许修改的,这些参数只会在做备份还原时要求一致性,对实际使用影响不大,可根据需求定义即可。

你可能感兴趣的:(达梦数据库)