DM 物理存储结构

DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。典型的物理存储结构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实际数据的数据文件、重做日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日志文件等,如图 2.1 所示。

图 2.1 DM 物理存储结构示意图.jpg

图2.1 DM物理存储结构示意图

2.1 配置文件

配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的目标:

  1. 启用/禁用特定功能项;
  2. 针对当前系统运行环境设置更优的参数值以提升系统性能。

2.1.1 DM 数据库服务配置

2.1.1.1 dm.ini

每创建一个 DM 数据库,就会自动生成 dm.ini 参数文件。dm.ini 是 DM 数据库启动所必须的配置文件,通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,主要的配置模块包括:控制文件相关、实例名、内存相关、线程相关等。

参数属性分为三种:手动、静态和动态。

手动,不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。

静态,可以被动态修改,修改后重启服务器才能生效。

动态,可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响当前会话和新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。

其中,动态修改是指 DBA 用户可以在数据库服务器运行期间,通过调用系统过程 SP_SET_PARA_VALUE()、SP_SET_PARA_DOUBLE_VALUE()和 SP_SET_PARA_STRING_VALUE()对参数值进行修改。当动态修改 dm.ini 参数文件时,如果遇到磁盘空间不足导致系统崩溃的情况,需要手动使用 dm.ini 文件所在目录下的 dm.ini.dmbak 文件恢复 dm.ini,并重启服务器。

当手动修改 dm.ini 参数文件且将 dm.ini 中的某参数值设置为非法值时,若设置值与参数类型不兼容,则参数实际取值为默认值;若设置值小于参数取值范围的最小值,则实际取值为最小值;若设置值大于参数取值范围的最大值,则实际取值为最大值。

当动态修改 ini 参数且设置参数为非法值时,包括设置值与参数类型不兼容、设置值小于参数取值范围的最小值、设置值大于参数取值范围的最大值三种情况,均进行报错处理。

2.1.1.1.1 文件路径相关

文件路径相关参数。

表 2.1 dm.ini 中控制文件相关参数

参数名 缺省值 属性 说明
CTL_PATH SYSTEM_PATH 手动 控制文件路径
CTL_BAK_PATH SYSTEM_PATH\ctl_bak 手动 控制文件备份路径。在初始化库或没有配置该项时均指定为缺省路径。
dm.ctl备份文件命名格式:“dm_年月日时分秒_毫秒.ctl”
dmtemp.ctl备份文件命名格式:“dmtemp_年月日时分秒_毫秒.ctl”
备份文件在初始化库和每次修改控制文件后生成
CTL_BAK_NUM 10 手动 控制文件备份个数限制,取值范围1~100,在此限制之外,会再多保留一个备份文件,在生成新的备份文件时,
如果当前已存在的备份文件个数大于指定值,则自动删除创建时间最早的备份文件,小于或等于指定值的情况下,
不会有删除操作,缺省值为10
SYSTEM_PATH 数据库目录\数据库名 手动 系统库目录。其中数据库目录由安装时指定,或者dminit工具PATH参数指定
CONFIG_PATH SYSTEM_PATH 手动 指定DMSERVER所读取的配置文件(DMMAL.INI, DMARCH.INI, DMTIMER.INI等)的路径。
缺省使用SYSTEM_PATH路径。不允许指定ASM目录
TEMP_PATH SYSTEM_PATH\TEMP.DBF 手动 临时库文件路径
BAK_PATH SYSTEM_PATH/BAK 手动 备份路径
XBOX_DUMP_PATH 空串 手动 XBOX邮件保存到临时文件的目录。和XBOX_DUMP_THRESHOLD一起设置才生效
2.1.1.1.2 实例名

表 2.2 dm.ini 中实例名相关参数

参数名 缺省值 属性 说明
INSTANCE_NAME DMSERVER 静态 实例名。只能由_、$、大写字母A至Z、小写字母A至Z、数字0至9组成,且第一个字符不能是数字。长度不超过16个字节
2.1.1.1.3 内存相关

表 2.3 dm.ini 中内存相关参数

参数名 缺省值 属性 说明
MAX_OS_MEMORY 100 静态 DM服务器能使用的最大内存占操作系统物理内存与虚拟内存总和的百分比,取值范围40~100。当取值100时,服务器不进行内存的检查
注:对于32位版本的DM服务器,虚拟内存最大为2G
MEMORY_POOL 500 静态 共享内存池大小,单位MB。共享内存池是由DM管理的内存。取值范围:32位平台为64~2000,64位平台为64~67108864
MEMORY_N_POOLS 1 静态 共享内存池个数,取值范围0~2048,0与1等价,即共享池不分片。分片时,每池的初始容量为MEMORY_POOL / MEMORY_N_POOLS, 但受最小初始容量为30M限制,因此实际分片数可能会小于MEMORY_N_POOLS,每个池的TARGET也按此方式由MEMORY_TARGET导出
MEMORY_TARGET 15000 动态,系统级 共享内存池在扩充到此大小以上后,空闲时收缩回此指定大小,单位MB,取值范围:32位平台为0~2000,64位平台为0~67108864,0表示不限制
MEMORY_EXTENT_SIZE 32 静态 共享内存池每次扩充的大小,单位MB,取值范围1~10240
MEMORY_LEAK_CHECK 0 动态,系统级 是否开启内存泄漏检测。0:否;1:是,此时系统对每一次内存分配都登记到动态视图V$MEM_REGINFO中, 并在释放时解除登记
MEMORY_MAGIC_CHECK 1 静态 是否开启对所有内存池的校验。0:不开启;1:开启校验,校验码基于分配出的块地址计算,在被分配空间的头部和尾部写入校验码;2:增强校验,在1的基础上,如果是内存池分配的,则对尾部未使用空间也计算校验码,写入未使用空间的头部
HUGEPAGE_THRESHOLD 16 动态,系统级 如果从OS申请内存的尺寸大于等于 HUGEPAGE_THRESHOLD * 2MB, 则尝试先申请巨页内存,若失败再申请常规内存; 0表示不尝试使用巨页内存。取值范围0~1024。注:本参数仅对LINUX操作系统有效,使用巨页内存需要对OS进行相关配置
MEMORY_BAK_POOL 4 静态 系统备份内存池大小,单位MB。系统备份内存池是由DM管理的内存。取值范围2~2048
HUGE_MEMORY_PERCENTAGE 50 静态 指示HUGE_BUFFER中可以借用作常规内存分配的空间百分比,取值范围0~100
HUGE_BUFFER 80 静态 HUGE表使用的缓冲区大小,单位MB。取值范围8~1048576
HUGE_BUFFER_POOLS 4 静态 HUGE BUFFER系统分区数,每个HUGE BUFFER分区的大小为HUGE_BUFFER/HUGE_BUFFER_POOLS。取值范围1~10000
BUFFER 8000 静态 系统缓冲区大小,单位MB。推荐值:系统缓冲区大小为可用物理内存的60%~80%。取值范围8~16777216。在PAGE_SIZE 为4K的库中,BUFFER最大值为15728640
BUFFER_POOLS 19 静态 BUFFER系统分区数,每个BUFFER分区的大小为BUFFER/BUFFER_POOLS。取值范围1~512
FAST_POOL_PAGES 3000 静态 快速缓冲区页数。取值范围0~99999999。 FAST_POOL_PAGES的值最多不能超过BUFFER总页数的90%,如果超过,系统会自动调整为BUFFER总页数的90%
FAST_ROLL_PAGES 1000 静态 BUFFER中FAST POOL回滚页数量。取值范围0~9999999,最多不超过FAST_POOL_PAGES的75%,如果超过,系统会自动调整。填充规则:将回滚表空间0号文件的0~FAST_ROLL_PAGE-1号页填入FAST POOL中
KEEP 8 静态 KEEP缓冲区大小,单位MB。取值范围8~16777216
RECYCLE 300 静态 RECYCLE缓冲区大小,单位MB。取值范围8~16777216
RECYCLE_POOLS 19 静态 RECYCLE缓冲区分区数,每个RECYCLE分区的大小为RECYCLE/RECYCLE缓冲区分区数。取值范围1~512。一般情况下,每个RECYCLE分区的大小为RECYCLE/RECYCLE_POOLS,但系统也会自动校正RECYCLE缓冲区分区数,以保证每个分区中数据页不少于3000页
MULTI_PAGE_GET_NUM 1 静态 缓冲区最多一次读取的页面数,当且仅当ENABLE_FREQROOTS=0时有效。取值范围1~64。 当ENABLE_FREQROOTS值非0时,为开启动态FAST POOL填充模式,此时系统会强制调整MULTI_PAGE_GET_NUM=1,并关闭预加载功能。
注:当数据库加密时不支持多页读取,此时dm.ini中此参数值无效
PRELOAD_SCAN_NUM 0 动态,系统级 数据页首次预加载时连续扫描的页数,取值范围0~64。取值为0时关闭数据页预加载功能。
注:PRELOAD_SCAN_NUM实际有效范围为0 ~ EXTENT_SIZE – 2,当大于EXTENT - 2时将会间接失效预加载
PRELOAD_EXTENT_NUM 0 动态,系统级 数据页首次预加载的簇数量,取值范围0~64。取值为0时关闭数据页预加载功能
SORT_FLAG 1 动态,会话级 排序机制。 0:原排序机制,普通排序方式,按照排序缓冲区SORT_BUF_SIZE大小获取数据,并进行排序; 1:新排序机制,大内存排序方式,将大内存排序缓冲区SORT_BUF_GLOBAL_SIZE按照内存片大小SORT_BLK_SIZE进行分片,并对每个内存片进行排序,再对整个大内存排序缓冲区的数据进行排序; 2:采用SORT_FLAG为0的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序; 3:采用SORT_FLAG为1的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序
SORT_ADAPTIVE_FLAG 0 动态,会话级 自适应排序区大小的方式。 0:不进行自适应; 1:SORT_FLAG为0、2时,计算待排序数据的实际排序所需要的内存大小,尽可能地分配所需要的内存,如果申请失败则减半申请,直到申请成功,并按照实际申请的内存大小代替SORT_BUF_SIZE大小进行使用。对进行过刷盘的数据进行排序时,计算排序所需要的内存,尽可能地放大排序内存,保证一次排序可以结束排序。SORT_FLAG为1、3时,根据SORT_BUF_GLOBAL_SIZE和分片内存最大10000个的限制,计算SORT_BLK_SIZE的最小值,如果SORT_BLK_SIZE小于最小值,则实际按照最小值来分片。对整个大内存排序缓冲区的数据进行排序时,计算排序所需要的内存,尽可能地放大排序内存,保证一次排序可以结束排序; 2:SORT_FLAG为0、2时,按照行数估算待排序数据的实际排序所需要的内存大小,找到最适合排序算法的内存大小。当待排序的数据行数超过50万时,才开启此优化,数据量太小无需优化; 3:1和2的组合。当SORT_FLAG为0、2时,计算待排序数据的实际排序所需要的内存大小时,采用SORT_ADAPTIVE_FLAG为2的按照行数估算待排序所需要内存大小。除此之外的其他情况均保持SORT_ADAPTIVE_FLAG为1的方式
SORT_BUF_SIZE 20 动态,会话级 原排序机制下,排序缓存区最大值,单位MB。取值范围1~2048
SORT_BUF_GLOBAL_SIZE 1000 动态,系统级 新排序机制下,排序全局内存使用上限,单位MB。取值范围10~4294967294。该值须大于SORT_BUF_SIZE的值,否则会在重启时被重置为SORT_BUF_SIZE两倍和100之间的最大值
SORT_BLK_SIZE 1 动态,会话级 新排序机制下对数据进行排序的排序缓冲区分片大小,单位MB。取值范围1~50。 SORT_BLK_SIZE一般不需要设置太大,该内存片大小能容纳1万至5万行待排序的数据即可。该值须小于等于SORT_BUF_SIZE,否则会在重启时被重置为SORT_BUF_SIZE。为了保证归并排序的效率,对于大内存排序缓冲区的总的分片个数系统上限为10000个,因此,当SORT_BUF_GLOBAL_SIZE足够大的时候,为了保证大内存排序缓冲区能容纳足够多的数据,需要适当调大SORT_BLK_SIZE。例如,当SORT_BLK_SIZE为1时,SORT_BUF_GLOBAL_SIZE的最大可用值为10000。如果SORT_BUF_GLOBAL_SIZE需要20000M可用空间排序时,需要设置SORT_BLK_SIZE最小为2
SORT_BUF_SINGLE_SIZE 10000 动态,会话级 控制单个排序操作符内存使用上限,大内存排序场景(参数SORT_FLAG取值包含1时)有效。在允许的取值范围内,内部还将检查其取值是否合理,SORT_BUF_SINGLE_SIZE的合理取值应该大于或等于SORT_BLK_SIZE且小于或等于SORT_BUF_GLOBAL_SIZE。取值范围1~4294967294
HAGR_HASH_SIZE 100000 动态,会话级 HAGR操作时,建立HASH表的桶个数。取值范围10000~100000000
MAL_LEAK_CHECK 0 动态,系统级 是否打开MAL内存泄露检查。0:关闭;1:打开 MAL_LEAK_CHECK为1时,可查询V$MAL_USING_LETTERS检查MAL内存泄露。
HJ_BUF_GLOBAL_SIZE 5000 动态,系统级 HASH 连接操作符的数据总缓存大小,单位MB。取值范围10~500000。该值须大于HJ_BUF_SIZE的值,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为HJ_BUF_SIZE两倍和500之间的最大值
HJ_BUF_SIZE 500 动态,会话级 单个HASH连接操作符的数据总缓存大小,单位MB。取值范围2~100000。该值须小于HJ_BUF_GLOBAL_SIZE的值,否则会在尝试使用系统函数修改为非法值时,被重置为HJ_BUF_GLOBAL_SIZE/2与100000之间的最小值
HJ_BLK_SIZE 2 动态,会话级 HASH连接操作符每次分配缓存(BLK)大小,单位MB。取值范围1~50。该值须小于等于HJ_BUF_SIZE的值,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为HJ_BUF_SIZE
HAGR_BUF_GLOBAL_SIZE 5000 动态,系统级 分组、嵌套连接、集合运算、分析函数运算、统计信息、DISTINCT、临时表、TOP、ESEND操作符的数据总缓存大小,单位MB。取值范围10~1000000。该值须大于等于HAGR_BUF_SIZE,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为两倍HAGR_BUF_SIZE和500之间的最大值
HAGR_BUF_SIZE 500 动态,会话级 单个分组、嵌套连接、集合运算、分析函数运算、统计信息、DISTINCT、临时表、TOP、ESEND操作符的数据总缓存大小,单位MB。取值范围2~500000。该值须小于HAGR_BUF_GLOBAL_SIZE的值,否则会在尝试使用系统函数修改为非法值时,被重置为HAGR_BUF_GLOBAL_SIZE/2与500000之间的最小值
HAGR_BLK_SIZE 2 动态,会话级 分组、嵌套连接、集合运算、分析函数运算、统计信息、DISTINCT、临时表、TOP、ESEND操作符每次分配缓存(BLK)大小,单位MB。取值范围1~50。该值须小于等于HAGR_BUF_SIZE的值,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为HAGR_BUF_SIZE
MTAB_MEM_SIZE 8 动态,系统级 MTAB缓存BDTA占用内存空间的大小,单位KB,取值范围1~1048576
FTAB_MEM_SIZE 0 静态 FTAB缓存BDTA占用内存空间的大小,单位KB。取值范围为0~64 * 1024。0表示使用MTAB,大于0时才使用FTAB。当取值小于32时,FTAB_MEM_SIZE均使用32。
FTAB功能已废弃
MMT_SIZE 0 动态,会话级 是否使用MMT。0:不启用;其他有效值:启用,并确定单个映射文件大小,必须小于MMT_GLOBAL_SIZE。取值范围0~64,单位MB
MMT_GLOBAL_SIZE 4000 动态,系统级 系统总共使用MMT的文件总大小,单位MB,取值范围10~1000000,仅在MMT_SIZE大于0时有效
MMT_FLAG 1 动态,会话级 MMT存储数据方式。1:按页存储;2:BDTA存储。仅在MMT_SIZE大于0时有效
DICT_BUF_SIZE 50 静态 字典缓冲区大小,单位MB,取值范围1~67108864
HFS_CACHE_SIZE 160 动态,系统级 HUGE表 I/U/D 时HDTA_BUFFER缓存池大小,单位为MB。取值范围160~2000
VM_STACK_SIZE 256 静态 系统执行时虚拟机堆栈大小,单位KB,堆栈的空间是从操作系统中申请的,取值范围64~256*1024)
VM_POOL_SIZE 64 静态 系统执行时虚拟机内存池大小,单位KB,在执行过程中用到的内存大部分是从这里申请的,它的空间是从操作系统中直接申请的,取值范围32~1024*1024
VM_POOL_TARGET 16384 静态 虚拟机内存池能扩充到的最大大小,单位KB,取值范围0~10*1024*1024,0表示不限制
SESS_POOL_SIZE 64 动态,系统级 会话缓冲区大小,单位KB,取值范围16~1024*1024。若所申请的内存超过实际能申请的大小,则系统将按16KB大小重新申请
SESS_POOL_TARGET 16384 动态,系统级 会话缓冲区能扩充到的最大大小,单位KB,取值范围0~10*1024*1024,0表示不限制
RT_HEAP_TARGET 8192 动态,系统级 会话上用于动态对象存储的RT_HEAP最大可扩展到的大小,单位KB,取值范围8192~10*1024*1024
VM_MEM_HEAP 0 动态,系统级 VM是否使用HEAP分配内存。0:MEMORY POOL模式;1:HEAP模式;2:MEMORY POOL和HEAP混合模式
RFIL_RECV_BUF_SIZE 16 静态 控制服务器启动时,进行REDO操作过程中,REDO日志文件恢复时BUFFER的大小,单位MB,取值范围16~4000
HAGR_DISTINCT_HASH_TABLE_SIZE 10000 动态,会话级 分组DISTINCT操作中HASH表的大小(桶数)。取值范围为10000~100000000
CNNTB_HASH_TABLE_SIZE 100 动态,会话级 指定CNNTB操作符中创建HASH表的大小。取值范围100~100000000
GLOBAL_RTREE_BUF_SIZE 100 动态,会话级 R树全局缓冲区大小,单位MB
SINGLE_RTREE_BUF_SIZE 10 动态,会话级 单个R树的缓冲区大小,单位MB,必须小于GLOBAL_RTREE_BUF_SIZE
SORT_OPT_SIZE 0 静态 整型/浮点型数据排序优化辅助空间大小,单位MB,取值范围0~1024。取值0M时不使用优化;取值1M时对应待排序数组中元素的最大最小差值为262144,超过则不能使用优化
TSORT_OPT 1 动态,系统级 排序优化选项。0:排序操作一律使用估算的行数分配内存(至少2M);1:打开优化,排序操作结果行数较少时,使用实际的记录行数分配内存
BIND_PLN_PERCENT 30 静态 固定计划占据计划缓存空间的最大比例,取值范围0~100
FBACK_HASH_SIZE 10000 动态,系统级 闪回系统中HASH表的桶个数。取值范围10000~1000000
XBOX_MEMORY_TARGET 1024 动态,系统级 XBOX 系统内存在扩充到此大小以上后,空闲时收缩回此指定大小,单位MB。取值范围1024~262144
ID_RECYCLE_THRESHOLD 60 静态 ID重用的开启比例。取值范围0~100。ID使用量超过此比例时,即当(可重用对象已分配的ID数目/非扩展的ID数目)*100>=ID_RECYCLE_THRESHOLD时,开启ID重用;小于ID_RECYCLE_THRESHOLD时,关闭ID重用
POOL_CLEAR_FLAG 0 静态 内存池释放时是否全部清理,不全部清理时保留TARGET的内存。1:是;0:否
REGEX_MEM_LIMIT 20 静态 限制对于正则表达式第三方库允许使用的内存上限,单位MB,取值范围0~8102。0表示不限制,当设置值小于10时无效,系统会强制设置为10
2.1.1.1.4 线程相关

表 2.4 dm.ini 中线程相关参数

参数名 缺省值 属性 说明
WORKER_THREADS 16 静态 并发处理会话连接的线程数量;当打开SESS线程池(即STHD_FLAG=2或3时)时,该值为初始化的SESS线程池的组数量。取值范围1~64
TASK_THREADS 16 静态 任务线程个数。非DMDSC环境取值范围1~1000;DMDSC环境取值范围16~1000
FAST_RW_LOCK 1 静态 快速读写锁标记。0:不启用;1:表示只有FAST POOL启用,2:表示所有POOL都启用
SPIN_TIME 4000 静态 线程在不能进入临界区时,自旋的次数。取值范围0~400000
WORK_THRD_STACK_SIZE 8192 静态 工作线程堆栈大小,单位KB。取值范围1024~32768
WORK_THRD_RESERVE_SIZE 512 静态 工作线程预留栈帧大小,单位KB。取值范围200~1024
WORK_THRD_RESERVE_SIZE受WORK_THRD_STACK_SIZE限制,最多预留工作线程堆栈大小一半
WORKER_CPU_PERCENT 0 静态 工作线程占CPU的比重,仅非WINDOWS下有效。取值范围0~100。0表示不限制,相当于100
NESTED_C_STYLE_COMMENT 0 动态,系统级 是否支持C风格的嵌套注释。0:不支持;1:支持
STHD_FLAG 0 静态 是否启用ESESS/SESS线程池。取值范围0~3。0:表示关闭;1:表示打开ESESS线程池;2:表示打开SESS线程池;3:表示同时打开ESESS和SESS线程池
STHD_THREAD_NUM 8 静态 每个SESS/ESESS线程池初始化的线程数量。取值范围1~10000
STHD_GRP_NUM 8 静态 DMDPC专用。初始化的ESESS线程池的组数量。取值范围1~64
THRDS_POOL_INIT 50 静态 底层线程池初始化的线程数量。取值范围1~65535
THRDS_POOL_MAX 0 静态 底层线程池最大的线程数量。取值范围0~65535。0表示不限制最大线程数量
PTHD_THRD_POOLS 16 静态 PTHD线程池的组数量。取值范围1~64
MAX_SEC_ASYNC_THREADS 0 动态,系统级 当参数INDEX_FINS_FLAG取值包含1时,二级索引可能由异步线程维护,该参数用于限制异步处理二级索引使用的线程数量。取值范围0~65535,0表示不限制最大线程数量。
需要注意的是,执行中实际可使用的线程数量还受到线程池参数THRDS_POOL_MAX的限制
ASYNC_THRD_MAX_PERCENT 100 动态,系统级 全局异步线程数占所有工作线程数的最大百分比,超过时则不再抛出异步任务,报错处理
2.1.1.1.5 查询相关

表 2.5 dm.ini 中查询相关参数

参数名 缺省值 属性 说明
USE_PLN_POOL 1 静态 是否重用执行计划。0:禁止执行计划的重用;1:启用执行计划的重用功能 ;2:对不包含显式参数的语句进行常量参数化优化;3:即使包含显式参数的语句,也进行常量参数化优化
DYN_SQL_CAN_CACHE 1 动态,系统级 是否缓存动态语句的执行计划。0:不缓存;1:当USE_PLN_POOL不为0时,缓存动态语句的执行计划
RS_CAN_CACHE 0 静态 结果集缓存配置。0:禁止重用结果集;1:强制模式,此时默认缓存所有结果集,但可通过RS_CACHE_TABLES参数和语句HINT进行手动设置;2:手动模式,此时默认不缓存结果集,但可通过语句HINT对必要的结果集进行缓存
注:DPC环境下不支持结果集缓存,故RS_CAN_CACHE等结果集缓存相关参数无法在DPC环境下开启
RS_CACHE_TABLES 空串 手动 指定可以缓存结果集的基表的清单,当RS_CAN_CACHE=1时,只有查询涉及的所有基表全部在此参数指定范围内,该查询才会缓存结果集。当参数值为空串时,此参数失效。
RS_CACHE_MIN_TIME 0 动态,系统级 结果集缓存的语句执行时间下限,只有实际执行时间不少于指定时间值的查询,其结果集才会被缓存,仅在RS_CAN_CACHE=1时有效。缺省值0,表示不限制;取值范围0~4294967294,单位毫秒
RS_BDTA_FLAG 0 静态 是否以BDTA形式返回结果集。0:以行为单位返回结果集;2:以BDTA形式返回结果集
RS_BDTA_BUF_SIZE 32 静态 配置消息长度,单位KB。取值范围8~32768
RS_TUPLE_NUM_LIMIT 2000 静态 控制结果集能在内存中缓存的最大行数,取值范围1~65534。语句块执行时要先填充结果集,填充行数超过该值时会刷盘保存结果集
RESULT_SET_LIMIT 10000 动态,会话级 一次请求可以生成的结果集最大个数。取值范围100~65000
RESULT_SET_FOR_QUERY 0 动态,会话级 是否生成非查询结果集。0:生成;1:不生成
SESSION_RESULT_SET_LIMIT 10000 动态,系统级 会话上结果集个数上限,取值范围100~65000
BUILD_FORWARD_RS 0 静态 仅向前游标是否生成结果集。0:不生成;1:生成
MAX_OPT_N_TABLES 6 动态,会话级 优化器在处理连接时,一次能优化的最大表连接个数。取值范围3~8
MAX_N_GRP_PUSH_DOWN 5 动态,会话级 用来控制GROUP BY下放优化的最大叶子表节点个数。在PLACE_GROUP_BY_FLAG为2时生效
CNNTB_MAX_LEVEL 20000 动态,会话级 层次查询的最大支持层次。取值范围1~100000
CTE_MAXRECURSION 100 动态,会话级 递归WITH CTE迭代层次。会话级参数。取值范围1~4294967294
CTE_OPT_FLAG 1 动态,会话级 递归WITH CTE优化选项,表示相关子查询是否转换为WITH FUCNTION优化。 取值0或1
BATCH_PARAM_OPT 0 静态 是否启用批量参数优化,0:不启用;1:启用,默认不启用。当置为1时,不返回操作影响的行数
CLT_CONST_TO_PARAM 0 静态 是否进行语句的常量参数化优化,0:不进行;1:进行
LIKE_OPT_FLAG 127 动态,会话级 LIKE查询的优化开关。
0:不优化;
1:对于LIKE表达式首尾存在通配符的情况,优化为POSITION()函数;对于LIKE表达式首部存在通配符,并且条件列存在REVERSE()函数索引时,优化为REVERSE()函数;
2:对于COL1 LIKE COL2 || '%'的情况,如果COL1上没有索引,则优化为POSITION()函数;如果COL1上有索引,则优化为BETWEEN..AND条件;
4:对于COL1 LIKE 'A'||'B%'的情况,优化为COL1 LIKE 'AB%';
8:对于可计算的LIKE表达式,优化为常量;
16:对于控制函数索引列的LIKE表达式,优化为BETWEEN..AND条件;
32:将LIKE ESCAPE表达式转换为BETWEEN..AND条件,尽可能使用索引;
64:在取值为2的基础上,对于COL1 LIKE COL2 || '%'的情况,如果COL1上有索引,则优化为BETWEEN..AND条件的同时保留LIKE表达式;
256:对于条件中COL1 LIKE 'XXX'||COL2的情况(其中COL1和COL2为不同表的列),扩展为COL1 LIKE 'XXX' || COL2 AND COL1 LIKE 'XXX'||'%'
支持使用上述有效值的组合值,如31表示同时进行1、2、4、8和16的优化
FILTER_PUSH_DOWN 2 动态,会话级 对单表条件是否下放的不同处理方式。
0:表示条件不下放;
1:表示在新优化器下,对单表过滤条件进行下放处理;
2:表示在新优化器下对外连接、半连接进行下放条件优化处理;
4:表示语义分析阶段考虑单表过滤条件的选择率,超过0.5则不下放,由后面进行代价计算选择是否下放,参数值4仅在参数取值包含2时有效,即将参数值设为6时有效;
8:表示尝试将包含非相关子查询的布尔表达式进行下放;
16:表示WHERE条件尽可能下放,即便WHERE之后还有ROWNUM、ORDER等操作;
32: 将耗时的过滤条件放在JOIN连接之后再计算。
支持使用上述有效值的组合值,如6表示同时进行2和4的优化
USE_MCLCT 2 动态,会话级 MPP/LPQ下,是否替换MGAT/LGAT通讯操作符为MCLCT/LCLCT。0:不替换;1:MPP下将操作符MGAT替换为MCLCT;2:MPP下将操作符MGAT替换为MCLCT,或LPQ下将操作符LGAT替换为LCLCT
PHF_NTTS_OPT 1 动态,会话级 MPP系统中是否进行NTTS计划的优化,打开时可能减少计划中的NTTS操作符。0:不支持;1:支持
MPP_MOTION_SYNC 200 动态,会话级 通讯操作符同步时认定的邮件堆积数,堆积超过该值则要进行同步检查。取值0~10000,0表示不进行同步检查
UPD_DEL_OPT 2 动态,会话级 删除更新计划优化方式,取值范围0、1、2 单节点计划,0:不优化 1,2:都可优化NTTS MPP计划,0:不优化; 1:优化删除更新计划,不优化NTTS;2:优化删除更新计划,同时优化NTTS
ENABLE_DIST_IN_SUBQUERY_OPT 0 动态,系统级 IN子查询的优化方式,0:不优化;1:对IN子查询进行去掉子查询的优化;2:IN子查询中的等值连接转换为多个IN;4:IN子查询中移除与外表相同的内表;8:IN相关子查询中,将WHERE条件的OR合并成一个整体(CASE WHEN形式),期望后面能进行SEMI的规则优化
支持使用上述有效值的组合值,如5表示同时进行1和4的优化
MAX_OPT_N_OR_BEXPS 7 动态,会话级 能参与优化的最大OR分支个数,超过时布尔表达式仅用于过滤使用。取值范围7~64
USE_HAGR_FLAG 0 动态,会话级 当带有DISTINCT的集函数不能使用SAGR操作符时,是否使用HAGR,0:不使用;1:使用
DTABLE_PULLUP_FLAG 1 动态,会话级 是否在语法分析阶段对派生表进行上拉优化处理,0:不优化;1:优化
VIEW_PULLUP_FLAG 34 动态,会话级 是否对视图进行上拉优化,把视图转换为其原始定义,消除视图。0:不进行视图上拉优化;
1:对不包含别名和同名列的视图进行上拉优化;
2:对包含别名和同名列的视图也进行上拉优化;
4:强制允许带变量的查询语句进行视图上拉优化,有可能造成结果集错误;
8:不对LEFT JOIN的右孩子\RIGHT JOIN的左孩子\FULL JOIN左右孩子进行上拉;
16:不对LEFT JOIN的左孩子进行上拉;
32:视图上拉后,从视图符号表删除不被引用的列 支持使用上述有效值的组合值,如3表示同时进行1和2的优化
GROUP_OPT_FLAG 8252 动态,会话级 分组项优化参数开关。GROUP_OPT_FLAG=4须和INI参数PARALLEL_POLICY(非0)搭配使用。
0:不优化;
1:非MYSQL兼容模式下(即COMPATIBLE_MODE不等于4),支持查询项不是GROUP BY表达式;
2:外层分组项下放到内层派生表中提前分组优化;
4:表示对于多级分区,并行下允许尝试不生成多个AGR操作符;
8:进行哈希分组时,依赖分组项列中的核心项分组列来分组;
16:位图索引覆盖简单分组查询中的所有列时,允许使用位图索引对查询进行优化;
32:进行哈希分组时,对TOP查询进行优化,提前返回指定数量的分组;
64:DMDPC下,对无分组项且含有DISTINCT集函数的查询,允许对集函数参数先进行一次分发处理;
128:尽量使用SAGR+SORT计划实现GROUP;
256:使用新的计算方法计算数据DISTINCT值,新计算方法:(i * j)/max(((i - j) * j/i),1),假设其中i > j, i、j为每列DISTINCT个数;
512:SAGR中的COUNT(DISTINCT)尽量使用优化模式计算;
1024:使用COST_CPU_CALC_HAGR、COST_CPU_CALC_AAGR代替COST_CPU_CALC_ORDER计算操作符#HAGR、#AAGR的代价;
2048:LIST分区只有一个值 HAGR变AAGR,只在DPC环境有效;
4096:在进行分组时根据BLANK_PAD_MODE和SPACE_COMPARE_MODE判断是否忽略后缀空格;
8192:对一级RANGE分区的分区首列没有分组时求MIN/MAX,优化分区裁剪,目前优化暂不支持并行;
16384:对分区表使用FAGR2求COUNT(*)时,不加载字典对象,使用读取系统表直接加载所有叶子表需要的信息优化方式,提升性能;
32768:有分组项和集函数有非分区列的DISTINCT也支持两层分组,只在DPC环境有效。
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
FROM_OPT_FLAG 0 动态,会话级 控制一些涉及FROM项的优化0:不优化;1:尝试将FROM项替换为单个DUAL表;2: 允许FROM项存在同名对象
HAGR_PARALLEL_OPT_FLAG 4 动态,会话级 MPP、并行下对GROUP BY、分析函数等的优化开关。
0:不优化;1:无DISTINCT时HAGR按照分组列分发;
2:有DISTINCT时,HAGR按照分组列分发;
4:去除多余的通讯操作符;
8:同4,仅限于外连接操作;
16:分析函数按照PARTITION BY列分发;
32:MPP+LPQ下,AAGR的优化处理;
64:始终进行MPP DISTRIBUTE分发(取值为1时仅在组数大于或等于1000时分发);
128:有UNION ALL且存在MPP DISTRIBUTE和MPP GATHER时,各个站点/线程先处理部分数据后再汇总,此优化必须同时包含取值1才有效;
256:始终进行HAGR->MPP DISTRIBUTE->HAGR的分发操作;
512:查询有特殊集函数时,数据汇总到主站点/主线程后再执行计算。其中,带KEEP子句的集函数或FIRST_VALUE集函数两种情况,不论HAGR_PARALLEL_OPT_FLAG的值是否为512,执行计划都会采用MPP COLLECT->HAGR2这种方式。 支持使用上述有效值的组合值,如5表示同时进行1和4的优化
HAGR_DISTINCT_OPT_FLAG 2 动态,会话级 操作符HAGR、DISTINCT的优化开关。此参数仅在参数USE_HAGR_FLAG = 1时才有效。
0:不优化;
1:仅DMMPP环境下使用。如果分组列是分布列,则进行生成两个HAGR,顶层HAGR去掉DISTINCT信息的优化;
2:如果分组列都是字符串类型且总长度小于等于2,则HAGR仅依靠分组列的HASH值进行分组。
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
REFED_EXISTS_OPT_FLAG 1 动态,会话级 是否把相关EXISTS优化为非相关IN查询。0:否;1:是;2:特殊场景下,通过将相关表+DISTINCT构造为派生表添加到子查询中,将相关EXISTS转换为非相关IN;4:特殊场景下,将符合条件的相关EXISTS子句拉至上层进行处理,避免不必要笛卡尔积的产生
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
REFED_OPS_SUBQUERY_OPT_FLAG 1 动态,会话级 是否将OP ALL/SOME/ANY相关子查询进行转换处理。0:否;1:转换为EXISTS相关子查询;2:将包含PARTITION JOIN连接的相关子查询转换为EXISTS相关子查询(已废弃,不进行转换);4:转换为包含分析函数的派生表
支持使用上述有效值的组合值,如3表示同时进行1和2的优化,当组合值中包含1且不包含4时,优先按照值为1进行转换处理,当组合值中包含4时优先按照值为4进行转换处理
PARTIAL_JOIN_EVALUATION_FLAG 1 动态,会话级 是否对去除重复值操作的下层连接进行转换优化。0:不优化;1:优化 此参数仅在参数OPTIMIZER_MODE为1时才有效
USE_FK_REMOVE_TABLES_FLAG 1 动态,会话级 是否利用外键约束消除冗余表,支持多列主键。0:不启用;1:启用
USE_FJ_REMOVE_TABLE_FLAG 1 动态,会话级 是否启用使用过滤表消除表及自连接消除优化。0:不启用;1:启用;2:等值条件的左右两边是不同的表时才进行优化
SLCT_ERR_PROCESS_FLAG 0 动态,会话级 控制如何处理过滤时产生的错误。0:正常处理错误,返回错误码;1:忽略错误,视为数据不匹配
MPP_HASH_LR_RATE 10 动态,会话级 MPP下,对HASH JOIN节点,可以根据左右儿子行数代价的比值,调整HASH_JOIN的左右儿子的通讯操作符添加,从而影响计划。如果行数比值超过此值,则小数据量的一方全部收集到主EP来做。取值范围1~4294967294
LPQ_HASH_LR_RATE 30 动态,会话级 LPQ下,对HASH JOIN节点,可以根据左右儿子行数代价的比值,调整HASH_JOIN的左右儿子的通讯操作符添加,从而影响计划。 如果行数比值超过此值,则小数据量的一方全部收集到主EP来做。取值范围1~4294967294
USE_HTAB 1 动态,会话级 表示计划中是否能使用HTAB。0:否;1:是
SEL_ITEM_HTAB_FLAG 0 动态,会话级 当USE_HTAB=1时才有效。 当查询项中有相关子查询时,是否做HTAB优化。0:不优化;1:优化
OR_CVT_HTAB_FLAG 1 动态,会话级 当USE_HTAB=1时才有效。 当查询条件OR中含有公共因子时,是否允许使用HTAB来进行优化。0:不使用;1:使用;2:增强OR表达式转换为HTAB条件检查,当存在嵌套连接时,不生成HTAB,以避免缓存过多数据影响性能
CASE_WHEN_CVT_IFUN 9 动态,会话级 对CASE WHEN查询表达式的优化处理。
0:不优化;
1:将CASE WHEN查询表达式转换为IFOPERATOR函数;
2:将CASE WHEN查询表达式转换为IFOPERATOR函数,且有限制地进行表达式重用;
4:CASE WHEN查询表达式在运算符中转换为OR进行处理;
8:对于CASE WHEN查询表达式不允许THEN…ELSE表达式重用;
16:将参数个数少于30的COALESCE函数转为CASE WHEN表达式,提升执行性能;
32:CASE WHEN的条件表达式中有恒真或恒假的条件时进行简化;
64:将CASE VALUE1 WHEN VALUE2转为CASE WHEN VALUE1=VALUE2,可配合取值1时转为函数进行批量处理,提升性能
128:允许多分支CASE WHEN转为嵌套IFOPERATOR函数,需要在1开启的基础上使用
支持使用上述有效值的组合值,如5表示同时进行1和4的优化
OR_NBEXP_CVT_CASE_WHEN_FLAG 0 动态,会话级 是否将OR 转化为CASE WHEN THEN ELSE END语句。0:不转换;1:转换
NONCONST_OR_CVT_IN_LST_FLAG 0 动态,会话级 是否开启 IN LIST优化:将不含有常量的OR表达式转换成IN LIST。0表示不开启,1表示开启
OUTER_CVT_INNER_PULL_UP_COND_FLAG 11 动态,会话级 控制外连接转化内连接的优化,在任意取值下,包含层次查询时禁止外连接转内连接优化。
0:不优化;
1:当外连接转化为内连接时,打开连接条件;
2:转化时探测OR布尔表达式是否能优化。即探测OR的每个分支中是否隐式包含IS NOT NULL的条件,若是则也转为内连接;
4:当过滤条件中包含函数时,禁止外连接转换为内连接;
8:当外连接包含层次查询时,禁止转换为内连接;(已废弃,此种场景下默认禁止转换为内连接,不再通过参数控制)
16:开启旋转功能。即指LEFT与INNER JOIN(哈希内连接、归并内连接、嵌套内连接和索引内连接)操作符同时存在时,让INNER JOIN操作符先做的优化。
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
OPT_OR_FOR_HUGE_TABLE_FLAG 1 动态,会话级 是否使用HFSEK优化HUGE表中列的OR过滤条件。0:不使用;1:使用
ORDER_BY_NULLS_FLAG 0 动态,会话级 控制排序时NULL值返回的位置,取值0、1、2、3。0表示NULL值始终在最前面返回;1表示ASC升序排序时NULL值在最后返回,DESC降序排序时NULL值在最前面返回,在参数等于1的情况下,NULL值的返回与ORACLE保持一致;2表示ASC升序排序时NULL值在最前面返回,DESC降序排序时NULL值在最后返回,在参数等于2的情况下,NULL值的返回与MYSQL保持一致;3表示在取值为1的基础上,将空串置于NULL值和非空值之间
SUBQ_CVT_SPL_FLAG 1 动态,会话级 控制相关子查询的实现方式,0:不优化;
1:使用SPL2方式实现相关子查询;
2:DBLINK相关子查询是否转换为函数,由参数ENABLE_DBLINK_TO_INV 取值决定
4:将多列IN转换为EXISTS;
8:将引用列转换为变量VAR;
16:用临时函数替代查询项中的相关查询表达式;
32:存储过程、语句块中的多列表达式过滤条件含有非相关子查询时转换为连接
支持使用上述有效值的组合值,如5表示同时进行1和4的优化
ENABLE_RQ_TO_SPL 1 动态,会话级 是否将相关子查询转换为SPL2方式,0:不优化;1:优化
MULTI_IN_CVT_EXISTS 1 动态,会话级 多列IN是否转换为等价的EXISTS过滤。0:不转换;1:转换
PRJT_REPLACE_NPAR 1 动态,会话级 是否将引用列转换为变量VAR,并替换查询表达式中的引用列,0:不优化;1:优化
ENABLE_RQ_TO_INV 0 动态,会话级 相关查询表达式是否转换为函数方式实现。0:不转换;1:转换;2:系统根据实际情况决定是否转换
SUBQ_EXP_CVT_FLAG 193 动态,会话级 是否将带有集函数且没有GROUP BY的相关查询表达式优化为非相关查询表达式。
0:使用普通的去相关性处理;
1:带有集函数且没有GROUP BY的相关查询表达式优化为非相关查询表达式;
2:将子查询列均来自上层查询且子查询中不包含层次查询、ROWNUM、TOP的相关子查询的FROM项改写为(SELECT TOP 1 1 FROM ...)派生表,减少中间结果集;
8:将EXISTS子查询的查询项转换为常量 0,兼容ORACLE处理方式,同时优化子查询对查询项的处理过程。如果子查询为集合查询,则不进行转换;
16:通过原始语句判断查询表达式是否相同;
32:带有集函数且没有GROUP BY的相关查询表达式在OP_NBEXP中(只有一层),且集函数没有COUNT,那么相关拉平可以使用CROSS JOIN替换LEFT JOIN;
64:消除没被使用到的非相关查询表达式或者相关列已在同层DISTINCT子句中的相关查询表达式查询项;
128:对于DISTINCT查询表达式,在不影响DISTINCT结果情况下,将查询表达式放在DISTINCT之后做。
支持使用上述有效值的组合值,如3表示同时进行1和2的优化,SUBQ_EXP_CVT_FLAG同时包含1和32时,1的优先级更高
USE_REFER_TAB_ONLY 0 动态,会话级 处理相关子查询时是仅将相关的表下放,或者连同上方的SEMI/HASH JOIN一起下放。0:一起下放;1:仅下放相关表
REFED_SUBQ_CROSS_FLAG 1 动态,会话级 是否将相关子查询与外层表优化为CROSS JOIN,0:不优化;1:优化 注:DM早期版本参数,不再推荐使用
IN_LIST_AS_JOIN_KEY 0 动态,会话级 搜索多表连接方式时,对于索引连接(INDEX JOIN)的探测,NEXP_IN_LST表达式类型可以作为多表连接的KEY。
取值范围:
0:表示搜索多表连接方式时,对于索引连接(INDEX JOIN)的探测,NEXP_IN_LST不可以作为连接KEY;
1:表示搜索多表连接方式时,对于索引连接(INDEX JOIN)的探测,把NEXP_IN_LST当做普通等值KEY的处理方式来生成INDEX JOIN的连接KEY。
OUTER_JOIN_FLATING_FLAG 1 动态,会话级 优化外连接。 0:不启用优化; 1:启用优化,例如,使得类似这样的连接A LEFT (B CROSS C) ON A.C1=B.C1 优化为A LEFT (B JOIN (DISTINCT A) ON A.C1=B.C1 CROSS C) ON A.C1=B.C1 ,相当于把A和B的过滤器平坦化到了下层查询中,使得B获取的中间结果较小
TOP_ORDER_OPT_FLAG 69 动态,会话级 优化带有TOP和ORDER BY子句的查询,使得SORT操作符可以省略。优化的效果是尽量使得ORDER BY的排序列所对应的基表可以使用包含排序列的索引,从而可以移除排序SORT操作符,减少排序操作。如果排序列不属于同一个基表,或者排序列不是基表列,则无法进行优化。取值:
0:不启用该优化;
1:对最优索引进行优化;
2:优先选择与排序列一致的可以消除排序的索引进行优化;
4:若查询项中包含TOP子句和集函数,且查询语句中不存在分组项,则移除TOP子句。仅当TOP值不为0时进行该优化;
8:当前就有计划是CSCN的TOP_ORDER语句,根据估算需要BLKUP的行数判断是否依然使用TOP_ORDER优化
16:当没有去重操作时,使用堆排序算法优化TOP N
32:当ORDER BY操作符需要的TOP个数大于SELECT操作符估算出的函数时,直接使用目标索引的全表行数计算代价
64: 消除排序时,如果ORDER需要孩子的行数小于TOP行数,优先使用不消除排序的计划
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
TOP_ORDER_ESTIMATE_CARD 300 动态,会话级 TOP_ORDER_OPT_FLAG=1/2命中优化时,设置叶子节点的预估扫描行数。下层操作符不是简单的BT时,如果优化器预估行数不准,可帮助优化器调整,以便选择最优计划。取值范围0~4294967294
TOP_DIS_HASH_FLAG 1 动态,会话级 是否通过禁用HASH JOIN方式来优化TOP查询,取值: 0:不优化; 1:当OPTIMIZER_MODE为0时,TOP下方连接禁用HASH JOIN;当OPTIMIZER_MODE为1时,TOP下方最近的连接倾向于不使用HASH JOIN; 2:当OPTIMIZER_MODE为0时,TOP下方连接禁用HASH JOIN;当OPTIMIZER_MODE为1时,TOP下方所有连接都倾向于不使用HASH JOIN
ENABLE_RQ_TO_NONREF_SPL 1 动态,会话级 相关查询表达式转化为非相关查询表达式,目的在于相关查询表达式的执行处理由之前的平坦化方式转化为一行一行处理。 0:不启用该优化;1:对查询项中出现的相关子查询表达式进行优化处理;2:对查询项和WHERE表达式中出现的相关子查询表达式进行优化处理;4:相关查询采用SPL方式去相关性后,可以作为单表过滤条件
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
ENABLE_CHOOSE_BY_ESTIMATE_FLAG 0 动态,会话级 通过估算引用表/表连接的结果集行数决定是否进行去相关性优化。
0:不进行行数估算;1:引用单表且ENABLE_RQ_TO_NONREF_SPL不为0时进行行数估算,若行数过大则不进行ENABLE_RQ_TO_NONREF_SPL为对应值时的优化;2:引用单表且SUBQ_EXP_CVT_FLAG=1时进行行数估算,若行数过大则不进行SUBQ_EXP_CVT_FLAG=1时的优化;4:引用表连接且ENABLE_RQ_TO_NONREF_SPL不为0时进行行数估算,若行数过大则不进行ENABLE_RQ_TO_NONREF_SPL为对应值时的优化。由于需要通过动态采样的方式估算表连接后的结果集行数,因此第一次执行时速度可能较慢
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
OPTIMIZER_MODE 1 动态,会话级 DM优化器的模式,0:老优化器模式;1:新优化器模式
NEW_MOTION 1 动态,会话级 是否使用代价计算来决定使用的通讯操作符,0:否;1:是。
DMDPC环境下不支持动态修改该参数
LDIS_NEW_FOLD_FUN 0 动态,会话级 是否开启LOCAL DISTRIBUTE操作符使用与MPP DISTRIBUTE操作符不同的函数来计算哈希值。0:否;1:是
DYNAMIC_CALC_NODES 0 动态,会话级 是否根据数据量设置LOCAL DISTRIBUTE\ MPP DISTRIBUTE操作符不同的并行度\节点数。0:否;1:是
OPTIMIZER_MAX_PERM 7200 动态,会话级 控制计划探测过程中的最大排列数,如果大于该阙值,则减少相应的排列,减少探测计划的时间,取值范围1~4294967294
ENABLE_INDEX_FILTER 1 动态,会话级 是否进行索引过滤优化,可取值为0、1、2。 0不进行优化; 1使用索引过滤优化,如果过滤条件涉及的列包含在索引中,那么索引进行SSEK2后就可以使用此过滤条件,可以减少中间结果集; 2在取值为1的基础上,将IN查询列表转换为HASH RIGHT SEMI JOIN。
OPTIMIZER_DYNAMIC_SAMPLING 0 动态,会话级 当统计信息不可用时是否启用动态统计信息。取值范围:0~12。0:不启用;1~10:启用,采用率10%~100%;11:启用,由优化器确定采样率(0.1%~99.9%);12:同11,但收集的结果会持久化保存
AUTO_STAT_OBJ 0 动态,系统级 是否监控增删改导致的修改行数和TRUNCATE表操作。0:不监控;1:对所有用户表进行监控;2:只对用户通过DBMS_STATS. SET_TABLE_PREFS设置过STALE_PERCENT属性的用户表进行监控。
DMDPC环境下不支持动态修改该参数;DMDSC环境下仅允许控制节点动态修改该参数
MONITOR_MODIFICATIONS 0 动态,系统级 是否监控用户表对象的数据变化情况,包括增删改导致的修改行数、TRUNCATE表操作以及最新修改时间等。0:不监控;1:对所有表进行监控;2:只对用户执行过SET_TABLE_PREFS的表进行监控。
DMDPC环境下不支持动态修改该参数
MON_CHECK_INTERVAL 3600 动态,系统级 将用户表对象的数据变化情况记录到系统表的时间间隔,单位为秒,即每过设置的秒数便将用户表对象的数据变化情况记录到系统表中。仅当MONITOR_MODIFICATIONS非0时生效
NONREFED_SUBQUERY_AS_CONST 1 动态,会话级 是否将非相关子查询转化为常量处理。0:不进行优化,对非相关子查询使用连接方式处理;1:将非相关子查询转换为常量,作为过滤条件使用
HASH_CMP_OPT_FLAG 0 动态,会话级 是否启用静态哈希表的优化。0:不启用优化;1:分组中的DISTINCT开启此优化;2:对HASH连接启用该优化;4:对HAGR分组计算启用该优化;8:DISTINCT操作开启此优化。 支持使用上述有效值的组合值,如5表示同时进行1和4的优化
OUTER_OPT_NLO_FLAG 0 动态,会话级 是否进行外连接和内连接的相关优化。0:不优化;1:满足条件时,将外连接转换为嵌套外连接进行优化;2:满足条件时,将内连接转换为嵌套连接+VAR方式进行优化;4:打开外连接操作符HLO/HRO只返回不满足条件值的优化。 取值1、2仅在OPTIMIZER_MODEE = 0时生效。 支持使用上述有效值的组合值,如5表示同时进行1和4的优化
DISTINCT_USE_INDEX_SKIP 2 动态,会话级 DISTINCT列是否使用索引跳跃扫描(单列索引或复合索引)。专门用于SQL语句中有DISTINCT的场景,DISTINCT列的查询的一种优化方式,在索引上跳跃着扫描。0:不使用;1:强制使用;2:根据代价选择是否使用。;4:多级分区表也尝试使用(所有层次的分区列都需要在DISTINCT中)。该参数只在OPTIMIZER_MODEE = 1时有效
USE_INDEX_SKIP_SCAN 0 动态,会话级 是否使用复合索引跳跃扫描。专门用于WHERE子句等值条件的查询列中包含了复合索引的列,但该列又不是复合索引的前导列,这种情况下,选择是否使用复合索引跳跃扫描。和INDEX_SKIP_SCAN_RATE搭配使用。 0:不使用; 1:根据代价选择是否使用。通过代价计算选择,倾向于选择前导列DISTINCT值少,搜索列DISTINCT值较多的索引; 2:强制使用。只要能够找到索引可以使用跳跃扫描,就强制使用
INDEX_SKIP_SCAN_RATE 0.0025 动态,会话级 复合索引跳跃扫描的代价调节开关。当列的 (DISTINCT数/总行数)比值大于该值时,就不再使用索引跳跃扫描的方式。取值范围0~1。 和USE_INDEX_SKIP_SCAN搭配使用
SPEED_SEMI_JOIN_PLAN 9 动态,会话级 是否加速半连接的探测过程。
0:不加速;
1:加速计划探测;
2:加速计划探测和执行
4:调整DISTINCT代价估算,期望更接近实际情况,有利于计划选择。4支持的场景如下: 1)控制半连接转换内连接,生成的DISTINCT代价估算; 2)控制普通DISTINCT代价计算;
8:SEMI规则优化增加处理右孩子包含SLCT的情况;
16:SEMI探测消除SORT优化时多探测一次HRS的情况;
32:仅使用预分析处理好的叶子节点计划进行SEMI最优计划探测,可以减少探测路径提升分析速度,但计划可能不是“最优”;
64:半连接执行时对右侧数据进行去重处理,以减少计算连接条件的次数
COMPLEX_VIEW_MERGING 2 动态,会话级 对于复杂视图(一般含有GROUP或者集函数等)会执行合并操作,使得GROUP分组操作在连接之后才执行。0:不启用;1:对不包含别名和同名列的视图进行合并;2:视图定义包含别名或同名列时也进行合并
ENHANCED_SUBQ_MERGING 3 动态,会话级 是否对子查询进行合并优化,0:不优化;1:对WHERE子句和JOIN ON子句中存在包含关系的子查询进行合并优化;2:对UNION和INTERSECT等集合运算中相同的子查询进行合并优化;4:将相同相关列在OR集合运算中的多个EXISTS子句转换为UNION ALL子句
支持使用上述有效值的组合值,如3表示同时进行1、2的优化
HLSM_FLAG 1 动态,会话级 控制多列非相关NOT IN的查询实现方式,1:当数据量较大,HASH BUF放不下时,采用MTAB方式处理;2:当数据量较大,HASH BUF放不下时,采用B树方式处理,使用细粒度扫描;3:当数据量较大,HASH BUF放不下时,采用B树方式处理,使用粗粒度扫描
DEL_HP_OPT_FLAG 0 动态,会话级 控制分区表的操作优化,0:不优化;
1:打开分区表DELETE优化;
2:控制范围分区表创建的优化处理,转换为数据流方式实现;
4:允许语句块中的间隔分区表自动扩展;
8:开启对TRUNCATE分区表的优化处理;
16:完全刷新时删除老数据使用DELETE方式。
支持使用上述有效值的组合值,如7表示同时进行1、2、4的优化
OPTIMIZER_OR_NBEXP 29 动态 会话级 OR表达式的优化方式。
0:不优化;
1:生成UNION_FOR_OR操作符时,优化为无KEY比较方式;
2:OR表达式优先考虑整体处理方式;
4:相关子查询的OR表达也优先考虑整体处理方式;
8:OR布尔表达式的范围合并优化;
16:同一列上同时存在常量范围过滤和IS NULL过滤时的优化,如C1 > 5 OR C1 IS NULL。
32:OR表达式公因子包含子查询时,使用UNION_OR方式。避免特定情况过滤条件无法下放。
支持使用上述有效值的组合值,如7表示同时进行1、2、4的优化
NPLN_OR_MAX_NODE 20 动态 会话级 查询优化时,是否展开OR表达式的开关。
系统自动将OR表达式的分支数和NPLN_OR_MAX_NODE进行对比。如果分支数大,则OR表达式不予展开,而是当作整体处理,减少内存消耗;如果分支数小,则系统自动决定是否将OR表达式展开。
取值范围:0~20。0表示OR表达式一律不展开。
此参数优化的SQL语句是指包含OR连接条件但整体不是OR的表达式。例如: 语句SELECT * FROM T01 LEFT JOIN T02 ON (C1C2+2 OR D1D2+5) AND C1>5; 是一个包含了OR但整体是AND的语句,展开后OR分支数为4,分别为C1C2+2、D1D2+5
CNNTB_OPT_FLAG 1217 动态,会话级 是否使用优化的层次查询执行机制。
0:不使用;
1:强制使用;
2:优化器自动决定是否使用;
4:层次查询不支持并行;
8:检查层次查询的表达式是否包含ROWNUM,若包含则报错;
16:层次查询的条件包含OR时仍尝试使用优化,且将OR连接的条件表达式当做整体处理;
32:根据PRIOR关联列的DISTINCT值与统计信息中总行数的比例自适应选择执行机制;
64:对于简单条件(如:DUAL.LEVEL﹤=10)准确估算层次查询行数;
128:对层次查询的执行计划节点分析时,如果右孩子包含参数无法生成临时表,依然向下分析右孩子的子节点能否生成临时表以提升性能;
256:单子树优化模式,仅基于左孩子数据做深搜找到满足条件的路径;旨在减少右孩子的频繁扫描和数据拷贝;仅当CONNECT BY条件为非等值条件时生效,发生刷盘时会转换成CNNTB_OPT_FLAG(0)。
512:针对层次查询的START_WITH条件尝试进行外连接转内连接的优化。
1024:DPC下,CNNTB支持右边广播的连接方式
支持使用上述有效值的组合值,如31表示同时进行1、2、4、8、16的优化
ADAPTIVE_NPLN_FLAG 3 动态,会话级 是否启用自适应计划机制,仅OPTIMIZER_MODE=1时生效。0:不启用;1:对索引连接、嵌套含VAR连接等复杂连接启用自适应计划;2:ORDER BY在HASH连接时启用自适应计划;3:同时启用1和2的优化机制
MULTI_UPD_OPT_FLAG 1 动态,会话级 0:对普通表进行多列更新时,按照语句改写方式实现;对派生表进行多列更新时,利用SPL功能实现;1:利用多列SPL功能实现多列更新;2:允许对多表连接视图进行更新;4:相关查询语句利用多列SPL功能实现多列更新。 支持使用上述有效值的组合值,如3表示同时进行1、2的优化
MULTI_UPD_MAX_COL_NUM 128 动态,会话级 利用多列SPL功能以实现多列更新(MULTI_UPD_OPT_FLAG为1)时可更新的最大列数,取值范围2~10000
ENHANCE_BIND_PEEKING 0 动态,会话级 是否使用自适应的绑定变量窥探开关。0:不使用;1:使用
NBEXP_OPT_FLAG 7 动态,会话级 控制布尔表达式的一些优化。0:不优化;1:进行根据展开后的项数控制NOT是否下放展开的优化;2:进行AND分支的OR布尔表达式的公因子上拉优化;4:探测移除和派生表/实体视图内层一样的外层过滤条件;8:打开JSON_VALUE表达式转换成JSON TABLE的优化;16:关闭等值表达式常量替换优化。
支持使用上述有效值的组合值,如3表示同时进行1、2的优化
HAGR_HASH_ALGORITHM_FLAG 0 动态,会话级 HAGR中HASH算法选择标记。0:按照移位方式计算;1:按照异或方式计算
DIST_HASH_ALGORITHM_FLAG 0 动态,会话级 DISTINCT中HASH算法选择标记。0:按照移位方式计算;1:按照异或方式计算
VIEW_FILTER_MERGING 138 动态,会话级 是否对视图条件进行优化以及如何优化。
0:不优化;
1:尽可能地进行视图条件合并;
2:自动判断是否进行视图条件合并;
4:视图包含分析函数时,如果分析函数的PARTITION BY具有唯一性,则外层过滤条件下推到视图内部;
8:如果派生表存在集函数,则不进行条件下推优化;
16:收集公用表达式相关的所有过滤条件,改写合并所有条件,并下放到公用表达式的内部;32:TOP信息下放至派生表内部;
64:外层表达式扩展视图内部IS NOT NULL过滤条件;
128:外层ROWNUM过滤条件转为内层TOP子句;
256:满足条件时,对相关派生表过滤条件进行下推优化;
512:视图已经有过滤条件的,不重复下放,为了后续能使用htab;
1024:包含该取值时,取消下述限制:视图是集合运算时的分支数应小于10;若视图是集合运算且超过2个分支时,过滤条件不能含有复杂函数/查询表达式。
支持使用上述有效值的组合值,如138表示同时进行2、8、128的优化
OPT_MEM_CHECK 0 动态,会话级 内存紧张时,优化器是否缩减计划探测空间,仅OPTIMIZER_MODE=0时生效。0:不缩减计划探测空间;1:缩减计划探测空间;
ENABLE_JOIN_FACTORIZATION 1 动态,会话级 是否启用连接分解,即UNION ALL分支间存在公共部分时是否进行公因子提取。0:不启用;1:启用
ERROR_COMPATIBLE_FLAG 0 动态、会话级 是否对子查询同名列进行报错。取值0或1。 0报错,1不报错
ENABLE_PARTITION_WISE_OPT 1 动态,会话级 是否利用水平分区表的分区信息进行排序、分组的计划优化,即在满足条件的情况下对每个子表单独排序、分组,或者进行子表间的归并排序。0:不启用;1:启用
EXPLAIN_SHOW_FACTOR 1 动态,会话级 显示执行计划的行数和嵌套层数的基数分别为1000和100,实际显示的行数和嵌套层数为 基数* EXPLAIN_SHOW_FACTOR。取值范围1~100
HASH_PLL_OPT_FLAG 107 动态,会话级 当进行HASH SEMI/INNER连接且右表为分区表时,控制是否对分区表连接进行优化以及优化的方式。
0:不进行分区表连接优化;
1:允许HI/HRS进行分区裁剪优化;
2:单个分区列的一级分区等值查询优化;
4:若为ANTI SEMI连接,则不允许使用INDEX JOIN;
8:索引连接支持非等值KEY作为PLL的KEY;
16:分区表根据子表数目粗略调整代价;
32:分析阶段根据KEY和扫描方式获得准确数据行数,精准计算PLL代价;
64:分区表全局索引扫描支持分区裁剪
128: DELETE分区表时计划阶段收集子表信息,执行阶段直接拷贝使用即可,无需再次收集
PLACE_GROUP_BY_FLAG 0 动态,会话级 在含有集函数的查询中,是否允许先分组减少数据量后再进行连接。0:不允许;1:允许,要求是两个表的连接,且基函数的参数只能来自一张表;2:允许,2是1的加强,允许有多张表的连接,且基函数的参数可来自多张表,与MAX_N_GRP_PUSH_DOWN配合使用。此参数仅在OPTIMIZER_MODE=1时有效
ENABLE_NEST_LOOP_JOIN_CACHE 0 动态,会话级 是否对嵌套循环连接进行优化以及如何优化,0:不优化;1:允许缓存嵌套循环连接的中间结果以加速执行;2:嵌套循环连接执行时优先探测右孩子节点的数据
支持使用上述有效值的组合值,如3表示同时进行1、2的优化
ENABLE_TABLE_EXP_REF_FLAG 1 动态,会话级 是否支持嵌套表表达式或XML表表达式与源表的同层引用。0:不支持;1:支持
BIND_PARAM_OPT_FLAG 3 静态 指定绑定参数优化策略。0:不同的绑定参数之间认为不相等;1:根据绑定值判断绑定参数是否相等。确认绑定值之前,认为不同的绑定参数之间相等;确认绑定值之后,根据绑定值判断是否相等;2:优化绑定参数和常量之间的比较表达式,例如:针对表达式?=1,若绑定参数的绑定值为1,则将表达式转换为TRUE,否则转换为FALSE。
支持使用上述有效值的组合值,如3表示同时进行1、2的优化
VIEW_OPT_FLAG 1 动态,会话级 视图优化处理参数。0:关闭优化;1:允许不可更新视图输出ROWID;2:允许对物化视图日志表进行INSERT、DELETE、UPDATE以及TRUNCATE操作;4:允许对物化视图日志表的基表进行删列、修改列名、修改列类型等操作;8:语义分析阶段移除视图、派生表中未被外层使用的列,提高索引代价估算准确度,选择合适的索引;16:TRUNCATE基表时,基于主键的日志表按照PURGE选项进行清空 ;32:ON COMMIT刷新属性方式的物化视图同一时刻最多仅触发一次
ENABLE_DBLINK_TO_INV 0 动态,会话级 DBLINK相关子查询是否转换为函数。0:不转换;1:转换
ENABLE_BLOB_CMP_FLAG 1 动态,会话级 是否支持大字段类型的比较。0:不支持;1:支持,此时DISTINCT、ORDER BY、 分析函数和集函数支持对大字段进行处理,且当大字段跟字符串比较时,让大字段转换成字符串类型;2:支持,此时DISTINCT、ORDER BY、 分析函数和集函数支持对大字段进行处理,且兼容MYSQL模式下,大字段跟字符串比较时,让字符串转换成大字段类型
ENABLE_CREATE_BM_INDEX_FLAG 1 静态 是否允许创建位图索引。0:不允许创建位图索引;1:允许创建位图索引;2:位图索引作为普通B树索引进行创建
CVIEW_STAR_WITH_PREFIX 1 动态,会话级 创建视图获取视图定义语句,展开查询项中的 *时,列名前是否添加表名作为前缀。0:不添加前缀;1:添加前缀
ENABLE_ADJUST_NLI_COST 1 动态,会话级 是否允许系统自动对嵌套连接的代价进行增大调整。0:不允许;1:允许
ENABLE_SEQ_REUSE 0 动态,会话级 控制是否允许重用相同的序列表达式。0:不允许;1:允许。 例如SELECT SEQ1.NEXTVAL,SEQ1.NEXTVAL FROM DUAL; 当参数取1:返回值两列相同 当参数取0:返回值两列不同
DPC_SYNC_STEP 16 动态,会话级 打开DMDPC限流(MPP_MOTION_SYNC非0)时使用。 表示检查接收端数据堆积的步长,即每发送DPC_SYNC_STEP次BDTA后检查一次是否堆积。取值范围1~5000
DPC_SYNC_TOTAL 0 动态,会话级 打开DMDPC限流(MPP_MOTION_SYNC非0)时使用。XBOX上所有来源路数(并行线程数)的总限流资源数。取值范围0~10000
XBOX_DUMP_THRESHOLD 0 动态,系统级 XBOX邮件内存阈值,超过该值则保存到文件中。取值范围0~409600。单位 MB。 和XBOX_DUMP_PATH一起设置才生效
XBOX_SPACE_LIMIT 0 动态,系统级 表示单个XBOX的空间限制。取值范围0~409600。单位MB。缺省值为0,表示不作限制。
需要配置了XBOX_DUMP_THRESHOLD和XBOX_DUMP_PATH后才生效
可与XBOXS_SPACE_LIMIT分别设置,也可以同时设置;同时设置必须满足XBOXS_SPACE_LIMIT > XBOX_SPACE_LIMIT
XBOXS_SPACE_LIMIT 0 动态,系统级 表示系统中所有XBOX的总空间限制。取值范围0~1000000。单位MB。缺省值为0,表示不作限制。
需要配置了XBOX_DUMP_THRESHOLD和XBOX_DUMP_PATH后才生效
可与XBOX_SPACE_LIMIT分别设置,也可以同时设置;同时设置必须满足XBOXS_SPACE_LIMIT > XBOX_SPACE_LIMIT
XBOX_SHORT_MSG_SIZE 1024 系统,会话级 在配置了XBOX_DUMP_THRESHOLD后,即使内存达到阈值的情况下,小于此长度的短消息也不会保存到文件,防止大量的文件读写。取值范围0~32768。单位BYTE
STMT_XBOX_REUSE 1 动态,会话级 DMDPC会话的语句是否重用BOX_ID。0:否,每个语句都请求分配一个BOX_ID;1:是
MAX_HEAP_SIZE 0 静态 控制分析阶段允许使用的堆空间大小上限,取值范围0~4294967294,单位MB。设置为0时,表示不进行限制
ENABLE_ADJUST_DIST_COST 0 动态,会话级 是否对索引连接的DISTINCT值估算行数进行优化调整。0:不优化;1:若索引连接计划中左孩子为DISTINCT或GROUP类型,则使用左孩子的估算行数和右孩子的估算行数相乘作为连接后的DISTINCT行数值;2:索引连接计划中,使用左孩子的估算行数除以3和右孩子的估算行数相乘作为连接后的DISTINCT值
PLAN_OP_FLAG 0 动态,会话级 控制执行计划中操作符的使用。0:默认使用所有操作符;1:禁用SSCN操作符;2:禁用SSEK操作符;4:仅对BLKUP操作符的执行进行优化,即在B树上搜索到一行记录后,继续尝试在当前页上搜索下一条记录;8:在4的基础上,生成计划时,在BLKUP操作符下方添加一个SORT操作符,使传给BLKUP的数据更加紧凑,更能发挥BLKUP优化的优势,缺点是SORT带来的额外开销;12:在4的基础上,对每一批传给BLKUP的数据进行BDTA排序,不额外使用新的排序操作符;16:AAGR2操作符计算COUNT(COLUMN)集函数时,如果下层操作符为聚集索引扫描(CSCN2),则使用优化方式计算结果;32:MERGE INTO语句忽略重复键值错误;64:CSCN2、SSCN使用依照物理存储结构的扫描方式;128:如果DISTINCT中的某些前导列是有序的,那么可以对这些列不同的值进行分组去重。满足该优化条件的情况有3种:DISTINCT下面是MERGE JOIN、ORDER或TABLE的索引扫描,这三种情况下DISTINCT收到的数据是有序的,此时只要DISTINCT中某些列是排序列的前缀,就可以按照此前缀进行分组;256:用于控制UNION实现方式,参数开启时UNION左右孩子增加XSORT并以MERGE方式归并数据以保证结果集有序,仅单机环境下有效;512:如果回表查询行数较多,取值512增大回表查询代价,倾向于不使用回表查询;1024:控制索引连接输出数据策略:填满 BDTA_SIZE行后再输出。预期减少索引连接及其父层操作符执行次数,从执行计划看不出差异,可通过ET监控N_ENTER列观察实际效果;2048:开启外连接的连接条件批量计算优化;4096:开启半连接的连接条件批量计算优化 取值1、2、4可以组合;取值1、2、8可以组合;取值1、2、12可以组合。如3表示同时进行1和2的操作,13表示同时进行1和12的操作
DUAL_ENABLE_SELECT 1 动态,系统级 MOUNT状态下是否允许查询DUAL/SYSDUAL/SYS.SYSDUAL2表。0:不允许,1:允许
LOAD_BINDED_PLN 0 动态,系统级 是否从系统表SYSPLNINFO加载已持久化的绑定计划。1:加载;0:不加载
UNPIVOT_OPT_FLAG 0 动态,会话级 控制UNPIVOT子句转换处理。0:不进行特殊处理,正常转换;1:结果集按照非UNPIVOT列排序;2:若UNPIVOT子句排除NULL值,则在转换的WITH视图中添加 NOT NULL过滤条件,减少中间结果集
支持使用上述有效值的组合值,如3表示同时进行1、2的优化
USE_DHASH_FLAG 0 动态,会话级 是否使用动态HASH。0:不使用;1、2:使用DHASH2;3:使用DHASH3,使用动态HASH时推荐选择3
DPC_OPT_FLAG 65535 动态,会话级 执行计划优化策略。取值0、1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768、65536、131072、262144或上述任意取值的和。
0:使用默认策略,不进行优化;
1:表示忽略UNIONALL,将分支的内容直接发给UNIONALL之上的ERECV;
2:表示根据HSCN的使用情况,对HTAB的分布信息调整,可以减少HSCN之后的数据分发量;
4:表示在通讯符之前将afun转换成两个,可以减少通讯量;
8:表示不存在分区列过滤条件时,分区遍历操作符提前收集所有子表信息并加以缓存;
16:根据利用统计信息最大、最小值计算相同表不同别名的选择率。例如 t1.c1 + 10 > t1.c1 ==> t1.c1 < max(t1.c1) +10;
32:同时开启SP、MP和BP节点的计划缓存的功能,减少事务密集型应用中计划发送带来的耗时。非32的情况下,只有SP具有计划缓存功能;
64:多列primary key用于连接时的行数估算调整优化;
128:根据估算的行数对连接、分组等使用到的哈希表大小进行缩放优化;
256:哈希连接时,如果连接左边数据来自广播,启用共享哈希表优化减少哈希表构造开销;
512:huge表考虑hfsek与hfscn+slct的代价;
1024:计划只从几个子任务开始,而不是所有的叶子节点;
2048:DISTINCT尝试下放至集合运算的左右侧的子任务先做;
4096:afun/sagr+sort+dis的sort下放到dis下面,变成afun/sagr+dis(归并信息)+sort。sort放到dis下面后,每一路可先做排序,如果子任务并行度比sagr/afun的并行度大时能较快的完成排序;
8192:esend发送时对link_id进行优化。优化后,消息可以多条链路同时发生,而非一条链路串行;
16384:表示DMDPC环境下支持变量跨层引用;
32768:支持L_FULL优化。具体为支持LEFT JOIN操作符左边使用全部数据,右边使用部分数据的情况;
65536:表示开启子任务为空连接提前终止的优化。若某个子任务的结果为空,上层有连接操作且可以推断出连接的结果也为空时,那直接终止此连接以及此连接的所有子任务。这个过程是可以向上传递的,直到某个子任务结果不为空或者无法推断为空为止;
131072:表示当某任务的子任务都在同一个站点上时,那么系统会优先让这个任务也在此站点做。因为数据在同站点不同线程内传输,相比不同站点会减小数据传输时间;
262144:表示将GROUP BY最大值下放到HTAB
LIKE_PATTERN_NUM 300 动态,系统级 LIKE模式匹配时模糊匹配的长度限制。取值范围100~10000
FORALL_OPT 1 动态,系统级 是否进行FORALL优化。0:不优化;1:优化;2:仅对INSERT语句进行优化。
当USE_FORALL_ATTR=1时,系统强制放弃FORALL优化
HASH_OPT_FLAG 1 动态,会话级 是否启用哈希表的普遍优化。0:禁用哈希相关的优化;1:允许进行哈希相同值挂链优化,仅当HASH_CMP_OPT_FLAG=0且USE_DHASH_FLAG=0时生效;2:针对DISTINCT、HASH连接以及HAGR分组计算等操作使用优化的HASH算法进行计算,仅当HASH_CMP_OPT_FLAG=0且USE_DHASH=0时生效
HASH_JOIN_LOOP_TIMES 10 动态,会话级 哈希内连接多次缓存优化中的缓存次数上限。会话级参数,取值范围1~10。特别的,取值为1表示不进行哈希内连接多次缓存优化,取值10时表示根据左孩子预估数据量选择性打开哈希内连接多次缓存优化
SFUN_PUSH_DOWN_FLAG 1 动态,会话级 是否将集函数下放到UNIONALL的各个分支。
0:否;
1:是。要求外层是简单查询。
此参数只在DMDPC环境有效
MAX_SCAN_PAGES 32 动态,系统级 用于控制CSCN、SSCN、CSEK、SSEK等操作符批量填充记录最大连续扫描数据页数量。取值范围1~100。CSCN等操作执行过程中,如果填充记录数达到BDTA_SIZE或连续扫描数据页数量达到MAX_SCAN_PAGES,则结束当前操作符执行。DMDSC集群最大扫描数据页数量强制调整为MAX_SCAN_PAGES/10
ENABLE_PLN_PRESEARCH 0 静态 是否开启预查找执行计划,在高并发场景下,相同计划仅进行一次硬解析,若有线程报错计划构造等待超时请放大PLN_BUILD_WAIT_TIME。若计划不可重用不建议开启此参数。0:不启用;1:启用
DDL_OPT_FLAG 0 动态,会话级 DDL相关优化标记,取值为0、1或这些值的任意组合。0:无优化;1:移动表空间时,即使目标表空间与源表空间相同,也仍然进行实际移动
DIGIT_AS_NUMBER 0 静态 用于控制常量参数化时是否把数字常量作为NUMBER类型。0:否;1:是
ENABLE_INJECT_HINT 0 动态,会话级 是否启用SQL指定HINT的功能,0:不启用;1:启用
STAT_CACHE_CAPACITY 1000 动态,系统级 当STAT_CACHE_FLAG=1时使用。SP缓存表行数的缓存容量。取值范围100~100000000,单位为缓存表的个数;取值为0时,表示不从缓存读写表行数
QUERY_INFO_BITS 0(非DMDPC)或者1(DMDPC) 动态,会话级 对应部分系统内部优化器HINT的优化功能,部分取值仅用作标识信息,取值0、1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384或上述取值的和,如5表示同时进行1和4的优化。
0:不对计划生成进行任何干预,是否采纳下列各优化点由代价模型决定;
1:SEMI/CROSS JOIN优化时不生成变量,与HINT的NO_USE_CVT_VAR效果相同;
2:SEMI/CROSS JOIN优化时优先考虑生成变量,与HINT的USE_CVT_VAR效果相同;
4:SEMI JOIN优化时不生成CROSS,与HINT的NO_SEMI_GEN_CROSS效果相同;
8:SEMI JOIN优化时优先考虑CROSS,与HINT的SEMI_GEN_CROSS效果相同;
16:分区表遍历操作符PLL提前收集所有叶子表信息,与HINT的COLLECT_ALL_SUB_TAB 效果相同;
32:分区表遍历操作符PLL不提前收集所有叶子表信息,与HINT的NO_COLLECT_ALL_SUB_TAB 效果相同;
64:不生成MPP通讯操作符,指导计划以MPP本地登录方式运行;该值不能设置,仅为展示,对应HINT的MPP_LOCAL;
128:通过插入排序操作符来实现归并连接,与HINT的ENHANCED_MERGE_JOIN效果相同;
256:查询涉及的表是否均为系统表,该值不可设置,仅为展示;
512:本次查询计划是否添加到计划缓存,与HINT的PLAN_NO_CACHE效果相同;
1024:是否禁用按列加密明文可见性判断,与HINT的DISABLE_MANUAL_USER 效果相同;
2048:DMDPC下采用弱一致性读,与HINT的READ_POLICY FOLLOWER 效果相同;
4096:DMDPC下采用强一致性读,与HINT的READ_POLICY LEADER 效果相同;
8192:本次查询在V$SQL_NODE_HISTORY中是否可以被替换,与HINT的SQL_NODE_KEEP_CACHE 效果相同;
16384:DMDPC查询是否以本地登录方式执行;该值不可设置,仅为展示,对应HINT的DPC_LOCAL
仅DPC环境下在DM.INI中设置该参数值可以达到与优化提示器HINT指定相同的效果,非DPC环境下文件中指定无效。当用户使用HINT方式指定相关优化后,会话中参数值自动被HINT值覆盖;如果给定的取值包含了自相矛盾的功能点,优化器会按照取值大小顺序选择较小值确定的选项

以下是一些和代价计算相关的参数,除非得到达梦公司技术服务人员建议,否则不建议用户自行调整,保持默认值即可。

表 2.6 中查询相关参数(代价计算相关)

参数名 缺省值 属性 说明
LPQ_MOTION_FACTOR 58(非DMDPC)或者2(DMDPC) 动态,会话级 并行及DMDPC环境中,计算各分发操作代价的因子。取值范围1~1073741824
COST_PARALLEL_FACTOR 1 动态,会话级 并行及DMDPC环境中,计算一元操作符各分发操作代价的因子。取值范围0~1073741824
BEXP_CALC_ST_FLAG 128 动态,会话级 针对哪些过滤条件的选择率基于动态采样调整。取值范围0、1、2、4、8、16、32、64、128或者上述任意取 值的和
0:使用默认策略,不进行调整;
1:同一表不同列之间比较时进行调整;
2:包含函数过滤条件时进行调整;
4:同一表中AND/OR过滤条件进行调整;
8:对CONTAINS过滤条件进行调整;
16:单表过滤条件时进行调整;
32:对LIKE过滤条件进行调整;
64:列与参数类型值比较的过滤条件根据动态采样调整;
128:列与参数类型值比较的过滤条件根据统计信息调整
COST_RANK_FACTOR 1000 动态,会话级 并行及DMDPC环境中,计算各候选分发KEY评分的因子。取值范围1~1073741824
2.1.1.1.6 检查点相关

表 2.7 dm.ini 中检查点相关参数

参数名 缺省值 属性 说明
CKPT_RLOG_SIZE 1024 动态,系统级 产生多大日志文件后做检查点,单位MB。取值范围0~4294967294,为0时表示参数不起作用
CKPT_DIRTY_PAGES 0 动态,系统级 产生多少脏页后做检查点,单位为页。取值范围0~4294967294,为0时表示参数不起作用。CKPT_DIRTY_PAGES仅当参数FORCE_FLUSH_PAGES不为0时才有效,此时调度线程启动刷脏页流程时,每个BUFFER POOL向磁盘写入FORCE_FLUSH_PAGES页数的脏页,同时检测CKPT_DIRTY_PAGES是否满足触发条件
CKPT_INTERVAL 180 动态,系统级 指定检查点的时间间隔。单位秒。取值范围0~2147483647,为0时表示不自动定时做检查点
CKPT_FLUSH_RATE 5.00 动态,系统级 检查点刷盘比例。取值范围0~100.00,为0时表示参数不起作用
CKPT_FLUSH_PAGES 1000 动态,系统级 检查点刷盘的最小页数。取值范围1000~100000
CKPT_WAIT_PAGES 32768 动态,系统级 用于控制检查点动态调整间隔。检查点执行过程中,每发起CKPT_WAIT_PAGES个数据页的刷盘请求,会等待这些数据页写入磁盘完成,并触发一次检查点调整,释放日志空间。取值范围1~4294967294
FORCE_FLUSH_PAGES 8 动态,系统级 调度线程启动刷脏页流程时,每个BUFFER POOL写入磁盘的脏页数。取值范围0~1000,为0时表示参数不起作用
ENABLE_CKPT_EVENT_TRIG 0 动态,系统级 是否启用检查点事件触发器。0否,1是
CKPT_FORCE_WAIT_PAGES 4096 动态,系统级 在日志空间不足时,根据CKPT_FORCE_WAIT_PAGES参数控制检查点动态调整间隔。只要满足CKPT_WAIT_PAGES或CKPT_FORCE_WAIT_PAGES条件,都会触发检查点调整。取值范围0~65534,默认值4096,0表示不会根据CKPT_FORCE_WAIT_PAGES参数触发检查点调整
2.1.1.1.7 IO 相关

表 2.8 dm.ini 中 IO 相关参数

参数名 缺省值 属性 说明
DIRECT_IO 0 静态 非WINDOWS下有效,0:使用OS文件系统缓存;1:不使用OS文件系统缓存,采用系统模拟的异步IO,异步IO的线程数由IO_THR_GROUP控制;2:不使用OS文件系统缓存,采用系统提供的NATIVE AIO机制, 要求LINUX内核2.6以上 注:此参数应根据应用特征谨慎设置,一般保留默认为0即可
IO_THR_GROUPS 8 静态 非WINDOWS下有效,表示IO线程组个数。取值范围1~512
HIO_THR_GROUPS 2 静态 HUGE缓冲区IO线程组数目。 取值范围 1~512
FAST_EXTEND_WITH_DS LINUX/AIX/BSD缺省为1,其他缺省0 动态,系统级 是否按实际磁盘占用大小扩展文件,非WINDOWS有效。 0:扩展文件为空洞文件;1:按DISK SPACE扩展文件,文件的逻辑大小与实际磁盘占用大小一致
FIL_CHECK_INTERVAL 0 动态,系统级 指定检查数据文件是否存在的时间间隔,单位秒。取值范围0~4294967294。0表示不检查
FIL_CHECK_MODE 0 动态,系统级 当系统检测到 system、roll、temp表空间或联机日志文件缺失时,是否让服务器崩掉。0:否;1:是。非windows有效
2.1.1.1.8 数据库相关
表2.9 dm.ini中数据库相关参数
参数名 缺省值 属性 说明
MAX_SESSIONS 10000 静态 系统允许同时连接的最大会话数。取值范围 1~150000。
该参数还受到 LICENSE 的限制,取二者中较小者。
当会话数达到 MAX_SESSIONS 值后,为了保证管理员可继续管理数据库,允许 SYSDBA 额外开启 10 个会话连接
MAX_CONCURRENT_TRX 0 动态,系统级 表示系统支持同时运行事务数的最大值。取值范围 0~1500,0 表示不控制 注:这个参数仅在需要超大数量连接时才需要设置
CONCURRENT_DELAY 16 动态,系统级 表示新创建的连接,延迟多少秒之后参与事务限流机制。仅当 MAX_CONCURRENT_TRX 非 0 时生效。取值范围 0~1000, 单位秒。0 表示立即参与
TRX_VIEW_SIZE 512 静态 事务视图中本地事务 ID 的缓存初始化个数。取值范围 16~150000。如果配置了 MAX_CONCURRENT_TRX 参数(MAX_CONCURRENT_TRX>0),那么 TRX_VIEW_SIZE 的取值为 TRX_VIEW_SIZE、MAX_CONCURRENT_TRX 和 MAX_SESSIONS 三者中最小的值
TRX_VIEW_MODE 1 静态 控制 MVCC 事务可见性判断的方式。0:事务启动前收集当前时刻的活动事务 ID 构造可见性视图,以确定某一特定事务是否对当前事务可见;1:系统维护事务提交历史,以此判断事务可见性
TRX_CMTARR_SIZE 10 静态 提交状态事务数组的大小,仅当 TRX_VIEW_MODE 为 1 时有效。单位为百万,取值范围 3~1000。此参数设置越大,内存消耗越多,当应用为高并发,单位时间内事务完成数量大时,可将此参数值设大
MAX_SESSION_STATEMENT 10000 动态,系统级 单个会话上允许同时打开的语句句柄最大数,取值范围 64~20480)
MAX_SESSION_MEMORY 0 动态,系统级 单个会话的运行内存上限,单位 MB,取值范围 0~262144,0 表示不限制
MAX_CONCURRENT_OLAP_QUERY 0 静态 OLAP 模式下能同时执行的复杂查询个数,超过限制后,复杂查询将在执行阶段进入等待。0 表示不做限制。取值范围 0~100 注:此处的复杂查询是指计划中存在行数超过参数 BIG_TABLE_THRESHHOLD*10000 的节点,含有哈希连接、哈希分组等耗内存操作符,且不涉及到系统表
BIG_TABLE_THRESHHOLD 1000 动态,会话级 OLAP 环境下对复杂查询最大并发数(参数 MAX_CONCURRENT_OLAP_QUERY)进行限制时,认定是否为复杂查询中表的行数下限,单位为万。取值范围 0~4294967294
MAX_EP_SITES 64 静态 MPP 环境下 EP 站点的最大数量,取值范围 2~1024
PORT_NUM 5236 静态 服务器监听通讯端口号,服务器配置此参数,取值范围 1024~65534,发起连接端的端口在 1024-65535 之间随机分配
LISTEN_IP 空串 手动 与 PORT_NUM 配合使用,监听 IP 地址。若指定,则连接时必须指定与该值一样的 IP,否则创建连接失败
FAST_LOGIN 2 静态 是否在登录时记录登录失败历史信息。0 是,同步记录;1 否,不记录;2 是,异步记录,当同一个用户的登录失败记录数超过 100,则清理前面过早的登录失败记录,避免登录相关系统表 SYSACCHISTORIES 膨胀
DDL_AUTO_COMMIT 1 静态 指定 DDL 语句是否自动提交,1:自动;0:手动
COMPRESS_MODE 0 动态,会话级 建表时是否缺省压缩。0:不进行;1:进行
PK_WITH_CLUSTER 0 动态,会话级 在建表语句或增加约束语句中指定主关键字时,是否缺省指定为 CLUSTER,0:不指定;1:指定 注:该参数对水平分区表、列存储表和堆表无效
EXPR_N_LEVEL 200 动态,会话级 表达式最大嵌套层数。取值范围 30~1000
N_PARSE_LEVEL 100 动态,会话级 表示对象 proc、view、pkg、class 的最大解析层次,如果层次过深则报错返回。取值范围 30~1000
MAX_SQL_LEVEL 500 动态,系统级 指定 DM 虚拟机允许的最大栈帧数。取值范围 100~1000。此参数值设置过大可能会导致内存暴涨,管理员需斟酌设置
BDTA_SIZE 300 静态 BDTA 缓存的记录数。取值范围 1~10000
OLAP_FLAG 2 动态,会话级 启用联机分析处理,0:不启用;1:启用;2:不启用,同时倾向于使用索引范围扫描
JOIN_HASH_SIZE 500000 动态,会话级 hash join 操作时,hash 表大小,以 cell 个数为单位。取值范围 1~250000000
HFILES_OPENED 256 静态 设置可以同时打开的列存储表数据文件个数。取值范围 60~10000
ISO_IGNORE 0 动态,会话级 是否忽略显示设置的事务隔离级别,1 表示忽略,0 不忽略
TEMP_SIZE 10 静态 默认创建的临时表空间大小,单位 MB。取值范围 10~1048576
TEMP_SPACE_LIMIT 0 动态,系统级 临时表空间大小上限,单位 MB。0 表示不限制临时表空间大小。 取值范围 0~4294967294。 注:TEMP_SPACE_LIMIT 一定要大于等于 TEMP_SIZE
FILE_TRACE 0 静态 日志中是否记录文件操作,0:不记录;1:记录
COMM_TRACE 0 动态,系统级 服务器日志是否记录通信中产生的警告信息。0:不记录;1:记录
ERROR_TRACE 0 动态,会话级 服务器日志中是否记录语法分析出错的语句。1:是,0:否
CACHE_POOL_SIZE 100 静态 SQL 缓冲池大小,单位 MB。取值范围:32 位平台下为 12048;64 位平台下为 167108864
PLN_DICT_HASH_THRESHOLD 20 静态 仅当 CACHE_POOL_SIZE 参数值大于等于此参数值时,才开启缓存计划的字典关联登记。取值范围:32 位平台下为 12048;64 位平台下为 167108864。单位 MB
STAT_COLLECT_SIZE 10000 动态,会话级 统计信息收集时,样本的最小行数。取值范围 0~10000000
STAT_ALL 0 动态,会话级 在估算分区表行数时,控制一些优化。0:不采样所有分区子表;1:采样所有分区子表;2:优先采用统计信息中的行数;4:水平分区表不使用主表统计信息而使用叶子表统计信息。 支持使用上述有效值的组合值,如 3 表示优先采用统计信息中的行数,如果没有找到对应统计信息,则去采样所有分区子表。
TABLE_STAT_FLAG 0 动态,会话级 控制表统计信息的使用方式。
0:以默认方式使用统计信息,不进行优化;
1:MPP 环境下,对于 range/list 水平分区表,估算行数时优先采用统计信息的收集值;
2:当开启对表的数据量监控时,对变化行数达到阈值的表,使其统计信息在分析阶段失效;
4:优先从表统计信息中获取表行数。.
支持使用上述有效值的组合值,如 3 表示同时进行 1 和 2 的优化
PHC_MODE_ENFORCE 0 动态,会话级 控制连接的实现方式。 0:优化器根据代价情况自由选择连接方式; 1:允许使用 nest loop inner join; 2:允许使用索引连接; 4:允许使用哈希连接; 8:允许使用归并连接 支持使用上述有效值的组合值,如 6 表示优化器根据代价情况在索引连接和哈希连接间进行选择。 当参数值不为 0 或 15 且包含 2/4/8 其中之一或者它们的组合值时,会将包含的值对应的连接模式参数置为 1,没有包含的值对应的连接模式参数置为 0(2 对应 ENABLE_INDEX_JOIN,4 对应 ENABLE_HASH_JOIN,8 对应 ENABLE_MERGE_JOIN)。例如,取值为 6 时没有包含 8,则会将 ENABLE_INDEX_JOIN 和 ENABLE_HASH_JOIN 置为 1,将 ENABLE_MERGE_JOIN 置为 0(仅强制设置内存中的值,不改变 dm.ini 文件中的值)
ENABLE_HASH_JOIN 1 动态,会话级 是否允许使用哈希连接,0:不允许;1:允许。
ENABLE_INDEX_JOIN 1 动态,会话级 是否允许使用索引连接,0:不允许;1:允许。
ENABLE_MERGE_JOIN 1 动态,会话级 是否允许使用归并连接,0:不允许;1:允许
MPP_INDEX_JOIN_OPT_FLAG 1 动态,会话级 MPP 下,是否可以使用索引左外连接,0:不使用;1:使用
MPP_NLI_OPT_FLAG 1 动态,会话级 MPP 下嵌套连接的优化方式。
0:嵌套连接操作的左右孩子添加 MPP GATHER,汇总到主 EP 执行, 父节点添加 MPP SCATTER;
1:根据左右孩子的实际情况添加通讯操作符,若当前情况为左孩上的数据为 PART(分布在每个站点上的数据都是部分的),右孩子上的数据为 FULL(数据在每个站点上分布都是完全的),则不添加;若两个孩子均为 PART,则在数据量少的那个孩子上添加 MPP GATHER 和 MPP SCATTER;
2:根据左右孩子的实际情况添加通讯操作符,若当前情况为右孩子为 PART,左孩子为 FULL 则不添加;若两个孩子均为 PART,则在数据量少的那个孩子上添加 MPP GATHER 和 MPP SCATTER;
3:嵌套连接操作的左右孩子都添加 MPP GATHER 和 MPP SCATTER
MAX_PARALLEL_DEGREE 1 动态,会话级 用来设置默认并行任务个数。取值范围 1~128。缺省值 1,表示不并行执行任务。当 PARALLEL_POLICY 值为 1 时该参数值才有效
PARALLEL_POLICY 0 动态,会话级 用来设置并行策略。取值范围:0、1 和 2,缺省为 0。其中,0 表示不支持并行;1 表示自动并行模式;2 表示手动并行模式。不支持 HINT 方式指定该参数
PARALLEL_THRD_NUM 10 静态 用来设置并行工作线程个数。取值范围 1~1024
PARALLEL_THRD_TARGET 0 动态,系统级 用于设置并行线程池中保留的线程数上限。取值范围 0~10240,0 表示不设限,系统将根据压力自动控制空闲线程数
PARALLEL_MODE_COMMON_DEGREE 1 动态,会话级 并发模式程度。此值越大,扫描代价将越大,越倾向于使用索引连接而不是哈希连接,需酌情使用。取值范围 1~1024
PUSH_SUBQ 0 动态,会话级 是否下放子查询使先做。0:始终不下放;1:相关子查询且不存在单表过滤条件时下放;2:相关子查询始终下放;4:非相关子查询下放
OPTIMIZER_AGGR_GROUPBY_ELIM 1 动态,会话级 当对派生视图进行分组查询,且分组项是派生视图分组项的子集时,是否允许将两层分组进行合并。0:不优化;1:将两层分组进行合并
UPD_TAB_INFO 0 静态 系统启动时是否更新表信息(如行数),1:启用更新;0:不更新
ENABLE_IN_VALUE_LIST_OPT 518 动态,会话级 是否允许 IN LIST 表达式优化。
0:不优化;
1:将 IN LIST 表达式在语义分析阶段优化为 CONST VALUE LIST;
2:将 IN LIST 表达式在代价优化阶段优化为 CONST VALUE LIST;
4:生成传递闭包优化;
16:OR 表达式优化为 LIST IN LIST 表达式时,允许 LIST 中的列来源于不同的表;
32:允许 IN list 表达式中的列为分区列时转化为 SEMI JOIN;
64:当 IN LIST 表达式左侧包含多列,并且包含非列类型表达式时,允许将其优化为 CONST VALUE LIST;
128:分析阶段将 in value list 表达式转换为 or 表达式
256:使用索引连接时,当连接条件中有多个 IN 表达式时,多个 IN 表达式会先做连接。取该值时,不允许分析阶段 IN 连接后的行数超过一万行;
512:语义分析阶段将多列 NOT IN 转换为 NULL_EQU 函数,预期走批量计算,提升执行效率;目前仅支持 NOT IN 为常量值链表时进行转换;
1024:在取值 1 关闭情况下,将表连接(JOIN)的 IN LIST 表达式在语义分析阶段优化为 CONST VALUE LIST;
2048:扩大 IN LIST 作为 JOIN CONDITION 的代价,缩减其转换为 CONST VALUE LIST 的代价;
4096:增强 OR 表达式转换为 IN 表达式(或者 AND 表达式转换为 NOT IN 表达式)的优化,将转换后的 IN 表达式(IN LIST 或 LIST IN LIST)按数据类型(仅限数值和字符类型)进行拆分,避免转换后的不等价引发的报错或结果错误;该增强优化仅在 OR 表达式转换为 IN 表达式(或者 AND 表达式转换为 NOT IN 表达式)的优化生效后有效
支持使用上述有效值的组合值,如 3 表示同时进行 1 和 2 的优化
ENHANCED_BEXP_TRANS_GEN 3 动态,会话级 0:不允许非等值布尔表达式和外连接 ON 条件中的传递闭包;1:允许非等值布尔表达式和外连接 ON 条件中的传递闭包;2:分析阶段针对表达式通过传递闭包产生的表达式进行去重处理;4:允许将 IN LIST 过滤条件传递到非相关子查询内部 支持使用上述有效值的组合值,如 3 表示同时进行 1 和 2 的优化
ENABLE_DIST_VIEW_UPDATE 0 动态,系统级 是否支持更新含有 distinct 的视图,1:允许;0:不允许,当 COMPATIBLE_MODE=1 时,ENABLE_DIST_VIEW_UPDATE 的实际值均为 1
STAR_TRANSFORMATION_ENABLED 0 动态,会话级 是否允许对星形模型查询改写以使用位图连接索引。0:不启用;1:启用 此参数仅在 OLAP_FLAG 为 1 时才有效
MONITOR_INDEX_FLAG 0 动态,会话级 是否对索引进行监控,0:关闭自动监控,可使用 ALTER INDEX 语句启用索引监控;1:打开自动监控,对用户定义的二级索引进行监控;2:禁止索引监控
AUTO_COMPILE_FLAG 1 动态,系统级 用于加载失效对象时是否自动编译,0:否;1:是
RAISE_CASE_NOT_FOUND 0 动态,系统级 CASE 语句 NOT FOUND 是否抛出异常。0:不抛出;1:抛出
FIRST_ROWS 100 动态,系统级 结果集一个消息中返回的最大行数,取值范围 1~1000000
LIST_TABLE 0 动态,会话级 默认情况下,创建的表是否为堆表,0:否;1:是
ENABLE_SPACELIMIT_CHECK 1 静态 是否启用创建表时定义的空间限制 DISKSPACE LIMIT 功能。1:启用;0:不启用
BUILD_VERTICAL_PK_BTREE 0 静态 HUGE 表上创建的主键是否需要创建物理 B 树。0:不创建;1:创建
BDTA_PACKAGE_COMPRESS 0 动态,会话级 是否启动 bdta 压缩传递功能, 0:不压缩;1:压缩;2:根据数据特征自适应选择是否压缩,取值 2 仅限在 DMDPC 环境下使用
HFINS_PARALLEL_FLAG 0 动态,系统级 是否启动 HUGE 表查询插入优化。0:否;1:对非 HUGE 分区表进行优化;2:对 HUGE 分区表也进行优化
HFINS_MAX_THRD_NUM 100 动态,系统级 HUGE 表查询插入优化时并行的最大线程数,取值范围 4~200
LINK_CONN_KEEP_TIME 15 静态 DBLINK 空闲连接缓存存在时间,单位分钟,为 0 时表示不缓存 DBLINK 连接,取值范围 0~2147483647。建议在频繁使用有限的几个 DBLINK 的时候开启该参数并设置较长时间,以便重用连接;在使用的大部分是不同的 DBLINK 时,单个 DBLINK 被重用的几率很小,此时可以考虑不设置该参数
MAX_LINK_SESSIONS 10000 静态 用于设置 DBLINK 连接会话数的上限值,取值范围 1~150000。当 DBLINK 连接会话数达到该上限值时,服务器将释放空闲的 DBLINK 连接,再新建连接会话;若无空闲连接,则拒绝建立新连接
DETERMIN_CACHE_SIZE 5 动态,会话级 确定性函数值缓冲区大小,单位 MB
NTYPE_MAX_OBJ_NUM 1000000 动态,系统级 复合数据类型中包含的对象或者字符串的总个数,以及查询中包含的变量的总个数,取值范围为 2000~100000000
CTAB_SEL_WITH_CONS 0 动态,会话级 查询建表时,是否对原始表上的相关信息进行拷贝。0:否(若源列是显式指定了 NOT NULL 约束的非主键列,或者源列是自增列,则拷贝源列的非空信息);1:对原始表上的约束进行拷贝;2:对原始表上的表结构、分区信息、存储信息以及部分表约束进行拷贝。其中,CTAB_SEL_WITH_CONS=1 时,不支持 huge 表
HLDR_BUF_SIZE 8 动态,系统级 进行 HUGE 表导入时,缓冲区的大小,单位 MB,取值范围 4~1024
HLDR_BUF_TOTAL_SIZE 4294967294 动态,系统级 HLDR 资源控制,系统所有 HLDR 使用的 HLDR_BUF 空间的总量,单位 MB。取值范围 100~ 4294967294
HLDR_REPAIR_FLAG 0 动态,系统级 使用 dmfldr 装载数据时如发生错误,对错误的处理方式。0:完全回滚方式,数据将回到装载前的状态;1:修复方式,系统将数据修复到最后一个完整装载的数据区。此外,若此参数为 1,dmfldr 装载数据时不支持对事务型 HUGE 表二级索引进行维护
HLDR_FORCE_COLUMN_STORAGE 1 动态,系统级 装载最后一个数据区是否强制列存。1:是;0:否
HLDR_FORCE_COLUMN_STORAGE_PERCENT 80 动态,系统级 装载 HUGE 表时最后一个数据区强制列存的最低数据百分比。取值范围 50~100
HLDR_HOLD_RATE 1.5 动态,系统级 HLDR 最多保持重用 HLDR_BUF 的个数与目标表列数的比例。取值范围 1~65535
HLDR_MAX_RATE 2 动态,系统级 HLDR 同时使用的 HLDR_BUF 的最大个数与目标表列数的比例。取值范围 2~65535
HUGE_ACID 0 动态,系统级 是否支持 HUGE 表增删改与查询的并发,取值范围:0、1、2。 0:不支持 HUGE 表增删改与查询的并发; 1:支持 HUGE 表增删改与查询的并发,操作符 hflkup 检查数据区是否上锁时使用二分查找; 2:支持 HUGE 表增删改与查询的并发,操作符 hflkup 检查数据区是否上锁时使用遍历查找
HUGE_STAT_MODE 2 动态,会话级 设置默认情况下是否计算 with delta 的 HUGE 表各列的统计信息,取值范围:0、1、2。 0:不计算统计信息; 1:实时计算统计信息; 2:异步计算统计信息
HFS_CHECK_SUM 1 静态 是否为 HUGE 表数据区进行和校验:0:否;1:是
HBUF_DATA_MODE 0 静态 huge 表数据缓冲区中缓存数据的格式,取值范围:0、1,缺省值为 0 0:格式与数据文件中的数据块格式一致 1:当数据块是压缩加密时,缓存解密解压后的数据
DBLINK_OPT_FLAG 509 动态,会话级 控制对 DBLINK 的优化。 0:不进行优化; 1:允许 dblink 整体优化,采用原始方式; 2:dblink 局部优化,采用老方式; 4:dblink 局部优化,采用新方式; 8:异构数据库情况下进行兼容性检查,根据表达式类型检查是否可以在异构数据库执行,如果不支持,则不对此表达式进行进行收集; 16:采用新方式局部优化时,考虑视图、派生表、子查询、查询表达式是否可以整体优化; 32:采用新方式局部优化时,支持外连接 WHERE 过滤条件的优化; 64:支持 member_access 转换为变量的优化方式; 128:增删改支持新方式优化; 256:计划生成阶段增加 dblink 优化,支持连接条件转换为变量的优化方式,并对 dblink 存在过滤条件的场景进行优化; 512:支持物化视图明细表是基于 DM 到异构数据库 DBLINK 的远程表; 1024:若查询包含 DBLINK,则将 LIKE 表达式的数据类型强制转为 VARCHAR(4000),防止查询发给 ORACLE 后字符串超长报错; 2048:DBLINK 根据远端的统计信息进行代价计算;4096: 在多次执行的 Remote scan 操作符前插入 nTTS2 操作符,使用临时表接收远程数据,减少 Remote scan 执行次数。 8192: 如果语句的查询表和过滤条件都来自同一远程连接,将其优化为一张派生表。 支持使用上述有效值的组合值,如 61 表示同时进行 1、4、8、16、32 的优化。取值 16 和 32 只有和取值 4 组合才有意义
DBLINK_LOB_LEN 8 动态,系统级 使用 DBLINK 访问大字段类型时,大字段的长度限制。单位 KB,取值范围 4~1024
FILL_COL_DESC_FLAG 0 动态,系统级 服务器返回给客户端的结果集是否含有列描述信息,0:否;1:是
BTR_SPLIT_MODE 1 动态,系统级 B 树叶子节点分裂方式,取值范围:0~15,按位标识:
0:按对半分裂,B 树插入满一页后从当前页的中间行分裂成两个页,然后重新定位插入;
1:在插入点进行分裂,插满一页后重新分配一个新页插入新数据;
2:二级索引开启 B 树插入封锁优化,B 树分裂时先尝试 X 封锁叶子页的父亲页,而不是直接 X 封锁整棵 B 树;
4:包含索引键值的聚集索引开启 B 树插入封锁优化,B 树分裂时先尝试 X 封锁叶子页的父亲页,而不是直接 X 封锁整棵 B 树;
8:不包含索引键值的聚集索引开启 B 树插入封锁优化,B 树分裂时先尝试 X 封锁叶子页的父亲页,而不是直接 X 封锁整棵 B 树
TS_RESERVED_EXTENTS 64 静态 系统为每个表空间提前预留的簇个数,减少系统在执行过程中申请不到空间的情况。取值范围 2 ~ 1024。 注:DMDSC 环境下,该参数所有站点需要保持一致
TS_SAFE_FREE_EXTE 512 静态 系统认为安全的 free extents 空间,取值范围 128~65534。 注:DMDSC 环境下,该参数所有站点需要保持一致
TS_MAX_ID 8192 静态 限制系统所支持的最大表空间 ID,取值范围 512~65517, 与系统实际最大 id 比较,取大。 如果设置为 590,但是系统最大 id 已经为 1000 了,最后结果是 1000。 注:DMDSC 环境下,该参数所有站点需要保持一致
TS_FIL_MAX_ID 2048 静态 限制每个表空间所支持的最大文件个数,取值范围 64~8191 注:DMDSC 环境下,该参数所有站点需要保持一致
DECIMAL_FIX_STORAGE 0 动态,会话级 是否将长度为 1~18 的 DECIMAL/DEC 类型转换为定长方式存储。0:否;1:是。 若转换为定长存储,则 DECIMAL(P,S)的转换规则为:当 0<P<10 时,存储为 4 字节整型值;当 10<=P<19 时,存储为 8 字节整型值
SAVEPOINT_LIMIT 512 动态,系统级 单个事务中最大可创建的保存点个数。取值范围 0~10000
SQL_SAFE_UPDATE_ROWS 0 动态,系统级 SQL 安全更新控制参数。取值范围:0:关闭 SQL 安全更新;1~2147483647:启用 SQL 安全更新,SQL 语句每次允许影响行数的最大值为指定的参数值
ENABLE_HUGE_SECIND 1 动态,系统级 是否支持事务型 HUGE 表二级索引的维护,0:不支持;1:支持
LOB_MAX_INROW_LEN 900 动态,系统级 指定数据库 LOB 字段的行内数据存放的上限大小,单位为 BYTE,取值范围 900~8000
RS_PRE_FETCH 0 动态,系统级 查询操作结果集返回时是否进行预填充,仅适用于 FORWORD_ONLY 游标的结果集。0:不预填充;1:预填充,即在一批数据返回客户端后会自动进行预取下一批数据;2:在开启消息压缩时,提前压缩结果集,提升消息响应速度
TIMER_TRIG_CHECK_INTERVAL 60 动态,系统级 服务器端检查触发器是否触发的时间间隔,单位为秒,即每过设置的秒数检查触发器是否需要触发,取值范围 1~60
INNER_INDEX_DDL_SHOW 1 动态,会话级 用于 DBMS_metadata 包查询索引结果。0: 查询系统的内部索引定义报错;1:允许查询系统的内部索引定义
HP_STAT_SAMPLE_COUNT 50 动态,系统级 水平分区表采集统计信息时,子表的最大采样数,取值范围 1~65535
MAX_SEC_INDEX_SIZE 16384 静态 控制二级索引记录的最大长度。取值范围 512~32768,单位 BYTE
PWR_FLUSH_PAGES 10000 动态,系统级 控制生成特殊 PWR 记录的频率,每写入 PWR_FLUSH_PAGES 页到磁盘,即生成一条特殊的 PWR 记录,标记之前的 PWR 记录是有效的。取值范围 0~4294967294
REDO_UNTIL_LSN 空串 静态 系统故障重启时,重做 REDO 日志的最大 LSN 值。 使用这个参数要十分慎重,一般只在数据库文件系统损坏,系统无法正常启动情况下使用,通过指定这个参数,将数据库恢复到稍早时间点,让数据库可以正常启动,以便抢救部分数据。 注:使用这个参数后,会截断指定 LSN 之后的所有日志。另外,系统启动后,一定不要忘记将参数值重新修改为缺省值
IGNORE_FILE_SYS_CHECK 1 静态 系统重启时,是否检查 SYSTEM/ROLL/MAIN 表空间文件系统。0:检查文件系统;1:不检查文件系统,在实际使用空间比较大情况下,可以考虑关闭文件系统检查,提高系统启动速度;2:检查文件系统,同时检查表空间全局空闲链表是否正常,若异常则截断该空闲链表
FILE_SCAN_PERCENT 100.0 动态,系统级 V$DATAFILE 查询时控制抽样比例,最多抽样 10000 页; 在 50 页以下的不抽样。取值范围 0~100.0,0 相当于 100
STARTUP_CHECKPOINT 0 静态 系统启动时 REDO 后是否强制做完全检查点。 0:不强制;1:强制
CHECK_SVR_VERSION 1 静态 数据库记录的执行码版本比当前 Server 版本高时,是否报错。0:不报错;1:报错,服务器不能启动成功
ID_RECYCLE_FLAG 0 静态 是否开启 ID 资源回收功能。1 是,即在服务器启动后,对于新申请的表 ID、索引 ID、约束 ID,如果 ID 最终未成功使用,则 ID 会被暂时放入回收缓存中,以备下次申请使用,服务器关闭后,缓存中的 ID 会被全部丢弃;0 否
TRXID_UNCOVERED 0 动态,会话级 是否禁止二级索引覆盖。0:否,使用二级索引覆盖,当更新不涉及二级索引时,查询最大 TRXID 可能比聚集索引的最大 TRXID 小;1:是
GEN_SQL_MEM_RECLAIM 1 动态,系统级 语句块执行是否提前回收空间。0:否;1:是,语句块生成各个 sql 计划后,都需尝试回收部分 pha 内存空间
ENABLE_PMEM 0 静态 Linux 系统中,是否使用 Intel 提供的动态库(libpmem.so)读写存储在持久性内存上的联机日志文件。libpmem.so 由 INTEL 公司提供,可通过安装 INTEL 硬件持久性内存获取。 0:否,使用系统 IO 接口读写; 1:是,安装了非易失性存储介质并且文件存储于持久性内存才使用 Intel 动态库读写,否则仍然使用系统 IO 接口读写。此种情况不支持 RESIZE LOGFILE 语句和 RENAME LOGFILE 语句
HP_TAB_COUNT_PER_BP 1 动态,会话级 创建一级、二级哈希分区时,如果分区数指定为 DEFAULT 而不是具体数值,系统会根据本参数值决定每个 BP RAFT 上创建的哈希子表个数。 取值范围 1~1024
SQC_GI_NUM_PER_TAB 1 动态,会话级 每个表拆分的扫描单元个数。取值范围 1~1024。 扫描表对象时,每个表可以被拆分成多个单元以提升并行性能。参数值表示拆分的单元个数,每个单元可以独立用于工作线程的扫描任务。例如:需要扫描一个子表且子表数据量较大,为充分利用工作线程资源,可以调大此参数以使用分区内并行
DBLINK_USER_AS_SCHEMA 1 动态,会话级 是否将当前用户名作为缺省模式名(或库名)。0:否;1:是。目前仅对 ODBC 类型的 DBLINK 有效
CTAB_MUST_PART 0 动态,系统级 用户表是否只能创建为分区表。0:否;1:是
CTAB_WITH_LONG_ROW 0 动态,系统级 是否尝试在建表时隐式指定 USING LONG ROW 来开启超长记录存储功能。0:否;1:是。 当该参数为 1 时,只有满足附加条件的情况下才会成功开启超长记录存储功能,未满足条件的不能开启。 附加条件: 1. 非 HUGE 表、临时表和外部表 2. 建表不包含聚集主键约束 3. 如果是分区表,则不包含 ENABLE ROW MOVEMENT 子句 4. 整行记录总长度超长。长度上限可参考《DM8_SQL 语言使用手册》中表 1.4.1。当 CTAB_WITH_LONG_ROW=1 时,可通过 DISABLE USING LONG ROW 关闭隐式开启的超长记录存储功能
TMP_DEL_OPT 1 动态,系统级 是否对临时表删除进行优化。0:不优化;1:如果不要求临时表可回滚,则对于无过滤条件的临时表删除语句,在执行删除时直接清除其临时段数据
LOGIN_FAIL_TRIGGER 0 动态,系统级 登录失败时是否触发 LOGIN/LOGON 触发器。0:不触发;1:触发
INDEX_PARALLEL_FILL 0 动态,系统级 控制查询插入时二级索引是否启用并行填充。如果表上存在多个二级索引并且没有全文索引,在插入操作符执行时,一旦检测到本次填充的记录行数大于等于此参数指定值,则为每一个二级索引生成一个异步索引填充任务,由任务线程并行执行,以提升查询插入的执行效率。取值范围 0~10000,0 表示关闭并行填充
CIND_CHECK_DUP 0 动态,系统级 指定创建索引时检查索引冗余的方式,以及建表时是否检查重复的 UNIQUE 约束。 0:创建索引时已存在同类型且相同索引列的索引则报错,建表时不检查重复的 UNIQUE 约束 1:创建索引时已存在相同索引列的索引则报错,建表时检查重复的 UNIQUE 约束
TSMV_RAFIL_SIZE 64 静态 DMDPC 专用。指定表空间迁移的临时归档文件的最大空间。取值范围 2~1024。单位 Mb
TSMV_FILE_COPY_PLL 1 动态,系统级 DMDPC 专用。表空间迁移时物理文件拷贝并行度。取值范围 1~128
TSMV_WAIT_TIMEOUT 120 动态,会话级 DMDPC 专用。表空间中表对象封锁超时的时间。取值范围 0~12000,单位秒
TSMV_SEND_BUF_SIZE 4 动态,系统级 DMDPC 专用。表空间迁移发送文件缓冲区大小。单位 MB,取值范围 1~64。值越小,迁移越慢,但迁移中对并发业务影响越小;值越大迁移速度越快,但迁移中对并发业务影响越大,可结合实际情况设置
HUGE_ENABLE_DEL_UPD 1 动态,系统级 是否允许对 HUGE 表数据进行更新或删除。0:不允许更新或删除;1:允许更新或删除;2:不允许更新;3:不允许删除
HUGE_DEFAULT_FILE_SIZE 64 动态,系统级 创建 HUGE 表时,storage 子句中 filesize 的默认值,取值范围 16~1048576
HUGE_DEFAULT_SECTION_SIZE 65536 动态,系统级 创建 HUGE 表时,storage 子句中 section 的默认值,取值范围 1024~1048576
STAT_OPT_FLAG 0 动态,会话级 生成统计信息的优化。0:不优化;1:生成统计信息时不存储左孩子的数据,以在某些场景表实现性能的提升
ALLOWED_CLIENT_VERSIONS 空串 静态 控制可连接服务器的客户端版本,最多可配置 10 个支持的版本号,用逗号分隔(不带空格)。默认值空串表示支持所有版本的连接,但参数 IFUN_DATETIME_MODE=1 时可能存在版本连接限制
DPC_TABLESPACE_BALANCE 1 动态,系统级 当在 DPC 下创建分区表,子表个数少于所选择的表空间个数时,是否启用随机选择起始表空间以使得表空间负载均衡。0:不启用;1:启用,从已有子表所使用的表空间中挑选;2:启用,在一级水平分区表新增子表时考虑从所有表空间中挑选
DPC_DCT_REFRESH_POLICY 1 动态,系统级 DMDPC 专用。MP 广播实例字典信息优化开关。 0:表示关闭,MP 会定时广播实例字典信息; 1:表示打开,MP 只会在每次修改实例字典信息时进行广播
HANDLE_WARN_RATE 75 动态,系统级 DMSERVER 进程使用句柄数报警百分比,超过设定值则写日志警告信息,取值范围 0~100
CLOB_MAX_IFUN_LEN 20971520 动态,系统级 系统函数中支持的最大 CLOB 长度,取值范围 32767~104857600,单位 BYTE
ENET_SESS_CHECK_INTERVAL 10 动态,系统级 当 BP/SP 处于 MP 无效服务状态时,BP/SP 断开会话连接的时间间隔阈值。如果 BP/SP 处于 MP 无效服务状态的时间超过该阈值,则会主动断开所有会话连接。取值范围 0~4294967294,单位秒。0 表示关闭
CYT_CHECK_FLAG 0 静态 是否检查校验加解密过程。0:不检查;1:检查
HUGE_DEFAULT_FILE_INIT_SIZE 1 动态,会话级 指定 huge 表数据文件的初始化时的默认大小,单位 Mb,取值范围 0~1048576。0 表示关闭,即 huge 表数据文件创建时就使用其文件大小创建;非 0 时有效值是 2 的 n 次幂,会自动进行对齐
MAX_UNCOMPRESS_RATIO 100 动态,系统级 UTL_COMPRESS 包中解压相关方法支持的最大解压比例,取值范围 10~1000
MAX_UNCOMPRESS_LENGTH 1024 动态,系统级 UTL_COMPRESS 包中解压相关方法支持的解压后数据的最大长度,单位 MB,取值范围 1024~102400
TS_FIL_USE_ABSOLUTE_PATH 0 静态 表空间添加、重命名数据文件是否必须使用绝对路径。0:不强制使用绝对路径;1:必须使用绝对路径
LIST_TABLE_BRANCH 0 动态,系统级 创建堆表的并发分支数,取值范围 0~64。当 LIST_TABLE 开启时参数配置生效
LIST_TABLE_NON_BRANCH 0 动态,系统级 创建堆表的非并发分支数,取值范围 0~64。当 LIST_TABLE 开启时参数配置生效。为 0 时采用系统默认值 1
DHASH3_MAX_CONFLICT 4 动态,会话级 动态哈希扩展中允许每个槽上的最大冲突数,取值范围 1~100
DHASH3_SIZE_EXTEND_FACTOR 5 动态,会话级 动态哈希扩展中指定的扩展因子,取值范围 1~100
DB_FILE_NAME_CONVERT 空串 静态 指定还原数据库或备库重演日志时表空间数据文件路径的转换规则。参数值必须为偶数个字符串,以逗号为分隔符。每两个字符串分别表示源库数据文件路径中的待替换字符串和替换后的字符串(pattern/replace)。替换后的路径长度不能超过 256 个字节,否则认为当前 pattern/replace 无效,匹配下一对 pattern/replace。进行字符串替换时,只替换匹配成功的第一对 pattern/replace,后续 pattern/replace 不再进行替换。未找到匹配项则不进行字符串替换,可能导致重演或还原失败。参数为空串时不进行路径转换,按照 REDOS_FILE_PATH_POLICY 参数规则或者默认规则进行重演或还原
DPC_GUP_SESS_TIMEOUT 180 动态,会话级 用于 DMdpc 中,表示 sP 升级时事务、会话超时断开时间。取值范围 60~600。单位秒
TS_AUTO_EXTEND_SIZE 64 静态 表空间自动扩展大小,取值范围 1~1024,单位 MB
INI_SYNC 1 动态,系统级 用于控制备库是否定期从主库同步 INI 参数及每次同步的时间间隔;取值范围 0~1440,单位分钟;0 表示不开启同步。该参数也用于控制进行主备切换时,新主库是否向备库强制同步 INI 参数,0 表示不强制进行同步
TRUNC_CHECK_MODE 0 系统级;动态 语句检查并发 TRUNCATE 的方式。 0:分区表根据对应根表的数据版本检查; 1:分区子表各自检查; 2:索引局部进行检查。 注:DM MPP 环境不支持该参数
PAGE_CHECK_POLICY 1 系统级;动态 建库参数 PAGE_CHECK 非 0 时,若数据页校验失败,对于 INI 参数 PTX_ROLLBACK 为 0 或 PTX_ROLLBACK 为 1 但无法报错处理的情况的处理策略。0:忽略失败;1:系统主动 HALT
FAST_START_MTTR_TARGET 0 动态,系统级 数据库故障恢复时间,单位秒,取值范围 0~3600,缺省为 0。设置该参数后,系统内部会根据未刷盘日志大小及脏页数量,动态调整 RLOG_RESERVE_THRESHOLD 值 可通过 SP_SET_PARA_VALUE 系统过程设置(最终会转换为 RLOG_RESERVE_THRESHOLD 值)
CSEK2_CHECK_LOCK 0 动态,系统级 对于简单计划(对主键查询的更新与删除),是否需要在检索时锁行。 0:表示关闭; 1:表示尝试在查询期间提前封锁; 2:表示尝试在查询期间提前修改
CSCN2_CHECK_LOCK 0 动态,系统级 该参数按位取值,有两层含义 0:表示关闭 1:DSC 集群简单计划(全表更新/删除)在扫描时使用 NBTR_MODIFY_LEAF 模式,借助 PRELOAD 机制提前获取数据页 X 封锁,提升 LBS 封锁效率 2:对于简单计划(全表更新/删除)在扫描时提前修改记录 TID 3:同时启用 1 和 2 功能
STAT_CACHE_FLAG 1 静态 SP 是否缓存表行数。 0:不缓存; 1:SP 缓存表行数,而不是每次都向 MP 请求表行数,从本地缓存中获取表行数以降低 MP 的性能瓶颈。和 STAT_CACHE_CAPACITY 搭配使用
DEFAULT_FILLFACTOR 0 动态,系统级 设置填充比例的默认值,包括所有可以设置 storage 参数的模块如表、索引、物化视图等。指定插入数据时数据页的充满程度,取值范围 0~100。取缺省值 0 时,等价于 100,表示全满填充,未充满的空间可供页内的数据更新时使用
SHADOW_CHECK_INTERVAL 60 动态,系统级 用于设置清理影子库的本地归档文件的时间间隔,取值范围 0~3600,单位秒。如果设为 0,则关闭自动清理功能。此参数仅对影子库有用
WM_CONCAT_LOB 1 静态 指定 wm_concat 函数的返回值类型。0:varchar 类型;1:CLOB 类型
CHECK_CONS_NAME 1 动态,系统级 在创建或重命名约束时,是否对约束名合法性进行检查。0:不检查;1:检查
IFUN_LEN_OPT 1 动态,系统级 设置如何调整函数返回字符串结果的长度。0:不调整;1:优化部分函数返回字符串结果的最大长度;2:溢出时不报错,截断后返回,取值 2 仅在 COMPATIBLE_MODE 为 2 时生效。
取值为 1 时可以进行优化的函数有: TO_CHAR()、CONCAT()、INITCAP()、REVERSE()、LPAD()、RPAD()、SUBSTRB()、SOUNDEX()、TRANSLATE()、ASCIISTR()、RAWTOHEX()、UNISTR()、NLSSORT()、TO_SINGLE_BYTE()、TO_MULTI_BYTE()、COMPOSE()
支持使用上述有效值的组合值,如 3 表示同时进行 1 和 2 的操作
PKG_BUILD_WAIT_TIME 5 动态,系统级 等待包对象构建的最长等待时间,取值范围 1~604800,单位秒
PKG_BUILD_WAIT_POLICY 1 动态,系统级 包编译等待策略
0:总是超时等待
1:对于可能死锁的并发编译串行处理
PTX_ROLLBACK 0 静态 针对磁盘 IO 读请求超时、DMDSC 环境下 LBS 请求 GBS 授权超时场景的处理策略。0:故障退出;1:正常报错。
针对访问数据页损坏的场景(建库参数 PAGE_CHECK 非零可以校验数据页损坏)的处理策略。0:此时处理策略取决于 INI 参数 PAGE_CHECK_POLICY;1:绝大部分情况可以正常报错,当损坏的数据页是文件 0 号页、系统表空间数据页、文件系统 INODE 页或者描述页等时,无法正常报错,此时的处理策略取决于 INI 参数 PAGE_CHECK_POLICY
LOB_READ_LOCK 1 动态,系统级 指定使用系统函数或包方法对 LOB 对象做只读操作时是否锁表并检查 LOB 数据是否匹配。1:是,0:否
在 DMDPC 或 DMMPP 环境下,取值 0 不生效
VM_PINST_COUNT 10 动态,系统级 可以动态配置栈帧中缓存实例上限,取值范围为 0~20,设置为 0 为不打开。参数打开后,可以缓存最近访问的部分包的实例地址,用于提升后续访问速度
INSTRUCT_COMBINE 0 动态,系统级 是否尝试进行特定形式表达式的合并指令的生成(例如:将 a.b/a(i).b/a(i)形式的本地变量的读写,改为单独的 dop_load_spa/dop_store_spa 指令执行);0:否,1:是
MAX_ESESSIONS 100000 动态,系统级 DMDPC 专用。指定分支 ESESSION 个数上限,取值范围 0~650000,0 表示无限制。
ESESSION 为 SP 和其他节点之间的内部会话,SP 上的 ESESSION 为主 ESESSION,其他节点上的 ESESSION 为分支 ESESSION
DEFAULT_HASHPARTMAP 1 动态,系统级 创建哈希分区表未指定 HASHPARTMAP 选项时的默认值。取值范围 0~3,0 表示 DM 原有的数据定位方式,此时数据分布最均衡,但不能增删分区;1 表示采用新数据定位方式,此时可以增删哈希分区;2 为兼顾数据分布均衡和允许添加分区的数据定位方式;3 采用新的 hash 算法计算分区列哈希值,分区定位方式与 HASHPARTMAP(1) 保持一致
PL_SQL_STRIP 0 动态,系统级 指定是否开启语句块/过程/函数/包等脚本中的语句剥离功能,即将其中的 DML 语句改为动态执行。
0:不开启语句剥离功能
1:开启语句块中语句剥离功能
2:开启过程和函数中语句剥离功能
4:开启包和 CLASS 类中语句剥离功能
8:开启触发器中语句剥离功能
16:表示语句剥离后若不包含 USING 和 INTO,则动态执行直接使用原始 SQL 语句
32:表示语句剥离时,补充解析 MERGE INTO 中尚未解析的部分,保证语句中的变量能够成功转换为 USING 子句
64:允许 CURSOR 定义或 OPEN 游标指定的查询表达式进行 SQL 剥离。但禁止将静态游标赋值给动态游标;且 OPEN 动态游标时,必须指定 SQL,否则将报错
128:在 ELOG 日志中记录 SQL 剥离转换前后的语句,并将 PL_SQL_STRIP 调整成会话级参数
支持使用上述有效值的组合值,如 6 表示同时进行 2 和 4 的处理
IPV6_LSNR 1 静态 是否监听 IPV6 端口的请求。0:不监听;1:监听
DBLINK_HEALTH_CHECK 1 动态,会话级 指定重用缓存中的 DBLINK 连接时是否检查连接有效性。0:不检查;1:通过接口进行简单检查;2:通过执行查询语句进行严格检查
BTR_FREE_PAGE_STACK 0 动态,系统级 指定是否开启 B 树空闲页堆栈。开启 B 树空闲页堆栈后,B 树控制页增加内节点和叶子节点页堆栈,用以缓存空闲的数据页。B 树申请数据页从 B 树空闲页堆栈分配,在 B 树空闲页堆栈分配页前,需检查空闲页堆栈空闲页是否足够,必要时分配数据页填充空闲页堆栈,确保空闲页堆栈一定有足够的空闲页,释放数据页时,优先归还数据页到 B 树空闲页堆栈。0:不开启;1:开启
RANDOM_CRYPTO 空串 静态 指定数据库中使用的随机数算法所在的加密引擎名。未指定或指定的加密引擎不存在,又或者指定的加密引擎中不存在随机数算法,则使用 OPENSSL 提供的软件随机数算法
PTX_BI_PERCENTAGE 50 动态,系统级 RECYCLE POOL 中可用来分配给 PTX 前镜像页的缓冲区 BUFFER 比例。取值范围 1~100
GEO2_CONS_CHECK 0 动态,系统级 空间数据列是否进行约束检查。0:不进行;1:进行
ENABLE_FAST_REFCURSOR 1 动态,系统级 支持打开游标时指定 FAST 属性,同时支持 fast 游标作为输出参数返回上层调用。即当 ENABLE_FAST_REFCURSOR=1 时,可使用 OPEN WITH FAST……语法打开游标
HUGE_UNIQUE_CHECK 0 动态,会话级 设置 HUGE 表的 UNIQUE 约束或 PRIMARY KEY 约束和 UNIQUE 索引是否检查数据唯一性。0:不检查;1:检查
DEFERRED_SEGMENT_CREATION 0 动态,系统级 建表时是否启用延迟段分配功能。0:不启用;1:启用。HUGE 表、临时表、物化视图日志表不支持延迟段分配功能
PLN_INDEPENDENT 1 静态 指定构造计划时是否不再级联构造其引用过程/函数/包的计划并添加引用。0:级联构造计划并添加引用;1:不再级联构造计划并添加引用
USE_FORALL_ATTR 0 动态,会话级 是否使用 FORALL 语句的游标属性,0:不使用;1:使用
ALTER_TABLE_OPT 0 动态,会话级 是否对加列、修改列、删除列操作进行优化,0:全部不优化;1:全部优化;2:打开快速加列,对于删除列和修改列与 1 等效;3:打开快速加列,允许指定快速列默认值,其他功能与 2 时相同
对于 HUGE 表的修改,该设置为 0 或 1 时效果一样,均为采用查询插入实现
MAX_CLTN_MEM_SIZE 4 * 1024 动态,系统级 设置单个收集类型对象的最大内存空间,单位为 MB,取值范围为 128~4294967294
TMP_OPT_POLICY 1 静态 临时表是否开启簇空间管理优化策略。0:不开启;1:开启
TMP_MAX_RESERVE_EXTENT 50 静态 临时表开启簇空间管理优化策略后,临时表最大的簇预留大小。临时表释放簇时,若全局缓存中预留的簇大小超过该值,后续释放的簇将直接释放回文件系统,而不再预留在缓存中。单位为 MB,取值范围为 0~4096。取值为 0 时表示临时表不设置预留上限,可以预留所有被临时表释放的簇在缓存中。
DPC_CHECK_MP_INI 1 静态 是否检查并修改 mp.ini,1:检查并修改;0:不检查
DPC_CONN_POLICY 0 动态 系统级 DPC 链路的管理策略,按位取值,10 进制取值如下:0:无特殊策略;1:DPC AP 监听端口如果长时间没有监听到连接,则重建监听端口;2:阻塞模式的链接对于 EINPROGRESS 错误进行检查并重试
PLN_BUILD_WAIT_TIME 5 动态,系统级 等待计划构建的最长等待时间,仅在 ENABLE_PLN_PRESEARCH=1 时有效,取值范围 1~604800,单位秒
HP_DEF_LOCK_MODE 0 动态,系统级 新建分区表时默认的封锁模式。0:只封锁根表;1:细粒度的封锁模式
INFO5_DEGRADE 0 静态 是否允许集群 INFO5 字段降级,0:不允许降级;1:允许降级。缺省为 0
PAGE_CHECK_INDEXID 1 动态,系统级 是否校验数据页的 indexid 是否有效,非系统表数据页校验失败时会报错,系统表数据页校验失败时会 halt
2.1.1.1.9 预先装载表相关

表 2.10 dm.ini 中预先装载表相关参数

参数名 缺省值 属性 说明
LOAD_TABLE 空串 静态 在服务器启动时预先装载的普通表的完整表名,即"模式名"."表名",多个表之间用逗号分隔,最多可指定10个表
LOAD_HTABLE 空串 手动 在服务器启动时预先装载的HUGE表的表名。可设置多行,每行指定一个表。格式为 LOAD_HTABLE=<表名> 或 LOAD_HTABLE=<表名><列名>{,<列名>})。
例如:
LOAD_HTABLE=SYSDBA.T1
LOAD_HTABLE=T2
LOAD_HTABLE=T3(C1,C2)
2.1.1.1.10 客户端缓存相关

表 2.11 dm.ini 中客户端缓存相关参数

参数名 缺省值 属性 说明
CLT_CACHE_TABLES 空串 手动 指定可以在客户端缓存的表。表名必须带模式名前缀,如果表名或模式名中包含特殊字符,需要使用双引号包含。如果指定多个缓存表,须以逗号间隔。服务器最多支持指定100个可缓存表。为避免参数值太长导致INI文件分析困难,允许在INI文件中设置多行CLT_CACHE_TABLES参数
2.1.1.1.11 REDO 日志生成相关

表 2.12 dm.ini 中 REDO 日生成相关参数

参数名 缺省值 属性 说明
RLOG_BUF_SIZE 1024 静态 单个日志缓冲区大小,以日志页个数为单位。取值范围1~20480
RLOG_POOL_SIZE 256 静态 最大日志缓冲区大小,单位MB。取值范围1~4096
RLOG_PARALLEL_ENABLE 1 静态 是否启动并行日志。0:不启用,但是日志刷盘时可能合并为并行日志包刷盘;1:启用;2:一律不生成并行日志包
RLOG_IGNORE_TABLE_SET 1 动态,系统级 是否开启记录物理逻辑日志功能。1是,0否
RLOG_APPEND_LOGIC 0 动态,系统级 是否启用在日志中记录逻辑操作的功能,取值范围0、1、2、3、4
0:不启用;1、2、3、4启用。
1:如果有主键列,记录UPDATE和DELETE操作时只包含主键列信息,若没有主键列则包含所有列信息;
2:不论是否有主键列,记录UPDATE和DELETE操作时都包含所有列的信息;
3:记录UPDATE时包含更新列的信息以及ROWID,记录DELETE时只有ROWID;
4:只生成事务以及DDL相关的逻辑日志
注:DELETE和UDPATE操作日志中描述的“所有列的信息”不包含大字段列(如BLOB和CLOB类型的列)
RLOG_APPEND_SYSTAB_LOGIC 0 动态,系统级 是否启用在日志中记录系统表逻辑操作的功能。取值范围0、1、2。
0:不启用;
1:启用。如果有主键列,记录UPDATE和DELETE操作时只包含主键列信息,若没有主键列则包含所有列信息;
2:启用。不论是否有主键列,记录UPDATE和DELETE操作时都包含所有列的信息
RLOG_SAFE_SPACE 256 静态 安全的可用日志空间大小,单位MB。取值范围0~1024。当系统的可用日志空间小于这个值时,自动触发检查点释放日志空间
RLOG_RESERVE_THRESHOLD 0 动态,系统级 控制是否启动日志空间安全性检查。0:不启动;1~16384:如果系统有效日志量达到设定的值,则启动日志空间预留机制,以提升故障重启和DSC集群节点故障处理速度,单位为M
RLOG_RESERVE_SIZE 8192 静态 控制每次物理事务PTX操作需要预留的REDO空间大小,单位为日志页个数。取值范围0~102400,0表示不再检查剩余REDO可用空间是否安全,假定总是有富余。如果初始化库时开启了HUGE表日志(RLOG_GEN_FOR_HUGE=1),在RLOG_RESERVE_SIZE配置值大于0小于32767时(0值仍然不检查),会将其强制调整为32767,避免生成HUGE表日志时REDO可用空间不足
RLOG_SEND_APPLY_MON 64 静态 数据守护中,对于主库,用于指定统计最近N次主库到每个备库的归档发送时间;对于备库,用于指定统计最近N次备库重演日志的时间,N为此参数设置的值。取值范围1~1024
RLOG_COMPRESS_LEVEL 0 静态 日志压缩级别,取值范围0~10。0表示不压缩;1~9表示ZIP压缩算法,值越大压缩比越高,压缩速度越慢;10表示SNAPPY压缩算法
RLOG_ENC_CMPR_THREAD 4 静态 加密、压缩任务线程数,取值范围1~64
RLOG_PKG_SEND_ECPR_ONLY 0 静态 用于主备环境下控制加密压缩环境。0:同时发送原始日志数据和加密压缩后的日志到备库;1:只发送加密压缩后的日志到备库
RLOG_HASH_NAME 空串 静态 日志包完整性校验使用的HASH算法名称,默认为空,使用CRC算法进行校验
DPC_LOG_INTERVAL 0 动态,系统级 MP定时通知各节点生成相同时间点日志的时间间隔。取值范围0~1440(24小时)。以分钟为单位。0表示关闭定时通知功能。
此参数打开后,可支持使用归档恢复到指定时间点功能,在对系统性能有要求的情况下,可以调大或关闭此参数值
ELOG_REPORT_LINK_SQL 0 动态,会话级 是否记录DBLINK执行的SQL到服务器日志文件中。0:不记录;1:记录
RLOG_RAFT_NEED_WAIT 3 动态,系统级 主库是否进行日志包发送等待控制,仅RAFT主库生效。
0:主库不进行日志包发送控制;
1:任意备库存在日志堆积时,根据RLOG_RAFT_WAIT_TIME暂缓日志包发送;
2:存在日志堆积的备库个数超过备库总数的半数时,根据RLOG_RAFT_WAIT_TIME暂缓日志包发送;
3:任意归档状态有效的备库存在日志堆积,根据RLOG_RAFT_WAIT_TIME暂缓日志包发送;
4:存在日志堆积的归档状态有效的备库个数超过备库总数的半数时,根据RLOG_RAFT_WAIT_TIME暂缓日志包发送
RLOG_RAFT_WAIT_TIME 1000 动态,系统级 备库出现堆积后,RAFT主库延迟发送等待时间,取值范围0~3600000,单位毫秒。仅RAFT主库生效
LOG_FILE_POSTFIX_NAME log 动态,系统级 归档日志文扩展名,长度不超过10个字符。默认与数据库初始化参数RLOG_POSTFIX_NAME一致,RLOG_POSTFIX_NAME默认为log
RLOG_PKG_PAGE_CRC 0 静态 是否为REDO日志包每4K数据生成额外的CRC校验码。0:否;1:是
RLOG_LLOG_UPD_TO_DEL_INS 0 动态,系统级 设置当分区表允许行迁移且UPDATE操作发生了行迁移时,是否将UPDATE逻辑日志更改为DELETE+INSERT日志
0:否,保持UPDATE逻辑日志不变;
1:是,当分区表发生了行迁移时,将UPDATE逻辑日志更改为DELETE+INSERT日志
RLOG_LLOG_COMPRESS 0 动态,系统级 是否开启对INSERT逻辑日志的压缩功能。建议插入操作较多导致日志文件过大的情况下使用。0:不开启;1:开启
LOGMNR_PARSE_LOB 0 动态,系统级 LOGMNR包是否支持挖掘行外大字段逻辑日志。0:不支持;1:支持
LOGMNR_GEN_UNDO 0 动态,系统级 是否构造SQL_UNDO语句。0:否;1:是
当参数LOGMNR_GEN_UNDO=1时,目前仅支持INSERT/DELETE/UPDATE/FAST INSERT构造SQL_UNDO语句,规则如下:
(1)INSERT/FAST INSERT语句,SQL_UNDO为DELETE语句,DELETE语句中包含所有INSERT日志中的插入列;
(2)DELETE语句,SQL_UNDO为INSERT语句,INSERT语句中包含所有DELETE日志中的列,若DELETE日志中不包含列,则SQL_UNDO语句为NULL;
(3)UPDATE语句,SQL_UNDO为UPDATE语句,且SET语句中包含所有UPDATE日志中的更新列的老值,若UPDATE日志中不包含更新列的老值则用“?”问题替代
2.1.1.1.12 REDO 重做/重演相关

本节的 INI 参数为重做或重演所需参数。

其中,以 REDOS_开头的 INI 参数为备库上日志重演专用参数。只需要在备库上设置,主库不需要。

表 2.13 dm.ini 中 REDO 重做/重演相关参数

                                           
参数名 缺省值 属性 说明
REDO_PWR_OPT 1 静态 指定对于重做REDO日志的PWR优化方式,PWR日志优化指跳过已经写入磁盘数据页的REDO日志重演。0:不启用PWR日志优化;1:生成PWR日志,重做日志时启用PWR优化;2:生成PWR日志,但重做日志时不启用PWR优化
REDO_IGNORE_DB_VERSION 0 静态 启动重做REDO日志时,是否检查版本信息。0:忽略版本检查,直接使用新版本重做REDO日志;1:正常检查版本,不兼容的库会报错,需要使用对应版本启动并正常关闭后,再用新版本执行码启动
REDO_BUF_SIZE 64 静态 日志加载缓存大小,系统故障重启时根据此参数分配内存,并将REDO日志从文件读取到此缓存。取值范围0~512,单位MB。0表示无限制
REDOS_BUF_SIZE 1024 动态,系统级 待重演日志堆积的内存限制,堆积的日志缓冲区占用内存超过此限制,则新的日志将会被延迟加入重演队列,等待重演释放部分内存后再加入。单位MB,取值范围0~65536。0表示无内存限制。 REDOS_BUF_SIZE和REDOS_BUF_NUM同时起作用,只要达到一个条件即会触发延迟处理。
REDOS_BUF_NUM 4096 动态,系统级 待重演日志缓冲区允许堆积的数目限制,超过限制则新的日志将会被延迟加入重演队列,等待堆积数减少后再加入。以个数为单位,有效值范围0~9999。0表示无限制。
REDOS_BUF_SIZE和REDOS_BUF_NUM同时起作用,只要达到一个条件即会触发延迟处理。
REDOS_MAX_DELAY 1800 静态 备库重演日志缓冲区的时间限制,超过此限制则认为重演异常,服务器自动宕机,防止日志堆积、主库不能及时响应用户请求。单位秒,取值范围0~7200。0表示无重做时间限制
REDOS_PARALLEL_NUM 11 静态 指定故障重启、还原恢复、备库重演场景下,并行日志重演的线程数。取值范围1~256。1表示不进行并行日志重演。建议该参数值和BUFFER_POOLS相等,或者取BUFFER_POOLS / N(N为整数,且BUFFER_POOLS / N的余数为0)。当BUFFER_POOLS是根据BUFFER的配置情况进行自动调整(确保每个BUFFER POOL中至少存放3000个数据页)时,建议以BUFFER_POOLS内存值为准来配置REDOS_PARALLEL_NUM
REDOS_RPKG_PARSE_NUM 16 静态 表示并行解析日志包的线程数。取值范围 1~256
REDOS_RPKG_FILL_NUM 64 静态 表示重演任务数组中最多允许填充的日志包个数。取值范围 1~320
REDOS_ENABLE_SELECT 1 静态 指定是否允许备库执行查询操作。
0:DMDPC环境下仅允许备库查询V$动态视图;其他环境下允许备库查询V$动态视图、系统表和系统视图,其他的查询操作均不支持。
1:允许备库执行所有查询操作。
设置该参数为0时,会在一定程度上提升备库的重演性能
REDOS_FILE_PATH_POLICY 0 静态 备库重演日志时表空间数据文件路径策略。0:数据文件创建到SYSTEM_PATH路径下;1:数据文件截掉根路径后,在SYSTEM_PATH下生成相同的路径结构
REDOS_PAGE_CRC_CHECK 0 动态,系统级 是否开启主备页校验功能。0:否;1:是
2.1.1.1.13 事务相关

表 2.14 dm.ini 中事务相关参数

参数名 缺省值 属性 说明
ISOLATION_LEVEL 1 静态 系统默认隔离级别。1:读提交;3:可串行化
DDL_WAIT_TIME 10 动态,会话级 DDL操作的锁超时时间,单位秒。取值范围0~604800
BLDR_WAIT_TIME 10 动态,会话级 批量装载时锁超时时间,单位秒。取值范围0~604800
MPP_WAIT_TIME 10 动态,会话级 设置MPP下默认的封锁等待超时,单位秒,取值范围0~600
FAST_RELEASE_SLOCK 1 动态,系统级 是否启用快速释放S锁,0:不启用;1:启用,语句块中所有的SQL语句执行完成后快速释放;2:语句块中每条SQL都尝试快速释放
SESS_CHECK_INTERVAL 3 动态,会话级 循环检测会话状态的时间间隔,单位秒。取值范围1~60
LOCK_TID_MODE 1 动态,系统级 SELECT FOR UPDATE封锁方式。0:结果集记录小于100行,直接封锁TID,否则升级为表锁; 1:不升级表锁,一律使用TID锁
LOCK_TID_UPGRADE 0 动态,系统级 0:事务启动时,用自己的事务号生成的TID锁,以X封锁;DELETE/UPDATE记录触发的TID锁,优先使用S封锁,只有在多个事务同时更新同一行记录场景下,升级为X锁。1:所有TID锁以X方式封锁
NOWAIT_WHEN_UNIQUE_CONFLICT 0 静态 插入数据时,如果和未提交数据有UNIQUE约束的冲突,是否等待未提交事务结束,0:等待,直至未提交事务结束;1:不等待,立即返回错误
UNDO_EXTENT_NUM 4 静态 指定每个工作线程回滚页的使用上限,超过时启动回收机制,单位为簇的个数。取值范围1~8192
MAX_DE_TIMEOUT 10 动态,会话级 C、JAVA外部函数的执行超时时间,单位秒。取值范围1~3600
TRX_RLOG_WAIT_MODE 0 静态 事务提交时的日志刷盘等待模式。0:保持现有模式;1:主库模式先等待日志刷盘完成,再释放事务上的资源
TRANSACTIONS 75 静态 指定一个会话中可以并发的自治事务数量。取值范围1~1000
MVCC_RETRY_TIMES 5 静态 指定发生MVCC冲突时的最大重试次数。取值范围0~4294967294
注:MPP下此参数无效,发生MVCC冲突时将直接报错
MVCC_PAGE_OPT 1 动态,系统级 控制是否启动数据页可见性优化处理。0:关闭数据页可见性优化;1:启用数据页可见性优化
ENABLE_FLASHBACK 0 动态,系统级 是否启用闪回查询,0:不启用;1:启用
UNDO_RETENTION 90 动态,系统级 事务提交后回滚页保持时间,单位秒。取值范围0~86400
注:类型为DOUBLE,可支持毫秒
PARALLEL_PURGE_FLAG 0 静态 是否启用并行事务清理,0:不启用;1:启用
PSEG_RECV 3 动态,系统级 系统故障重启时,对活动事务和已提交事务的处理方式。
0:跳过回滚活动事务和PURGE已经提交事务的步骤。在回滚表空间出现异常、损坏、系统无法正常启动时,可将PSEG_RECV设置为0,让系统启动;但存在一定风险,未提交事务的修改将无法回滚,破坏事务的原子性;另外,已提交未PURGE的事务,将导致部分存储空间无法回收;
1:回滚活动事务并PURGE已经提交事务;
2:延迟PURGE已提交事务,延迟回滚活动事务;
3:回滚活动事务,延迟PURGE已提交事务
ENABLE_IGNORE_PURGE_REC 2 动态,会话级 当返回EC_RN_NREC_PURGED(-7120)错误(回滚记录版本太旧,无法获取用户记录)时的处理策略;0:报错;1:忽略这一条记录,继续执行;2:报错并生成日志;3:忽略这一条记录,继续执行,并生成日志
注意:配置为1或3时,忽略了EC_RN_NREC_PURGED(-7120)错误信息,原本报错的语句会继续执行。为了避免破坏数据一致性,只有只读事务允许忽略EC_RN_NREC_PURGED错误。如果当前事务已经修改过数据,直接忽略ENABLE_IGNORE_PURGE_REC参数设置,仍然返回EC_RN_NREC_PURGED错误;如果当前事务没有修改数据,则忽略EC_RN_NREC_PURGED错误,但是会进行延迟检查,一旦后续操作修改数就会触发EC_RN_NREC_PURGED错误。
引发数据一致性问题说明:比如执行update语句时,预期更新2条记录,但实际只更新了1条记录,另外1条记录由于忽略了EC_RN_NREC_PURGED错误,既没有报错,也没有更新。
ROLL_ON_ERR 0 动态,系统级 服务器执行出错时的回滚策略选择,0:回滚当前语句;1:回滚整个事务
XA_TRX_IDLE_TIME 60 动态,系统级 允许未PRE-COMMITTED的XA事务活动的时间,单位秒。取值范围30~36000
XA_TRX_LIMIT 1024 静态 XA事务数量上限。取值范围1024~65535
ENABLE_TMP_TAB_ROLLBACK 1 动态,系统级 临时表操作是否生成回滚记录,0:不生成;1:生成。置为0时,有三项限制:一是临时表的DML操作无法回滚;二是不允许对包含唯一索引的临时表进行增删改操作;三是不允许对临时表创建唯一索引、主键约束和唯一约束
LOCK_DICT_OPT 2 静态 DICT封锁优化,事务提交或回滚时,不真正释放表上IS锁和IX锁对象。0:不优化;1:单机环境优化,DSC集群环境不优化;2:单机、集群环境都优化
LOCK_DICT_HASH_SIZE 10000 静态 设置封锁系统HASH表大小,取值范围1024~65534
TRX_DICT_LOCK_NUM 64 动态,系统级 开启LOCK_DICT_OPT优化场景下最多可缓存的IX/IS类型字典锁对象数量。取值范围1~100000
DEADLOCK_CHECK_INTERVAL 1000 动态,系统级 控制死锁检测间隔时间,单位毫秒,取值范围100~60000
LOB_MVCC 1 动态,系统级 是否支持LOB数据的多版本并发控制访问。0:更新/删除语句会对涉及的大字段进行封锁;1:更新/删除语句不对涉及的大字段进行封锁
COMMIT_WRITE IMMEDIATE,WAIT 动态,系统级 格式为IMMEDIATE|BATCH,WAIT|NOWAIT,第一个参数可以取IMMEDIATE/BATCH,目前仅支持语法解析,无实际作用;第二个参数可以取WAIT/NOWAIT,WAIT表示事务提交等待事务刷盘,NOWAIT表示事务提交不等待事务刷盘
COMMIT_BATCH 1 动态,系统级 用于控制是否开启事务组提交(GROUP COMMIT)以及开启后触发事务组提交的事务数。 参数取值范围1~1024,取值为1时表示关闭事务组提交功能,取值大于1时表示开启事务组提交功能,此时该参数取值还表示触发事务组提交的事务数。 该参数在COMMIT_WRITE = IMMEDIATE,WAIT时生效,COMMIT_WRITE = IMMEDIATE,NOWAIT 时无效
COMMIT_BATCH_TIMEOUT 1 动态,系统级 事务批量提交超时时间,单位MS,取值范围0~1000。COMMIT_BATCH大于 1时生效。事务发起提交请求以后,在COMMIT_BATCH_TIMEOUT时间内没有触发合并写入,则强制启动REDO日志刷盘。 该参数在COMMIT_WRITE=IMMEDIATE,WAIT时生效,COMMIT_WRITE=IMMEDIATE,NOWAIT时无效。
DPC_2PC 1 静态 DMDPC系统是否采用两阶段提交策略及是否使用优化方案。
0:关闭两阶段提交,没有故障的情况下直接提交效率更高,但是出现故障就无法保证事务一致性了;
1:启用两阶段提交;
2或3:启用两阶段提交,启用trxid缓存,启用snap_seq缓存方案优化;
4或5:启用两阶段提交,启用trxid缓存,启用snap_seq本地优化;
6或7:启用两阶段提交,启用trxid缓存,启用snap_seq缓存,启用snap_seq本地优化
SWITCH_CONN 0 动态,系统级 JDBC客户端是否进行连接切换,执行过程中发现计划只和一个BP相关时,客户端是否切换到该BP执行。
0:否;1:是。
此参数需要和JDBC驱动/dm_svc.conf配合使用,只用于BS模式
UNDO_BATCH_FAST 0 动态,系统级 是否启用批量插入快速回滚功能,0: 不启用; 1: 启用
FLDR_LOCK_RETRY_TIMES 0 动态,系统级 指定快速装载产生死锁后自动重试的次数,取值范围0~4294967294,默认值为0表示不自动重试
DPC_TRX_TIMEOUT 10 动态,会话级 用于DMDPC中,表示事务等待超时时间,单位秒。取值范围0~604800
SESSION_READONLY 0 动态,系统级 用于设置系统中用户会话SESSION对数据库的读写操作。1:只读;0:可读可写。 对于当前会话,用户还可通过执行SP_SET_SESSION_READONLY (1/0)来重新设置当前会话的读写操作,1:只读;0:可读可写
SELECT_LOCK_MODE 0 动态,系统级 语句执行时相关表的上锁方式。0:集中上锁;1:查询在操作符中上锁,相比集中上锁的方式,封锁范围较小、频率较高,适用于期望查询语句不阻塞DDL,且能够接受查询语句被打断的场景
注:
1. 不支持MPP环境
2. 若不是DPC环境,那么设置PARALLEL_POLICY参数为1或2时本参数将失效
3. 当本参数设置为1时,若TRUNC_CHECK_MODE参数设置为0,则会被调整为TRUNC_CHECK_MODE=1
ENABLE_SEC_RPTR 0 静态 二级索引是否附加回滚记录地址以优化可见性判断。0:不启用;1:启用该优化,缺省值为0。需要注意,启用该参数后新创建的二级索引(视图SYSOBJECTS INFO1字段第八位设置为1)在执行版本降级前需要手动删除
HFI_HP_MODE 1 静态 事务型分区HUGE表插入时的并发策略。0:封锁子表策略,各子表之间可以并发插入,但可能出现死锁;1:封锁根表策略,各子表之间不能并发,但不会出现死锁
FINS_UNDO_OPT 1 静态 是否支持批量插入回滚的优化处理。0:不支持;1:支持
TRX_VIEW_POLICY 0 动态,系统级 设置事务可见性视图策略。0:脚本中的SQL语句不更新事务可见性视图;1:脚本中的SQL语句更新事务可见性视图
HP_DDL_LOCK_MODE 0 动态,系统级 控制分区表DDL封锁策略,是否开启优化,允许部分DDL与DML并发执行。0:不开启优化,与现有策略保持一致;1:开启优化
支持的DDL:新增分区、删除分区、合并分区、拆分分区
限制说明:(1)若DDL与DML操作的子表不存在交集,则允许并发执行;(2)不支持MPP、并行(DPC除外)
UNDO_SPACE 0 动态,系统级 用于限制已提交(COMMIT)未清理(PURGE)事务所占用的回滚表空间的总空间大小,单位GB,取值范围0~4294967294。0表示不限制;非0值表示在回滚表空间使用量达到该值时,即使已提交事务的生存期不足UNDO_RETENTION,系统也会按提交时间先后,强制启动清理(PURGE),直到回滚表空间的使用量小于设定值。
注:回滚页使用量的精确统计代价较高,系统使用统计近似值,开启本参数后实际的回滚表空间的占用量和本参数设定值存在一定的误差,这是正常现象
UNDO_SPACE 0 动态,系统级 用于限制已提交(COMMIT)未清理(PURGE)事务所占用的回滚表空间的总空间大小,单位GB,取值范围0~4294967294。0表示不限制;非0值表示在回滚表空间使用量达到该值时,即使已提交事务的生存期不足UNDO_RETENTION,系统也会按提交时间先后,强制启动清理(PURGE),直到回滚表空间的使用量小于设定值。
注:回滚页使用量的精确统计代价较高,系统使用统计近似值,开启本参数后实际的回滚表空间的占用量和本参数设定值存在一定的误差,这是正常现象
DDL_PURGE_POLICY 0 静态 包含DDL相关事务在执行COMMIT操作以后是否立即启动PURGE选项。0:不立即启动;1:立即启动
LONG_TRX_VISIBLE 0 动态,会话级 使用TRX_VIEW_MODE=1判断事务可见性时遇到CMTARR被覆盖而无法确定可见性的处理策略,取值为0、1、2、4、8或这些值的任意组合。
0:报错“记录可见性无法确定”;
1:当前事务不是长事务时忽略报错;
2:取值包含1时是否认为记录不可见,不指定则认为可见;
4:当前事务是长事务时忽略报错;
8:取值包含4时是否认为记录不可见,不指定则认为可见。
16:发生表、分区、分区组、表空间迁移导致无法确定可见性时是否禁用强制可见
MAL_WAIT_TIMEOUT 0 动态,系统级 MPP下删除更新等待的超时报错时间,单位秒。取值范围为0~864000,取缺省值0时表示关闭超时检测
2.1.1.1.14 安全相关

表 2.15 dm.ini 中安全相关参数

参数名 缺省值 属性 说明
ENABLE_ENCRYPT 0 静态 用于通信加密。基于传输层的SSL协议通信加密所采用的方式。取值0、1、2和4。
0:不开启SSL认证和SSL通信加密;
1:开启SSL认证和SSL通信加密;
2:开启SSL认证但不开启SSL通信加密;
4:开启SSL加密不开启SSL认证
取值1、2或4时,如果服务器SSL环境没有配置则服务器无法正常启动,如果客户端SSL环境没有配置则无法连接服务器
MIN_SSL_VERSION 0 静态 允许SSL连接的最低版本。0:支持所有版本;0X0301:TLSV1;0X0302:TLSV1.1;0X0303:TLSV1.2;0X0304:TLSV1.3。
仅当ENABLE_ENCRYPT非0时有效
CLIENT_UKEY 0 静态 是否采用UKEY身份验证。0:支持所有登录方式,是否采用UKEY验证由客户端驱动。当客户端输入UKEY名称和UKEY则采用UKEY验证,否则不使用UKEY验证;1:客户端强制使用UKEY验证
ENABLE_UDP 0 静态 是否支持UDP协议。0:否;1:单发单收;2:多发多收
UDP_MAX_IDLE 15 静态 UDP最大等待时间,单位秒,超过则认为连接断开。取值范围5~60
UDP_BTU_COUNT 8 静态 UDP最大不等待连续发送消息块数,当不连续差值大于它时则等待发送。取值范围4~32
ENABLE_IPC 0 静态 是否支持IPC协议。0:否;1:是
AUDIT_FILE_FULL_MODE 3 静态 审计文件存储剩余空间不足时的处理方式:
1:审计文件创建失败,卡住
2:审计文件创建失败,不再审计
3:结合1和2,先尝试删老审计文件,再创建审计文件,失败则不再审计
AUDIT_FLUSH_LEVEL 0 动态,系统级 审计记录刷盘方式,仅当打开审计开关时有效。打开审计开关的方法请参考《DM8安全管理》。 0:语句级刷盘,一条语句执行结束进行一次审计记录刷盘操作;1:事务级刷盘,一个事务执行结束执行一次审计日志刷盘操作;2:延迟刷盘,审计记录缓存满时(缓存大小固定为8MB)自动刷盘
AUDIT_KEEP_DAYS 0 静态 审计文件最小保留天数。取值范围0~3660,单位天。即使达到审计文件总存储空间大小限制(即AUDIT_SPACE_LIMIT设置的值)也不会删除在指定保留天数内的审计文件。只有最老审计日志文件的保留天数超过AUDIT_KEEP_DAYS才会根据AUDIT_FILE_FULL_MODE设定值来处理老的审计文件
AUDIT_SPACE_LIMIT 0 静态 审计文件总存储空间大小限制,单位MB。取值范围204800~1024*1024,0表示不限制
AUDIT_MAX_FILE_SIZE 100 动态,系统级 单个审计文件的最大大小,单位MB。取值范围8~4096
AUDIT_IP_STYLE 0 静态 审计记录IP字段显示格式。 0:仅显示IP 1:显示IP和主机名
MSG_COMPRESS_TYPE 2 静态 与客户端的通信消息是否进行消息压缩,0:不压缩;1:压缩;2:系统自动决定每条消息是否压缩
LDAP_HOST 空串 静态 LDAP服务器IP
COMM_ENCRYPT_NAME 空串 静态 用于通信加密。基于应用层的消息包加密的开关。
空串:不加密;
算法名:按照指定的算法名进行加密。如果给的加密算法名错误,则使用加密算法DES_CFB。DM支持的加密算法名可以通过查询动态视图V$CIPHERS获取
COMM_VALIDATE 1 动态,系统级 是否对消息进行校验。0:不检验;1:检验, 不记录错误内容;2: 检验, 记录错误消息内容
MESSAGE_CHECK 0 动态,系统级 是否对通信消息启用消息体校验(只有当消息的发送端和接收端都配置为1才启用通信体校验)。0:不启用;1:启用
ENABLE_EXTERNAL_CALL 0 静态 是否允许创建或执行外部函数。0:不允许;1:允许
EXTERNAL_JFUN_PORT 6363 动态,系统级 服务器执行JAVA外部函数时连接DMAGENT使用的端口号,DMAGENT的监听端口,监听方配置此参数,取值范围128~65534,发起连接端的端口在1024~65535之间随机分配
EXTERNAL_AP_PORT 4236 动态,系统级 执行C外部函数或AP备份还原使用的AP的端口号,DMAP的监听端口,监听方配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
EFC_USE_AP 1 动态,系统级 是否允许结构化的C外部函数在DMSERVER内部执行。1表示使用常规DMAP方式通信;0表示不使用DMAP,直接在DMSERVER内部调用执行
ENABLE_PL_SYNONYM 0 动态,系统级 是否可以通过同义词执行非系统用户创建的包或者存储过程。1是,0否。若设置为0,在解析过程/包名时,如果借助了同义词,则这些对象要么是系统内部创建的,或者其创建者必须为系统用户,否则一律报错
FORCE_CERTIFICATE_ENCRYPTION 0 静态 非加密通讯的情况下是否开启用户名密码强制证书解密。1是,0否。 私钥证书DM_LOGIN.PRIKEY需要提前拷贝到INI参数SYSTEM_PATH指定的目录下
REGEXP_MATCH_PATTERN 0 动态,会话级 指定正则表达式的匹配模式。0:支持非贪婪匹配;1:仅支持贪婪匹配
UNIX_SOCKET_PATHNAME 空串 静态 LINUX系统中,当服务器与客户端之间使用UNIXSOCKET通信协议时,用于指定客户端连接的socket文件路径
RESOURCE_FLAG 0 静态 设置用户资源限制项CONNECT_TIME和CONNECT_IDLE_TIME的时间单位。1:秒;0:分钟。
修改该时间单位并不会同步调整限制值,用户需要手动调整已设置的CONNECT_TIME和CONNECT_IDLE_TIME限制项配置值来保持含义不变,因此建议谨慎调整该INI参数
IPV6_ZID_FLAG WINDOWS下为0,LINUX下为1 动态,系统级 是否自动获取本地网卡标识,当使用的IP地址为不带有网卡标识(ZONE ID)的IPV6 LINK-LOCAL地址时,会进行网卡接口自动适配。0:关闭;1:打开。
IPV6_ZID 空串 动态,系统级 允许用户配置使用的网卡标识(ZONE ID),最多可以配置20个,最大长度为128.各网卡接口之间用”,”分隔,读取时会忽略每个网卡标识的前导空格和尾随空格。
GRANT_SCHEMA 0 静态 是否开启授予和回收模式权限功能。0:否;1:是
PASSWORD_VERIFICATION 0 动态,系统级 用户修改数据库身份验证模式下自己的口令时,是否强制需要提供原口令。0:不需要;1:需要
AUTH_ENCRYPT_NAME 空串 静态 创建用户时,处理用户口令加密的HASH算法名
2.1.1.1.15 兼容性相关

表 2.16 dm.ini 中兼容性相关参数

                                               
参数名 缺省值 属性 说明
BACKSLASH_ESCAPE 0 静态 是否需要对字符串中的反斜杠使用词法分析的反斜杠转义处理。0:否;1:是
STR_LIKE_IGNORE_MATCH_END_SPACE 1 动态,会话级 LIKE运算中是否忽略匹配串的结尾0。0:不忽略;1:忽略
CLOB_LIKE_MAX_LEN 31 静态 LIKE语句中CLOB类型的最大长度,单位KB,取值范围8~102400
EXCLUDE_DB_NAME 空串 静态 服务器可以忽略的数据库名列表,各数据库名以逗号“,”隔开,数据库名不需要加引号
MS_PARSE_PERMIT 0 静态 是否支持MS SQLSERVER的语法。
0:不支持;1:支持;
2:在MS_PARSE_PERMIT =1的基础上,兼容MS SQLSERVER的查询项中支持“标识符=列名”或“@变量名=列名”用法。
注:当COMPATIBLE_MODE=3时,若MS_PARSE_PERMIT置为0,系统自动将其实际值改为2
COMPATIBLE_MODE 0 静态 是否兼容其他数据库模式。0:不兼容,1:兼容SQL92标准,2:部分兼容ORACLE,3:部分兼容MS SQL SERVER,4:部分兼容MYSQL,5:兼容DM6,6:部分兼容TERADATA,7:部分兼容POSTGRES
注:对COMPATIBLE_MODE的修改会影响数据存储和操作结果,修改须慎重;具体可咨询达梦技术服务人员
ORA_DATE_FMT 0 静态 指定DATE类型格式。
0:DATE类型使用NLS_TIMESTAMP_FORMAT格式,此时动态修改NLS_DATE_FORMAT时,实际修改的是NLS_TIMESTAMP_FORMAT;
1:DATE类型使用NLS_DATE_FORMAT格式。
注:仅当COMPATIBLE_MODE为2时有效,建议COMPATIBLE_MODE为2将ORA_DATE_FMT置为1
ORA_REVERSE_MODE 1 静态 指定ORACLE兼容模式下REVERSE()函数的反转规则。0:按字节反转,与ORACLE相同,与旧版本兼容ORACLE模式下的规则保持一致;1:按字符反转,与DM默认的REVERSE()规则一致。
注:仅当COMPATIBLE_MODE为2时有效
JSON_MODE 0 静态 JSON语法解析兼容模式。0:兼容ORACLE;1:兼容PostgreSQL;2:兼容MYSQL
JSONB_CHECK_MODE 1 动态,系统级 所生成的JSONB数据的校验模式。0:不校验;1:CRC32校验
ARGUMENT_MATCHING_MODE 1 动态,系统级 过程/函数参数匹配规则。
0:顺序匹配,但需要保留足够的值能分配个不含默认值的参数;
1:顺序匹配
USE_JSON_DATATYPE 1 静态 控制内建数据类型JSON是否启用。0: 不启用; 1: 启用
DATETIME_FMT_MODE 0 动态,系统级 是否兼容ORACLE的五种日期时间类型的默认日期时间格式。0:不兼容;1:兼容
注:此参数被动态修改后仅影响新生成的会话
DOUBLE_MODE 0 静态 计算DOUBLE类型的散列值时,是否只使用6个字节。0:否;1:是
CASE_COMPATIBLE_MODE 1 动态,系统级 涉及不同数据类型的CASE运算,是否需要兼容ORACLE的处理策略。
0:不兼容;
1:兼容,本模式下,当函数DECODE()中的多个CASE类型不一致时,DECODE会从其中选择一个类型进行匹配;
2:兼容,本模式下,当函数DECODE()中的多个CASE类型不一致时,DECODE根据第一个CASE的类型来决定匹配类型;
4:兼容,本模式下,当CASE WHEN分支中的CASE类型不一致时,进行报错。
支持使用上述有效值的组合值,如5表示同时进行1和4的优化。
注:取值1和2是互斥的,取值为组合值3时,会根据系统内部逻辑判断处理为1或者2
XA_COMPATIBLE_MODE 0 动态,系统级 XA事务处理兼容策略。0:不兼容,返回达梦的错误码;1:兼容ORACLE的处理方式,返回和ORACLE一样的报错码;2:兼容MYSQL的XA事务处理策略,取值2时不支持使用DBMS_XA系统包
EXCLUDE_RESERVED_WORDS 空串 静态 语法解析时,需要去除保留字身份的保留字列表,保留字之间用逗号分隔。去除身份的保留字将变成普通字符串
COUNT_64BIT 1 动态,会话级 COUNT和SUM集函数的值是否设置为BIGINT。0:否;1:是
CALC_AS_DECIMAL 0 静态 0:表示整数类型的除法、整数与字符或BINARY串的所有四则运算,结果都处理成整数;
1:表示将整数类型的除法、整数与字符或BINARY串的除法转换为DECIMAL处理;
2:表示将整数类型的除法、整数与字符或BINARY串的所有四则运算都转换为DECIMAL处理;
3:所有涉及整型的四则运算全部转换为DECIMAL处理。
CMP_AS_DECIMAL 0 静态 0:默认值,表示不对字符串与整型的比较结果类型做任何修改 1:表示字符串与整型转换为BIGINT比较数据溢出时,则转换为DEC进行比较 2:表示字符串与整型的比较强制转换为DEC进行比较
CAST_VARCHAR_MODE 1 动态,系统级 在字符串向整型转换进行比较时,是否将溢出值转为特殊伪值。0:否;1:是
PL_SQLCODE_COMPATIBLE 0 静态 默认值为0;如果设置为1,则PL的异常处理中,SQLCODE的错误码值需要尽量与ORACLE一致
LEGACY_SEQUENCE 0 动态,系统级 序列兼容参数,0:与ORACLE兼容;1:与旧版本DM兼容,不推荐使用
DM6_TODATE_FMT 0 静态 TO_DATE中的HH格式小时制,0:12小时制; 1:24小时制(与DM6兼容)
MILLISECOND_FMT 1 动态,系统级 TO_CHAR的结果是否显示小数秒值。0:不显示;1:显示。仅在DATETIME_FMT_MODE和NLS_XXX相关参数均为默认值时有效
NLS_DATE_FORMAT 静态 指定DATE类型的显示格式,包括DATE列INSERT/SELECT使用的格式、CAST 转换采用的格式。不设置时格式取决于DATETIME_FMT_MODE参数
NLS_TIME_FORMAT 静态 指定TIME类型的显示格式,包括TIME列INSERT/SELECT使用的格式、CAST 转换采用的格式。不设置时格式取决于DATETIME_FMT_MODE参数
NLS_TIMESTAMP_FORMAT 静态 指定TIMESTAMP类型的显示格式,包括TIMESTAMP列INSERT/SELECT使用的格式、CAST 转换采用的格式。不设置时格式取决于DATETIME_FMT_MODE参数
NLS_TIME_TZ_FORMAT 静态 指定TIME_TZ类型的显示格式,包括TIME_TZ列INSERT/SELECT使用的格式、CAST 转换采用的格式。不设置时格式取决于DATETIME_FMT_MODE参数
NLS_TIMESTAMP_TZ_FORMAT 静态 指定TIMESTAMP_TZ类型的显示格式,包括TIMESTAMP_TZ列INSERT/SELECT使用的格式、CAST 转换采用的格式。不设置时格式取决于DATETIME_FMT_MODE参数
PK_MAP_TO_DIS 0 动态,系统级 专门用于MPP环境中,在建表语句中指定了PK列,没有指定分布方式时,是否自动将PK列作为HASH分布列,将整个表转为HASH分布。1是;0否
MY_STRICT_TABLES 1 静态 仅在COMPATIBLE_MODE=4时有效。每bit控制一种如下情况执行失败时的处理策略:第一位控制数据超长;第二位控制字符类型转换数值类型(包括INT、SMALLINT、TINYINT、BIGINT、DEC、FLOAT、DOUBLE);第三位控制除0。每bit为0代表兼容mysql容错,为1代表相应策略报错。
0:最大容错,数据超长时自动截断;字符类型转换数值类型失败时,转换为0;除0时返回NULL;
1:数据超长时报错;
2:字符类型转换数值类型失败时报错;
4:除0时报错;
支持上述有效值的组合值,如7表示数据超长时报错、字符类型转换数值类型失败时报错、除0时报错;
IN_CONTAINER 0 静态 当前数据库是否运行于容器中,0:否;1:是。若当前数据库运行于容器中,则将根据CGROUP的限制规则分配CPU和内存资源
DROP_CASCADE_VIEW 0 动态,会话级 删除表或者视图的时候级联删除视图,0:将待删除的表或视图与其上的视图的依赖关系进行剥离,只删除表或者视图;1:将表或视图作为其上建立的视图的依赖项,删除表或者视图时根据语句的CASCADE选项进行相应处理。当COMPATIBLE_MODE=1时,DROP_CASCADE_VIEW的实际值为1
NUMBER_MODE 0 静态 控制对NUMBER、FLOAT、REAL、DOUBLE PRECISION类型在数据定义(包括表列定义、脚本参数定义等)时的处理方式;对于外部函数的返回值及其参数类型,忽略NUMBER_MODE的配置。0:采用DM现有的处理方式;1:兼容ORACLE的处理方式
NLS_SORT_TYPE 0 动态,会话级 指定自然语言的排序方式。0:按默认字符集二进制编码排序;1:按中文拼音排序;2:按中文笔画排序;3:按中文部首排序;4:按泰文排序;5:按韩文排序
仅字符集为UTF-8的数据库支持自然语言按泰文排序
PROXY_PROTOCOL_MODE 0 动态,系统级 控制代理模式的开启,0:不开启;1:开启。 开启代理模式后, 服务器才可以解析代理向服务器发送的代理协议消息, 从而才可以获得真实客户端IP, 并且设置限制连接的IP后会检查真实客户端IP是否有效, 查询V$SESSIONS中的CLNT_IP时也会显示真实客户端IP地址
SPACE_COMPARE_MODE 0 静态 是否在查询语句中比较字符串后缀空格。0:维持原有策略;1:进行比较
DATETIME_FAST_RESTRICT 1 动态,系统级 TO_DATE(字符串,FAST格式)或ALTER SESSION设置了DATE的格式为FAST格式后,CAST 字符串 AS DATE时:0: 字符串可以带时间;1.字符串不允许带时间,带时间会报错。其中FAST格式(标准格式)为:YYYY-MM-DD、 YYYY/MM/DD、YYYY:MM:DD、YYYY.MM.DD
BASE64_LINE_FLAG 1 动态,系统级 BASE64编码时,是否每满64个字节加换行符ODOA\N\R两个字节。0:否;1:是
NVARCHAR_LENGTH_IN_CHAR 1 静态 列定义中的NVARCHAR和NVARCHAR2数据类型是否自动转换为VARCHAR(N CHAR)数据类型,NCHAR类型是否自动转换为CHAR(N CHAR)类型。0:否;1:是
PARAM_DOUBLE_TO_DEC 0 动态,系统级 是否支持将绑定参数中数据类型为FLOAT/DOUBLE的输入参数转换为DEC精确数据类型,0:不支持转换;1:支持转换,并进行预检查,预检查成功则转换为DEC,否则保持原始数据类型;2:支持转换,不进行预检查,若转换失败则报错
目前仅支持单行绑定参数转换,多行暂不支持
INSERT_COLUMN_MATCH 0 动态,系统级 指定插入操作的列匹配规则,0:使用DM的列匹配规则;1:兼容ASTER的列匹配规则;2:兼容Postgres的列匹配规则。
值为1时,值插入支持列使用逗号占位符,查询插入暂不支持使用逗号占位符。
值为1或2时,支持尾部列不完全匹配插入。
若参数打开再关闭,如果语句已生成执行计划则需要手动清理,否则当列不匹配时,预期失败实际成功
AUTO_INCREMENT_INCREMENT 1 动态,会话级 用于AUTO_INCREMENT自增列中。表示AUTO_INCREMENT的步长。取值范围1~65535
AUTO_INCREMENT_OFFSET 1 动态,会话级 用于AUTO_INCREMENT自增列中。表示AUTO_INCREMENT的基准偏移。取值范围1~65535
NO_AUTO_VALUE_ON_ZERO 1 动态,会话级 用于AUTO_INCREMENT自增列中。表示AUTO_INCREMENT列插入0时,是否自动插入自增的下一个值。取值范围0、1。0否,插入0;1是,插入自增值
IFUN_DATETIME_MODE 0 静态 指定返回值或参数为TIMESTAMP/TIMESTAMP WITH TIME ZONE类型的系统函数的最大精度。0:老版本模式,最大精度为6;1:新版模式,最大精度为9
注:IFUN_DATETIME_MODE为0时,毫秒精度最大为6。为了向下兼容老版本,将字符串转换为时间类型时,当毫秒精度大于6且小于等于9时直接截断处理,仅保留前6位有效精度;若定义时间类型的精度大于6且小于等于9时,大于6的部分用0补齐;
IFUN_DATETIME_MODE为1时,老版本客户端连接新版本服务器可能会导致版本不匹配报错
CAST_DIGIT_MODE 1 动态,系统级 当弱数值类型的列与强数值类型的常量比较时,是否将常量的类型转为列的类型。0:否;1:是。该参数支持的数据类型,按由弱到强的顺序依次为TINYINT、SMALLINT、INT、BIGINT、DECIMAL、FLOAT、DOUBLE、DATE和TIMESTAMP
VIEW_ACCESS_MODE 0 静态 指定视图的自主访问控制机制。0:兼容DM;1:兼容ORACLE
ENABLE_FULL_WIDTH 1 动态,系统级 是否识别SQL语句中的全角中文字符。0:不识别;1:识别
DECIMAL_ENHANCED 1 静态 指定DECIMAL、DEC、NUMERIC和NUMBER数据类型计算结果的有效精度。0:支持38位精度;1:支持40位精度
DOUBLE_TO_DEC_MASK 1 静态 指定DOUBLE/FLOAT转换DECIMAL时使用的格式。
0:统一使用%g自动格式。%g自动格式具体分为方式一(%g = (%e +其他操作))和方式二(%g = (%f + 其他操作));
1:将0选项中方式一替换成直接使用%e格式,其他不变;
2:使用浮点数矫正算法,还原成最短且最接近的DECIMAL
ARG_VARCHAR_ADJUST 0 动态,系统级 用于控制是否调整过程/包方法的解析策略。0:保持原有策略;1:调整过程/包方法解析策略,放大变长和定长字符串参数长度,将变长和定长字符串参数/返回值的长度放大到8188
CASE_CONVERSION_ENHANCED 1 静态 是否支持多字节字符的大小写转换。0:不支持,表示只支持原有的单字节ASCII字符的大小写转换;1:支持,表示增加支持多字节字符的大小写转换
TIME_MODE 1 静态 指定TIME解析兼容模式。0:兼容DM老版本对于TIME的默认解析方式,统一从年开始解析;1:根据参数COMPATIBLE_MODE取值处理TIME的解析方式,从年或小时开始解析
CAST_CLOB_MODE 1 动态,会话级 对于目标数据类型为CLOB的超长字符串“||”连接,是否下放数据类型转换。0:不下放;1:下放
MD5_TYPE 0 静态 用于控制MD5函数的返回值类型(MD5函数用于计算并返回源串的MD5散列值,具体可查看《DM8_SQL语言使用手册》)。0:返回值类型为VARBINARY;1:返回值类型为VARCHAR
VIEW_AUTHID_CHECK 1 动态,系统级 用于控制当视图定义包含AUTHID CURRENT_USER时是否报错。0:否;1:是
ARG_DECIMAL_ADJUST 0 动态,系统级 专门用于存储过程/存储函数/包中的函数。用于控制是否调整函数输入参数的解析策略。0:否;1:是,系统将NUMBER类型的输入参数自动调整为DEC(0, 0)类型,参数允许输入任何有效的NUMBER数据,此策略调整不包括返回值数据类型
DEC_BIN_CVT_MODE 0 静态 用于控制NUMBER与BINARY类型的转换。0:表示原有的处理逻辑,即只支持从BINARY向NUMBER转换且BINARY数据按INT64处理;1:表示新的处理逻辑,支持互相转换,且BINARY数据记录的是NUMBER类型的内存值。0和1不同取值表示两种不兼容的转换格式,其BINARY存储的数据含义不同,使用时应确定某一种,不应该在已有数据的情况下调整配置值
RECORD_COMPARE_MODE 1 静态 是否严格比较记录数据类型的成员,0表示简单比较,1表示严格比较。严格比较时,同样的数据类型如字符串,如果定义长度不一致,视为不相同。
2.1.1.1.16 用户请求跟踪相关

表 2.17 dm.ini 中用户请求跟踪相关参数

参数名 缺省值 属性 说明
SVR_LOG 0 动态,系统级 是否打开SQL日志功能,0:关闭;1:打开,并按照SQLLOG.INI中的配置来记录SQL日志;2:打开,按文件中记录数量切换日志文件,日志记录为详细模式;3:打开,不切换日志文件,日志记录为简单模式,只记录时间和原始语句
SVR_LOG_NAME SLOG_ALL 动态,系统级 SQLLOG.INI中预设模式的名称。支持指定多个预设模式名,限制如下:
1、最多指定10个预设模式名;
2、预设模式名之间使用逗号分隔,不允许换行;
3、每个预设模式名长度不能超过128个字节,否则该模式名无效;
4、dm.ini中SVR_LOG_NAME参数总长度不能超过256个字节,否则使用SLOG_ALL模式。动态修改SVR_LOG_NAME时,若指定的参数值超过256字节则报错;
5、指定多个预设模式名时,若其中某个模式名不在SQLLOG.INI文件中,则该模式名无效。若指定的多个预设模式名均不在SQLLOG.INI文件中,则使用模式
例如:SVR_LOG_NAME = SLOG_ALL,SLOG_LOGIN
SVR_LOG_PLN_STR 1 动态,会话级 表明是否在SQL 日志中记录当前SQL的计划
0:任何计划都不记录
1 :记录SQL 计划
2:记录动态语句以及动态游标的计划
2.1.1.1.17 系统跟踪相关

表 2.18 dm.ini 中系统跟踪相关参数

参数名 缺省值 属性 说明
GDB_THREAD_INFO 0 静态 系统强制HALT时,是否打印线程堆栈信息到日志文件中。0:不打印;1:打印
TRACE_PATH SYSTEM_PATH 静态 存放系统TRACE文件的路径。不允许指定ASM路径。默认的TRACE_PATH是SYSTEM_PATH;如果SYSTEM_PATH保存在ASM上,则../CONFIG_PATH/TRACE作为TRACE_PATH
SVR_OUTPUT 0 动态,系统级 POINT指令是否在服务器端打印,打印信息会记录到LOG目录下的DMSERVERSERIVCE.LOG文件中。 1是,0否
SVR_ELOG_FREQ 0 动态,系统级 指定ELOG日志文件归档时的切换频度,满足条件后系统会自动将当前的ELOG日志文件更名后归档。
0:按月,格式为DM_实例名_年月.log;
1:按天,格式为DM_实例名_年月日.log;
2:按小时,格式为DM_实例名_年月日_小时.log;
3:按文件体积(需配置INI参数ELOG_SWITCH_LIMIT),当达到设置的体积上限时进行切换,格式为DM_实例名_年月日_小时_分钟.log
ELOG_FLAG 0 手动 指定当前的ELOG日志文件名是否带有时间后缀。 0:是,格式为dm_实例名_年月.log; 1:否,格式为dm_实例名.log
ENABLE_OSLOG 0 静态 是否启用操作系统日志,启用后会在/var/log/secaudit/db目录下生成名为audit_yyyymmdd.log的操作系统日志文件,仅对非WINDOWS系统有效。0:禁用;1:启用
LOG_IN_SHOW_DEBUG 2147483647 动态,系统 发版为DEBUG版本时,控制RLOG模块日志输出。取值范围0~2147483647。LOG_IN_SHOW_DEBUG转换为二进制后,最低位为1,表示开启RLOG模块日志输出;0表示关闭RLOG模块日志输出。其他位,暂时没有用到
TRC_LOG 0 动态,系统级 TRACE日志开关。需和INI参数TRC_LOG_MODULE配合使用。
0:表示关闭;
非0:为功能组合值,组合规则为:
switch_mod*4 + asyn_flag*2 + 1。其中,日志文件切换方式: 0不切换;1按文件记录行数,满10000行切换;2按文件大小进行切换,满128M切换; 3按时间间隔进行切换,每小时切换。
日志文件是否采用异步方式:0否,采用同步方式; 1是,采用异步方式 。
TRACE日志位于安装目录下的/log中,名称为dmtrc_instname.log(不含切换方式)或dmtrc_instname_日期时间.log(含有切换方式)
TRC_LOG_MODULE ALL 动态,系统级 当打开TRC_LOG开关时,用于配置TRACE日志中记录的内容。该参数为字符类型,最大长度128。
书写格式为:TRC_LOG_MODULE=服务器记录项,DMDPC记录项。 服务器记录项和DMDPC记录项设置方法相同。缺省表示不记录该模块中的任何内容。 具体记录项和代号: 内存MEM (0)、任务线程 TSK (1) 、站点信息SITE (2) 、事务TRX (3) 、通信消息MSG (4) 、 会话SESS (5) 、计划PLN_GEN (6) 、HUGE文件系统HFS (7)、LOCK相关(8)、快速装载服务器端模块BLDR(9)、字典DICT(10)、错误堆栈ESTK(11) 、用户自定义向日志写入内容(12)、0~12全部记录(ALL)。多个记录项之间使用冒号(:)分割。
例如:
1)记录0~12项所有的信息,需设置trc_log_module = ALL
2)只服务器模块记录HFS和TRX,DMDPC模块不记录,需设置trc_log_module= 3:7,
3)只DMDPC模块记录MSG,服务器模块不记录,需设置trc_log_module=,4
4)若服务器记录HFS和TRX,DMDPC记录MSG,需设置TRC_LOG_MODULE=3:7,4
ELOG_SWITCH_LIMIT 0 动态,系统级 事件日志文件体积上限,单位MB,取值范围0~4294967294。只在INI参数SVR_ELOG_FREQ设置为3时生效;配置为0时不限制日志文件体积
ELOG_ERR_ARR 空串 静态 指定需要生成ELOG日志的错误码,最多可以指定10个错误码,各错误码之间使用“,”进行分隔
ELOG_LANGUAGE_FLAG 0 静态 用于设置服务器启动和退出时的ELOG语言的标记。0:英文,1:中文
CORE_DUMP_FLAG 1 动态,系统级 在系统崩溃时,是否DUMP线程信息和SQL语句。1:是;0:否。若打开该参数,则在系统崩溃时,将线程信息和SQL语句导出到系统LOG目录下的DMHALT_<实例名>_<进程号>_年月日_小时分钟秒.DUMP文件中
SMALL_TABLE_THRESHOLD 数据库启动时指定 动态,系统级 在表扫描统计信息收集时,用以区分大表扫描和小表扫描的扫描页数的阈值。扫描页数大于该参数值时,认为进行的是大表扫描,否则认为进行的是小表扫描。取值范围0~4294967294,单位为数据页。指定为0时,实际取值为当前BUFFER数据页数的2%。
默认值在数据库启动指定为当前 BUFFER数据页数的2%。
动态视图V$SYSSTAT的TABLE SCANS(SHORT TABLES)和TABLE SCANS(LONG TABLES)属性在INI参数ENABLE_MONITOR=1时分别统计小表扫描次数和大表扫描次数
2.1.1.1.18 MONITOR 监控相关

表 2.19 dm.ini 中 MONITOR 监控相关参数

参数名 缺省值 属性 说明
ENABLE_MONITOR 1 动态,系统级 用于打开或者关闭系统的监控功能。1:打开;0:关闭
MONITOR_SQL_EXEC 0 动态,会话级 操作符、虚拟机栈帧、执行计划节点的监控开关。该监控项的生效必须是在ENABLE_MONITOR打开的情况下。0:关闭监控;1:打开监控;2:打开监控,在1的基础上,又增加了表达式运行时操作符的统计。该参数涉及的动态视图为V$STKFRM、V$SQL_PLAN_NODE、V$SQL_NODE_HISTORY
ENABLE_FREQROOTS 0 静态 指定FAST_POOL的管理方式。0:经典模式,系统启动时装入常用的描述页、索引的根、索引的控制页、指定常驻内存的表以及索引第二层的节点,之后不再变化;1:动态模式A,系统启动时装入常用的描述页、索引的根、指定常驻内存的表, 后续按负载情况动态装入频繁访问的页;2:动态模式B, 预装入的页同经典模式,后续按负载情况动态装入频繁访问的页。
对于ROLL表空间,最多分配0号文件的前FAST_ROLL_PAGES。
注:DMDSC仅支持ENABLE_FREQROOTS为0,系统会进行强制设置;DMDPC下不支持在系统启动时载入,仅支持动态载入
MAX_FREQ_ROOTS 200000 静态 收集常用B树地址的最大数量,仅ENABLE_FREQROOTS不为0时有效,取值范围0~10000000
注:已废弃
MIN_FREQ_CNT 100000 静态 最常使用B树地址的阈值,仅在ENABLE_FREQROOTS不为0时有效,取值范围0~10000000
注:已废弃
LARGE_MEM_THRESHOLD 10000 动态,系统级 大内存监控阈值。单位KB,取值范围0~10000000。其中0~100关闭统计,100以上才统计。
一条SQL语句使用的内存值超过这个值,就认为是使用了大内存,此时开启大内存监控。使用了大内存的SQL语句记录在V$LARGE_MEM_SQLS, V$SYSTEM_LARGE_MEM_SQLS视图中
ENABLE_MONITOR_DMSQL 1 动态,会话级 启用动态监控SQL执行时间功能标记, 0:不启用;1:监控。只监控多条或复杂SQL,例如包含引用包、嵌套子过程、子方法、动态SQL的SQL语句。监控的记录在V$DMSQL_EXEC_TIME视图中
ENABLE_TIMER_TRIG_LOG 0 动态,系统级 是否启动作业时间触发器日志功能,0:不启动;1启动
IO_TIMEOUT 300 静态 设置IO超时时间。单位秒,取值范围0或60~3600。0表示关闭IO超时检测。若设置大于0,调度线程每分钟检测系统内部是否存在IO超时(读磁盘或写磁盘)的数据页信息或者REDO日志刷盘超时信息,如果存在则将信息写入日志文件。IO读超时受INI参数PTX_ROLLBACK控制,若PTX_ROLLBACK=0,则当IO读时间大于IO_TIMEOUT设定值时,系统自动HALT;若PTX_ROLLBACK=1,则当IO读时间大于IO_TIMEOUT设定值的一半时,系统报错处理。IO写超时不受INI参数PTX_ROLLBACK控制,当IO写时间大于IO_TIMEOUT设定值时,系统自动HALT。REDO日志刷盘超时检测在不同环境中应用不同的策略,在单机环境下,当REDO日志刷盘时间大于IO_TIMEOUT设定值时,系统自动HALT;在DSC集群环境下,当REDO日志刷盘时间大于IO_TIMEOUT设定值的一半或DSC_SLOT_WAIT_TIMEOUT设定值的一半时,系统自动HALT
ENABLE_MONITOR_BP 1 动态,系统级 是否监控绑定参数相关信息。该监控项的生效必须是在ENABLE_MONITOR打开的情况下。0:不监控;1:监控
SQL_HISTORY_CNT 10000 动态,系统级 动态视图V$SQL_HISTORY的记录数上限,取值范围1000~100000
LONG_EXEC_SQLS_CNT 1000 动态,系统级 动态视图V$LONG_EXEC_SQLS的记录数上限,取值范围1000~1000000
SYSTEM_LONG_EXEC_SQLS_CNT 300 动态,系统级 动态视图V$SYSTEM_LONG_EXEC_SQLS的记录数上限,取值范围10~1000
BP_ITEM_MAXSIZE 50 动态,系统级 动态视图V$SQL_BINDDATA_HISTORY的BINDDATA列的最大内存空间。取值范围1~500,单位KB
MONITOR_SQL_PARSE 0 动态,会话级 查询分析过程信息的监控开关。该监控项须在参数ENABLE_MONITOR=1的条件下生效。取值:0:关闭监控;1:打开监控。可在动态视图V$SQL_PARSE_HISTORY中查看监控到的查询分析过程信息
RT_ERR_HISTORY_CNT 5000 动态,系统级 动态视图V$RUNTIME_ERR_HISTORY的记录数上限,取值范围1000~100000
ENABLE_MONITOR_PLNHIST 0 动态,会话级 是否开启历史计划信息持久化功能。0:否;1:是。当USE_PLN_POOL!= 0时有效
DMSQL_ET_CNT 10000 动态,系统级 指定V$DMSQL_EXEC_TIME的最大记录数,用于控制V$DMSQL_EXEC_TIME的容量。取值范围1~100000
DMSQL_EXEC_THRESHOLD 0 动态,会话级 用于提供监控DMSQL执行的时间阈值,当DMSQL中执行时间超过阈值的语句会被记录。取值范围0~4294967294,单位毫秒
MONITOR_COLUMNS 0 动态,系统级 是否监控表列被过滤条件引用的信息。0:不监控;1:监控
2.1.1.1.19 数据守护相关

表 2.20 dm.ini 中数据守护相关参数

参数名 缺省值 属性 说明
DW_MAX_SVR_WAIT_TIME 0 动态,系统级 数据库等待守护进程启动的最大时间,取值范围0~65534,单位S。如果设定时间内,守护进程没有启动,数据库实例强制退出。0表示不检测
DW_INACTIVE_INTERVAL 60 动态,系统级 服务器认定守护进程未启动的时间,取值范围0~1800,单位秒。如果服务器距离上次收到守护进程消息的时间间隔在设定的时间范围内,则认为守护进程处于活动状态,此时,不允许手工执行修改服务器模式、状态的SQL语句; 如果超过设定时间仍没有收到守护进程消息,则认为守护进程未启动,此时,允许手工方式执行这类SQL语句
DW_PORT 0 静态 服务器监听守护进程连接请求的端口,服务器配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配。 数据守护V3.0版本中,此参数仅作为单节点库的兼容参数保留。 对于新配置的数据守护系统,如果是单节点库,建议改用DMMAL.INI中的MAL_INST_DW_PORT参数进行配置,如果是DMDSC集群,此参数不再有用,必须使用DMMAL.INI中的MAL_INST_DW_PORT参数进行配置。
ALTER_MODE_STATUS 1 动态,系统级 是否允许手工修改服务器的模式、状态和OGUID。2表示允许,1表示在本地守护进程故障时允许,0表示不允许。 注:数据守护环境下建议配置为0,实例处于主机或备机模式后,不允许用户直接通过SQL语句修改服务器的模式、状态和OGUID
ENABLE_OFFLINE_TS 1 动态,系统级 是否允许OFFLINE表空间,0:不允许;1:允许;2:备库不允许。 注:数据守护环境下建议配置为2
SESS_FREE_IN_SUSPEND 60 动态,系统级 到备库的归档失败会导致主库挂起,为了防止应用的连接一直挂住不切换到新主库,设置该参数,表示归档失败挂起后隔一段时间自动断开所有连接。取值范围0~1800,单位秒,0表示不断开
SUSPEND_WORKER_TIMEOUT 180 动态,系统级 在一些ALTER DATABASE等操作过程中,需要先暂停所有工作线程,如果超过此设置时间,仍有部分工作线程在执行中,则会报错,并终止当前操作。取值范围60~3600,单位秒
DW_CONSISTENCY_CHECK 0 动态,系统级 备库是否检测主库到备库的连接丢失或归档失效,并在检测到上述情况时停止提供只读服务。0:不检测;1:检测
DW_ARCH_SPACE_CHECK 0 动态,系统级 备库是否检测本地归档磁盘空间不足,并在磁盘空间不足时主动关闭服务,同时将本地守护进程切换为SHUTDOWN状态。0:不检测;1:检测。
此参数目前仅支持单节点备库的检测
RLOG_PKG_SEND_NUM 1 动态,系统级 主库启动异步恢复时,连续发送设定值个日志包以后需要等待备库响应。取值范围1~200。缺省值1表示每发送一个日志包就要等待一次响应。如果主备库之间存在比较大的网络延迟,可以通过调大此参数以提升主库的日志发送速度
DW_SUSPEND_TIME 60 动态,系统级 设置主库在SUSPEND状态下最多保持的时长,单位秒,取值范围0~86400,允许动态修改。 主备进入异步恢复流程时,为了确保备库能够和主库的数据追平,在异步恢复的最后阶段会将主库切换为SUSPEND。此参数开启时,会在切换SUSPEND之前估算剩余待同步的日志量在DW_SUSPEND_TIME时长范围内是否能够同步完成,如果可以,再将主库切换到SUSPEND状态,否则主库仍然保持OPEN状态。
RLOG_SYNC_MODE 0 静态 设置主库的日志同步模式。0:主库向备库发送日志失败后,需要切换至SUSPEND状态,主库守护进程进入Failover故障处理流程,设置归档失效后再OPEN;1:主库向备库发送日志失败后,直接将备库归档失效,不再切换至SUSPEND状态,主库守护进程不再进入Failover故障处理流程。
参数取值1仅在非自动切换模式下有效
RLOG_PKG_SEND_TIME 0 动态,系统级 当此参数配置在异步备库的源库上时,用于设置源库到异步备库的日志同步检测时间(仅检测异步备库)。取值范围0~3600,单位秒,0表示关闭检测。若超出该参数指定的时间还未收到异步备库的响应消息,则源库认为通信出现异常并主动断开连接,等网络恢复正常后源库会自动重建连接并再次启动日志同步。
当此参数配置在异步备库上时,用于设置异步备库的日志接收检测时间。取值范围0~3600,单位秒,0表示关闭检测。若异步备库发现距离上一次接收到来自源库的日志包的时间间隔超过此参数配置的值,则认为通信出现异常并主动断开到源库的连接,等待网络恢复正常后源库会自动重建连接并再次启动日志同步
DW_ARCH_HANG_CHECK 0 动态,系统级 主库是否检测本地归档磁盘空间不足,并在磁盘空间不足时主动退出。0:不检测;1:检测。 此参数目前仅支持单节点主库的检测
ARCH_SPACE_CHECK_INTERVAL 0 动态,系统级 定期检查归档磁盘空间的时间间隔。单位秒,取值范围0~86400;取值为0时表示不进行该检查。
与参数ARCH_SPACE_FREE_THRESHOLD配合使用,当检查到归档磁盘剩余空间小于归档磁盘剩余空间阈值时,打印警告日志;仅当所述两个参数均不为0时,此功能才开启
ARCH_SPACE_FREE_THRESHOLD 0 动态,系统级 设置定期检查的归档磁盘的剩余空间阈值。单位MB,取值范围0或1024~2147483647;取值为0时表示不进行该检查。
与参数ARCH_SPACE_CHECK_INTERVAL配合使用,当检查到归档磁盘剩余空间小于归档磁盘剩余空间阈值时,打印警告日志;仅当所述两个参数均不为0时,此功能才开启
ELOG_ARCH_TIMEOUT 0 动态,系统级 本地归档等待处理超时时间。当归档任务处理耗时或归档发送时间超过该参数设定的值,则打印一条超时日志,单位MS,取值范围0~3600000;缺省值为0,表示不检查是否超时。
此参数仅在设置ENABLE_MONITOR=1时才生效
REDOS_RECV_PLL_NUM 0 静态 备库在Recovery阶段要调整的重演并行度。取值范围0~64,0表示不启用。参数开启后,备库在recovery期间取MAX(REDOS_PARALLEL_NUM,REDOS_RECV_PLL_NUM)作为真正的重演并行度使用,recovery结束后,并行度重新恢复为REDOS_PARALLEL_NUM,如果备库REDOS_ENABLE_SELECT=1开启查询,则在recovery期间会强制关闭查询服务,recovery结束后再恢复查询,以便备库能快速追赶上主库。此参数仅对REALTIME和TIMELY备库生效
RPKG_PROCESS_TIMEOUT 0 动态,系统级 日志包处理超时记录时间。单位毫秒,取值范围0~3600000,缺省值为0。
当取值为0时,表示不检查日志包发送接收处理是否超时。
当主库发送时间超过设定的时间,生成一条记录,记录到动态视图V$RPKG_WARN_SEND_INFO。
当备库接收日志包到发送回复完成时间超过此参数记录到动态视图 V$RPKG_WARN_RECV_INFO
RAFT_HP_TIMEOUT 60 动态,系统级 多副本集群日志包堆积超时时间,单位秒,取值范围1~36000,缺省值60
当多副本集群主库日志包超过此超时时间没有提交日志包,则会将服务器设置为日志堆积状态,断开所有连接会话,并会将服务器设置为只读模式,后续连接的会话为只读会话。当服务器恢复提交日志包后,服务器会恢复到可写状态,后续连接会话将恢复可写
2.1.1.1.20 全文索引相关

表 2.21 dm.ini 中全文索引相关参数

参数名 缺省值 属性 说明
CTI_HASH_SIZE 100000 动态,会话级 使用全文索引查询时,用于设置关键字匹配的哈希表大小。取值范围1000~10000000
CTI_HASH_BUF_SIZE 50 动态,会话级 使用全文索引查询时,用于设置哈希缓存内存大小,单位MB。取值范围1~4000
2.1.1.1.21 配置文件相关

表 2.22 dm.ini 中配置文件相关参数

参数名 缺省值 属性 说明
MAL_INI 0 动态,系统级 是否启用MAL系统,0:不启用;1:启用
ARCH_INI 0 动态,系统级 是否启用归档,0:不启用;1:启用
LLOG_INI 0 静态 是否启用逻辑日志,0:不启用;1:启用
TIMER_INI 0 动态,系统级 是否启用定时器,0:不启用;1:启用
MPP_INI 0 静态 是否启用MPP系统,0:不启用;1:启用
DMTHRD_INI 0 动态,系统级 是否启用线程绑核功能,0:不启用;1:启用
2.1.1.1.22 备份还原相关

表 2.23 dm.ini 中备份还原相关参数

参数名 缺省值 属性 说明
BAK_USE_AP 1 动态,会话级 备份还原实现策略。
1:DMAP辅助进程方式,要求必须启动DMAP服务,可支持第三方备份。DMAP插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特别是加密、压缩的处理效率。
2:无辅助进程方式,不依赖DMAP,由主进程DMSERVER自身执行备份还原,但不支持第三方备份
BAK_DIRECT_IO 0 动态,系统级 备份还原是否启用DIRECT_IO参数。0:不启用;1:启用
BAK_SAFE_CHECK 7 动态,系统级 备份的安全检查策略
0:不开启备份安全检查
1:数据文件处在CORRUPT状态时报错
2:检查HUGE文件错误
4:增量备份时检查备份集链表中必须包含完全备份集
8:校验备份集时是否进行页校验
若为其他数字,则表示配置值的和,如3=1+2,表示同时启用1和2对应的这两个策略。
默认不开启备份集页校验,其余选项均开启
BAK_TIMEOUT 30 动态,系统级 备份过程中阻塞操作的超时间隔,单位秒,取值范围10~3600
USER_READ_ONLY_MODE 0 动态,系统级 是否禁止只读用户设置会话为非只读。
0:否;1:是
2.1.1.1.23 快速插入
表2.24 dm.ini中快速插入相关参数
参数名 缺省值 属性 说明
BATCH_INSERT_ROWS 10 动态,会话级 开启批量插入的记录行数阈值。当查询插入或批量绑定参数插入的记录行数大于等于 BATCH_INSERT_ROWS、且满足批量插入优化条件时,采用批量方式进行插入,否则采用逐行插入。取值范围 0~10000
INDEX_FINS_FLAG 0 动态,系统级 用于控制索引增删改的批量处理优化。当表满足批量处理的条件下,且当前语句的处理行数大于 BATCH_INSERT_ROWS 时可选的批量优化选项:
0:不启用相关优化;
1:异步方式处理二级索引;
2:启用 UNIQUE 索引批量处理;
4:启用普通二级索引批量处理;
8:插入或删除前尝试先对每批数据排序;
16:当异步任务堆积时,是否使用会话工作线程协助处理;
32:尝试页内比较、插入或删除;
64:尝试复用 B 树历史搜索路径;
256:启用聚集索引批量插入优化;
上述取值可组合使用,但启用 8、32、64 优化的前提是开启 2/4/256 以支持对应索引。部分优化仅数据有序时有意义,启用 8 提前排序时可以应用相关优化,但也需要考虑排序代价。
参数取值包含 1 时,异步处理二级索引的线程个数受参数 MAX_SEC_ASYNC_THREADS 限制,可通过查看 V$THRD_POOL_GRP 获取实际执行的使用情况,即 TYPE 为 PTHD_POOL 的记录
2.1.1.1.24 其他

表 2.25 dm.ini 中其他相关参数

参数名 缺省值 属性 说明
IDLE_MEM_THRESHOLD 50 动态,系统级 可用物理内存的报警阈值,单位MB,取值范围10~6000
IDLE_DISK_THRESHOLD 1000 动态,系统级 磁盘可用空间的报警阈值,单位MB,取值范围50~50000
IDLE_SESS_THRESHOLD 5 动态,系统级 有限的会话数阈值,取值范围1~10
ENABLE_PRISVC 0 静态 是否启用服务优先级的功能,0:不启用;1:启用
FETCH_PACKAGE_SIZE 512 动态,系统级 指定FETCH操作时使用的消息包大小,单位KB,取值范围32~65536。该参数修改时仅影响新创建的会话
ENABLE_RLS 0 静态 是否开启DBMS_RLS系统包中的策略管理行级安全访问控制功能。0:不开启;1:开启
RLS_CACHE_SIZE 100000 动态,系统级 ENABLE_RLS=1时使用,用于指定策略缓存空间能够存放对象结点数量的最大值。取值范围1000~1000000。策略缓存中的策略可通过V$POLICY_CACHE和V$POLICY_CACHE_ITEM进行查看
ENHANCE_RECLAIM 1 动态,系统级 是否采用增强的垃圾回收策略。0:否;1:是
CODE_CONVERSE_MODE 1 动态,系统级 DBLINK对不完整字符的处理。0:丢弃;1:报错
ENABLE_CS_CVT 0 静态 是否使用用户自定义的CONVERT方法替换系统默认CONVERT方法。0:不替换;1:替换
AP_PORT_NUM 6000 静态 分布式环境下协同工作的监听端口,SP/BP本地设置的AP_PORT_NUM如果和自身在MP上注册的AP_PORT_NUM不一致,按照在MP上实际注册的为准,启动时会自动覆盖
SQLTUNE_CATEGORY ‘DEFAULT’ 动态,会话级 限制本会话中被允许使用的SQL配置(包括为SQL注入的HINT规则)的生效类别。当SQL配置存在生效类别限制且和本会话的SQLTUNE_CATEGORY不一致时,该SQL配置在本会话不生效
BINDDATA_COLTYPE 0 静态 用于设置动态视图V$SQL_BINDDATA_HISTORY的BINDDATA列的数据类型。0:VARBINARY;1:BLOB
MAX_SEND_WR 128 静态 QP发送队列中最大发送的工作请求(WR)个数,取值范围1~4294967294。MAX_SEND_WR参数值不能超过MAX_RECV_WR,若超过,会调整为MAX_RECV_WR值一半
MAX_RECV_WR 512 静态 QP接收队列中最大接收的工作请求(WR)个数,取值范围1~4294967294。需要注意,若MAL开启MAL_USE_RDMA,MAL会从SHARE POOL内存池中为每个连接预分配MAX_RECV_WR个接收消息的缓存,每个缓存大小不超过32K,因此配置MAX_RECV_WR时需要结合服务器内存大小适当分配
CQ_MOD 100 静态 QP发送工作请求时,每隔多少个工作请求(WR)生成一个信号来通知完成队列(CQ)生成相应的事件(CQE)响应,取值范围1~4294967294
2.1.1.1.25 DMDSC 相关

表 2.26 dm.ini 中 DMDSC 相关参数

参数名 缺省值 属性 说明
DSC_N_CTLS 1028096 静态 LBS/GBS控制页数目。取值范围4096~4294967294
DSC_N_POOLS 19 静态 LBS/GBS池数目。取值范围2~1024
DSC_USE_SBT 1 静态 是否使用辅助的平衡二叉树。0:否;1:是
DSC_TRX_CMT_LSN_SYNC 3 动态,系统级 事务提交时LSN同步方式。取值范围0~3600,0表示提交时不主动同步LSN;99表示每次提交时强制节点间LSN同步;其他值表示每间隔多少秒同步节点间LSN值
DSC_ENABLE_MONITOR 1 动态,系统级 是否启用DMDSC请求时间监控,0:不启用;1:启用。监控的内容参见V$DSC_REQUEST_STATISTIC
DSC_TRX_VIEW_SYNC 1 动态,系统级 节点间活动事务同步策略。0:无需等待响应;1:需要等待其他节点响应 ;2表示采用定时同步策略,每隔1秒同步一次
DSC_TRX_VIEW_BRO_INTERVAL 1000 动态,系统级 控制TRX VIEW广播间隔时间,单位毫秒,取值范围1~60000
DSC_REMOTE_READ_MODE 1 静态 DSC环境下REMOTE READ优化模式。0:不优化;1:发出日志刷盘请求后不等待,立即响应,请求节点获取数据页前等待;2:发出日志刷盘请求后不等待,立即响应,请求节点日志写文件前等待
DSC_RESERVE_PERCENT 0.08 动态,系统级 计算启动GBS CTL RESERVE的阈值,当空闲的GBS_CTL数量小于DSC_RESERVE_PERCENT%比例后,提前启动GBS CTL回收流程。取值范围0~10,取值为0时不提前回收GBS_CTL
DSC_TABLESPACE_BALANCE 0 动态,会话级 是否开启DSC服务器端基于表空间的负载均衡。0:不开启;1:开启。开启时,DSC环境下服务器自动检查执行的查询语句是否满足特定条件,满足时系统会自动重连至指定的优化节点执行,且自动重连前服务器会返回运行时错误EC_SWITCH_CONN_NODE(-613)
HA_INST_CHECK_IP 需要在HA场景下指定 静态 HA实例启动检测IP,是指HA系统中另外一台机器的IP地址,考虑到多网卡情况,最多允许配置5个IP。如果需要配置多个IP,则编辑多个配置项即可,比如: HA_INST_CHECK_IP = 192.168.0.8 HA_INST_CHECK_IP = 192.168.0.9
HA_INST_CHECK_PORT 65534 静态 HA实例监听端口,数据库实例启动后,监听此端口的连接请求,并使用此端口号连接HA_INST_CHECK_IP判断另外一个HA实例是否已经启动。 只允许配置一个监听端口,所有HA_INST_CHECK_IP使用同一个端口进行检测,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
DSC_INSERT_LOCK_ROWS 0 动态,系统级 DSC集群插入操作符单次插入记录数大于等于此参数指定值时,增加额外的封锁,将多个节点针对同一张表的插入操作串行执行,以减少节点间冲突,提升并发插入性能。取值范围0~10000,0表示不进行优化处理。需要注意的是,开启此参数后,DSC集群单个节点的并发插入性能会有一定程度下降
DSC_CRASH_RECV_POLICY 0 静态 故障处理策略。0:故障处理时重演所有节点REDO日志,且日志重演期间服务挂起;1,故障处理时仅重演故障节点REDO日志,日志重演期间服务挂起;2,故障处理时仅重演故障节点日志,且日志重演期间正常提供服务。需要注意,故障处理策略1和2不适用于备库,且仅适用于单节点故障,不满足约束条件时将自动切换到故障处理策略0
DSC_LBS_REVOKE_DELAY 0 动态,系统级 DSC集群优先满足本地LBS请求,延迟响应LBS REVOKE请求的时间。取值范围0~1000,单位ms。数据页节点间冲突比较严重场景,可以开启此LBS REVOKE延迟响应机制,确保冲突数据页在一段时间内保持在某个节点运行,以提升整体性能
DSC_REQUEST_TIMEOUT 3600 动态,系统级 DSC环境下LBS请求GBS授权的超时时间,当请求时间超过设定值时,若INI参数PTX_ROLLBACK为0则实例故障退出,若PTX_ROLLBACK为1则报错。单位秒,取值范围1~3600
DSC_QUOTA_RELOAD_INTERVAL 5 动态,系统级 DSC环境下重新加载表空间配额的时间间隔,单位秒,取值范围1~60
DSC_SLOT_WAIT_TIMEOUT 600 动态,系统级 DSC集群全局LBS封锁超时HALT时间。系统运行过程中,获取数据页权限长时间得不到请求,当时间超过设置值的十分之一和5之间的较小值后则会在运行日志登记警告信息。单位秒,取值范围0或10~3600。取值为0时表示关闭超时HALT机制
DSC_IGNORE_INI_CHECK 0 静态 DSC环境下是否忽略节点间的INI参数一致性校验。0:不忽略,1:忽略
DSC_DV_PAGE_ACCESS_MODE 1 动态,系统级 DSC集群V$表0号页访问模式,0:标准数据页访问0号页,1:访问本地BUFFER读取0号页相关信息
DSC_LBS_OPT_FLAG 1 动态,系统级 LBS封锁优化开关。
0:不优化;
1:页读完成后,提前请求下一页的LBS封锁;
2:LBS请求授权时,尝试并行本地读该页。
支持使用上述有效值的组合值,如3表示同时进行1和2的优化
2.1.1.1.26 RDMA 通讯
表2.27 dm.ini中RDMA通讯相关参数
参数名 缺省值 属性 说明
USE_RDMA 0 手动 Linux 环境下,服务器是否支持 RDMA 通讯方式。 0:否,使用 TCP 方式;1:是,使用 RDMA 方式。 当 USE_RDMA=1 时,DPI 可以使用 RDMA 方式登录服务器。使用 RDMA 之前需先安装好迈络思 ofed 驱动(RDMA 协议的基础库 libibverbs.so 和 librdmacm.so)
2.1.1.1.27 未列在 dm.ini 中的 INI 配置项

下表中的 INI 参数较为特殊,没有包含在 dm.ini 文件中,但用户可通过调用系统过程与函数 SP_SET_PARA_VALUE()和 SF_SET_SYSTEM_PARA_VALUE()进行参数值的设置和修改。

表2.28 不在dm.ini中的INI配置项一
参数名 缺省值 属性 说明
PWD_POLICY 15 动态,系统级 设置系统缺省口令策略。取值:15、31。 15:禁止与用户名相同、口令长度需大于等于INI参数PWD_MIN_LEN设置的值、须同时包含大写字母(A~Z)和小写字母(A-Z)、至少包含一个数字(0-9); 31:除了取值15的策略外,还要求至少包含一个标点符号(英文输入法状态下,除“ 和空格外的所有符号)。 DMINIT工具中SYSDBA_PWD、SYSAUDITOR_PWD、SYSSSO_PWD、SYSDBO_PWD使用的口令策略,请参考PWD_POLICY为15
PWD_MIN_LEN 8 动态,系统级 设置用户口令的最小长度,取值范围8~48。配合INI参数PWD_POLICY使用
ENABLE_OBJ_REUSE 0 静态 是否支持客体重用,0:不支持;1:支持。
ENABLE_REMOTE_OSAUTH 0 静态 是否支持基于操作系统的远程身份验证,0:不支持;1:支持。注:该参数设置仅安全版有效
ENABLE_LOCAL_OSAUTH 0 静态 是否支持基于操作系统的本机身份验证,0:不支持;1:支持
MAC_LABEL_OPTION 1 动态,系统级 用于控制SP_MAC_LABEL_FROM_CHAR过程的使用范围。0:只有SSO可以调用;1:所有用户都可以调用;2:所有用户可以调用,但是非SSO用户不会主动创建新的LABEL。 注:该参数设置仅安全版有效
ENABLE_EXTERNAL_CALL 0 静态 是否允许创建或执行外部函数。0:不允许;1:允许
ENABLE_DDL_ANY_PRIV 0 动态,系统级 是否可以授予和回收DDL相关的ANY系统权限。0:否;1:是
SEC_PRIV_MODE 0 静态 表示权限管理模式。0:表示传统模式;1:表示专用机模式;2:表示EVAL测评模式;3:表示ZB模式。 注:该参数设置仅安全版有效
HFS_UNDO_ERR_POLICY 0 静态 在系统启动过程中,如果HUGE表UNDO操作出错,是否将系统直接HALT。0:是;1:否,忽略该错误
STARTUP_TIMEOUT 5 动态,系统级 握手消息的等待超时,取值范围5-10000

下述的 INI 参数较为特殊,没有包含在 dm.ini 文件中,且用户不可通过调用系统过程与函数 SP_SET_PARA_VALUE()和 SF_SET_SYSTEM_PARA_VALUE()进行参数值的设置和修改。

表2.29 不在dm.ini中的INI配置项二
参数名 缺省值 属性 说明
RAFT_SHADOW 0 静态 是否是一个多副本影子库。0:否;1:是。
该参数仅能通过备份还原指令设置,不能通过系统函数动态修改,且不是建库参数
2.1.1.1.28 主备环境 INI 同步规则

在主备环境中,备库上部分 INI 参数(来自 dm.ini 或未列在 dm.ini 中的配置项)须和主库保持一致。DM 提供自动同步和手动同步两种方法。版本升降级期间,由于不同版本的 INI 参数可能不一致,因此不同版本的主备库不会进行 INI 同步。

自动同步

一 开启 INI_SYNC 参数同步后, 备库的部分 INI 参数会定时与主库同步到一致。同步原则为备库文件值与主库同步至一致,备库内存值与主库同步至一致。若备库为 DMDSC 集群,集群内节点均会进行同步。不同参数类型的同步规则如下:

  1. 静态 INI 参数:仅同步 dm.ini 文件值,不同步内存值,备库需要重启才能使用新的参数值;
  2. 系统级动态 INI 参数:同时同步 dm.ini 文件值与内存值;
  3. 会话级动态 INI 参数:同步全局内存值,不同步会话上的 INI 参数值;
  4. 若是在 INI 同步改进前后的两个版本间执行,不会真正同步,而是直接返回成功;
  5. INI_FILE 类型的参数,只会写入 INI 文件,需要重启才能生效;
  6. 不论是否开启 INI_SYNC 参数,对于参数 ENABLE_AUDIT、PWD_POLICY、PWD_MIN_LEN、MAC_LABEL_OPTION、ENABLE_DDL_ANY_PRIV,主库修改后,备库会随重演同步调整 INI 参数值;
  7. DMDSC 下启动时,非控制节点会从控制节点同步一次 INI 参数,此轮同步会登记同步信息到 V$INI_SYNC_INFO, 此轮同步不受 INI_SYNC 参数控制。

二 主备切换时,当新主库开启了 INI_SYNC 参数时,新主库会主动向所有备库归档目标同步一次参数,通知备库将参数与新主库同步到一致,对于 DMDSC 备库,归档目标为控制节点,仅会向控制节点同步参数;若新主库未开启 INI_SYNC 参数,则新主库不主动向备库同步参数。

手动同步

除了自动同步外,还可以通过 SF_SYNC_INI 或者 SF_DSC_SYNC_INI 函数进行手动同步,函数的具体使用方法可以参考《DM8_SQL 语言使用手册》。

2.1.1.2 dmmal.ini

dmmal.ini 是 MAL 系统的配置文件。dmmal.ini 的配置项见下表。需要用到 MAL 环境的实例,所有站点 dmmal.ini 需要保证严格一致。

表2.30 dmmal.ini的配置项
项目 项目意义 字段 字段意义
MAL_CHECK_INTERVAL MAL链路检测时间间隔,取值范围0~1800,单位秒(s),缺省为30s,配置为0表示不进行MAL链路检测
MAL_CONN_FAIL_INTERVAL 判定实例之间MAL链路断开的时间,取值范围2~1800,单位秒(s),缺省为10s。
仅当MAL_CHECK_INTERVAL不为0时有效
MAL_CHECK_TIMEOUT 单个实例的MAL网络最大延迟时间,单位毫秒(ms),取值范围0~65534,缺省为0,表示不进行MAL网络延迟时间检测。需要和MAL_CHECK_IP配合使用。
仅当MAL_CHECK_INTERVAL不为0时有效
MAL_CHECK_IP 第三方确认机器的IP,用于检测各个实例的MAL网络延迟时间。需要和MAL_CHECK_TIMEOUT配合使用。确认机器为MAL链路所有实例均可访问到的独立外网机器,MAL链路实例包括DMSERVER、DMASMSVR(非DMASM镜像)和DMASMSVRM(DMASM镜像)。
实例每隔MAL_CHECK_INTERVAL时间ping一次MAL_CHECK_IP,若连接耗时超过MAL_CHECK_TIMEOUT指定时间,则该实例主动HALT。
开启MAL网络延迟时间检测后,需要为MAL链路所有实例赋予ping权限,具体方法可以参考《DM8共享存储集群》
MAL_SEND_THRESHOLD 最大待发送邮件数,用于控制待发送邮件总数,防止发送邮件堆积。取值范围1024~10000,缺省值2048
MAL_LEAK_CHECK 是否打开MAL内存泄露检查(0:关闭,1:打开),缺省为0
MAL_LOGIN_TIMEOUT MPP/DBLINK等实例间登录时的超时检测间隔3~1800,单位秒,缺省为15s
MAL_BUF_SIZE 单个MAL缓存大小限制,单位MB。当此MAL的缓存邮件超过此大小,则会将邮件存储到文件中。取值范围0~500000,缺省为100
MAL_SYS_BUF_SIZE MAL系统总内存大小限制,单位MB。取值范围0~500000,缺省为0,表示MAL系统无总内存限制
MAL_VPOOL_SIZE MAL 系统使用的内存初始化大小,单位MB。取值范围1~500000,缺省为10,此值一般要设置的比MAL_BUF_SIZE大一些
MAL_COMPRESS_LEVEL Mal消息压缩等级,取值范围0~10。0代表不进行消息压缩,为默认值
1~9表示采用zip算法,从1到9表示压缩速度依次递减,压缩率依次递增。
10表示采用snappy算法,压缩速度高于zip算法,压缩率相对低
MAL_TEMP_PATH 指定临时文件的目录。当邮件使用的内存超过mal_buf_size或者mal_sys_buf_size时,将新产生的邮件保存到临时文件中。如果缺省,则新产生的邮件保存到temp.dbf文件中
MAL_COMBIN_BUF_SIZE 指定MAL消息合并发送的缓冲区大小,单位KB。MAL发送消息时进行合并,减少网络发送次数。有效值范围0~131072。0表示不进行消息合并,为缺省值。最小缓冲区大小128k,当设置值大于0小于128时,自动调整为128
MAL_MESSAGE_CHECK 是否对MAL通信消息启用消息体校验(只有当消息的发送端和接收端都配置为1才启用通信体校验)。0:不启用;1:启用。缺省为1
MAL_MSG_ENCRYPT MAL系统是否启用SSL通讯加密。0:不启用;1:启用。缺省为0
MAL_USE_RDMA LINUX环境下,MAL是否使用RDMA通讯方式。 0:否,使用TCP方式;1:是,使用RDMA方式。 当MAL_USE_RDMA=1时,MAL_HOST必须是RDMA网卡所绑定的IP。使用RDMA之前需先安装好迈络思OFED驱动(RDMA协议的基础库LIBIBVERBS.SO和LIBRDMACM.SO)
[MAL_INST1] 实例配置 MAL_INST_NAME 实例名。MAL系统中的各数据库实例不允许同名。
MAL_HOST 实例主库
MAL_PORT MAL监听端口,用于数据守护、DSC、MPP等环境中各节点实例之间MAL链路配置,监听端端口配置此参数,范围1024~65534,发起连接端的端口在1024~65535之间随机分配
MAL_INST_PORT MAL_INST_NAME实例服务器监听通讯端口号,服务器配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配
此参数的配置应与DM.INI中的PORT_NUM保持一致
MAL_INST_HOST 连接数据库服务器使用的IP地址。(在MPP下以及读写分离的即时归档主备系统下一定要配置)
MAL_DW_PORT MAL_INST_NAME实例守护进程的监听端口,其他守护进程或监视器使用MAL_HOST + MAL_DW_PORT创建与该实例守护进程的TCP连接,监听端配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配。缺省为0,表示不配置端口号,无法监听
MAL_INST_DW_PORT 节点实例监听守护进程的端口,实例服务器配置此参数,取值范围1024~65534,发起连接端的端口在1024~65535之间随机分配。缺省为0,表示不配置端口号,无法监听
MAL_LINK_MAGIC MAL链路网段标识,取值范围0~65534,缺省为0。设置了此参数后,对于设置的MAL_LINK_MAGIC值不同的实例,DMWATCHER之间和DMSERVER之间的通信使用配置的MAL_INST_HOST;对于设置的MAL_LINK_MAGIC值相同的实例,DMWATCHER之间和DMSERVER之间的通信使用配置的MAL_HOST。
搭建跨网段的DBLINK时,如果内外网不通,则必须配置此参数;如果内外网互通,则可以不配
注意

dmmal.ini和dm.ini中都可配置MAL_LEAK_CHECK,启动时以dmmal.ini中设置为准,如果dmmal.ini中没有配置,则以dm.ini中配置为准,两个都没配置时,则默认0。此参数在dm.ini中可动态更改。

2.1.1.3 dmarch.ini

dmarch.ini 用于配置归档。dmarch.ini 的配置项见下表。

表2.31 dmarch.ini的配置项
项目 项目意义 字段 字段意义
全局配置项 ARCH_WAIT_APPLY 备库收到Redo日志后,是否需要重演完成后再响应主库。0表示收到马上响应(高性能模式),1表示重演完成后响应(事务一致模式)。配置为即时归档时,缺省值为1;配置为实时归档时,缺省值为0。
针对配置实时归档的DMDSC数据守护集群,不支持将ARCH_WAIT_APPLY配置为1
ARCH_RESERVE_TIME 归档日志保留时间,单位分钟,取值范围0~2147483647。只对本地归档有效。服务器每隔5分钟检查是否存在超过保留时间的归档并删除。缺省为0,表示不删除归档
ARCH_LOCAL_SHARE DMDSC 集群本地归档是否共享给远程节点作为远程归档。
注:自V8.1.3.61版本起废弃该参数,始终共享
ARCH_LOCAL_SHARE_CHECK 是否进行LOCAL归档和REMOTE归档路径的一致性校验。
注:自V8.1.3.61版本起废弃该参数,始终校验
ARCH_SEND_POLICY 主库发送REALTIME归档的策略,取值0或1,缺省为0。0:主库发送REALTIME归档后立即等待备库响应消息;1:主库发送REALTIME归档后不立即等待备库的响应消息,而是先将当前日志包写入联机日志文件,然后再等待备库响应消息。
当此参数配置为1时,日志包刷盘与等待备库响应的动作等效于并发执行,相比于配置为0的策略而言,能够减少主库日志刷盘线程因等待备库响应消息而阻塞的时间,降低REALTIME备库对主库性能的影响。 TIMELY主备不支持此参数;DMDSC集群中也不支持配置此参数,但允许在DMDSC主备中的单机库上配置此参数。
注意:如果主库将ARCH_SEND_POLICY配置为1,且守护进程配置为自动接管模式,则备库自动接管可能会有集群分裂的风险,需要谨慎使用此配置方式
XMAL_HB_INTERVAL DMDPC专用。节点间通信检测间隔。单位S,取值范围1~600。该参数仅在多副本集群中使用,多副本各实例需配置相同
RAFT_HB_INTERVAL DMDPC专用。主库广播心跳消息的间隔时间。单位MS,取值范围5~1800。该参数仅在多副本集群中使用,多副本各实例需配置相同
RAFT_VOTE_INTERVAL DMDPC专用。选举超时时间。单位MS,取值范围10~60000。这个配置值需要保证至少是RAFT_HB_INTERVAL的2倍大小,确保在选举超时时间内能够收到主库的心跳消息,避免误判主库故障发起无效选举。建议各实例配置为不同的值,以便能够快速选举出主库,配置的值越小,被选举为主库的优先级越高。该参数仅在多副本集群中使用,并且仅在开启选举开关的实例上有效
RAFT_SELF_ID DMDPC专用。多副本节点编号,用于标识多副本RAFT组中不同的节点。取值范围0~31
RAFT_LEARNER DMDPC专用。用于标识自己是否为LEARNER角色。1:是,0:否。 参数缺省为0,非LEARNER节点可不配置此参数
RAFT_PKG_INTERVAL DMDPC专用。专用于多副本环境中,设置备库接收主库日志包的超时时间。当备库超过该时间还未接收到主库日志包,则备库主动断开与主库连接。单位S,取值范围60~36000。缺省为不配置该参数。可选参数
[ARCHIVE_LOCAL1] 本地归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档路径。需要配置在ARCH_TYPE之后
ARCH_FILE_SIZE 单个归档文件大小,单位MB,取值范围64~2048,缺省为1024MB,即1G
ARCH_SPACE_LIMIT 本地归档文件空间限制。当同一节点号的本地归档文件达到限制值时,系统自动删除最早生成的本地归档日志文件。0表示无空间限制,取值范围1024~2147483647,缺省为0,单位MB
ARCH_FLUSH_BUF_SIZE 归档刷盘缓存大小,单位MB,取值范围0~128。0表示不使用归档刷盘缓存机制。缺省为2
ARCH_HANG_FLAG 本地归档写入失败时系统是否挂起。取值范围0~2;缺省为1。
0:写入失败后不挂起,直接报错返回,不再尝试写入;
1:写入失败后挂起,反复尝试写入归档,直到写入成功;
2:写入失败后先删除最老的归档文件,再重新尝试写入,反复进行该过程直到归档写入成功,或者所有归档文件都已经被删除;若所有归档文件都已经被删除的情况下仍然写入失败,则直接报错返回,不再尝试写入。
需要注意的是,若当前库配置的所有本地归档ARCH_HANG_FLAG均为非1值,则写入归档失败后可能会出现归档日志缺失的情况,进而可能产生特定情况下备份还原无法正常进行等问题
ARCHIVE_REALTIME 实时归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档目录实例名。需要配置在ARCH_TYPE之后
WAIT_APPLY 若归档目标未配置WAIT_APPLY,则以全局ARCH_WAIT_APPLY为准;若某一个归档目标配置了WAIT_APPLY,则对应归档目标是否是事务一致由配置的WAIT_APPLY为准。取值:0:表示高性能模式;1:表示事务一致模式
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值0:否;1:是。默认值为0
ARCHIVE_ASYNC 异步归档 ARCH_TYPE 归档类型
ARCH_DEST 归档目录实例名。需要配置在ARCH_TYPE之后
ARCH_TIMER_NAME 定时器名称。需要配置在ARCH_TYPE之后
ARCH_SEND_DELAY 指定源库到异步备库的归档延时发送时间,单位分钟,取值范围0~1440,缺省为0,表示不启用归档延时发送功能。
注:仅在异步归档类型中支持此配置项,其他归档类型不支持。如果源库是DSC集群,建议用户配置时保证各节点上配置的值是一致的,并保证各节点所在机器的时钟一致,避免控制节点发生切换后计算出的归档延迟发送时间不一致
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值0:否;1:是。默认值为0
ARCHIVE_SYNC 同步归档 ARCH_TYPE 归档类型
ARCH_DEST 归档目录实例名。需要配置在ARCH_TYPE之后
ARCH_RECOVER_TIME 主库向同步备库发起异步恢复的时间间隔,单位秒,取值范围1~86400,缺省为1,表示主库每隔1秒检查一次同步备库的归档状态,若为INVALID且和同步备库通信正常,则发起异步恢复。
注:仅在同步归档类型中支持配置此项,其他归档类型不支持
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值0:否;1:是。默认值为0
ARCHIVE_TIMELY 即时归档 ARCH_TYPE 归档类型
ARCH_DEST 归档目录实例名。需要配置在ARCH_TYPE之后
WAIT_APPLY 若归档目标未配置WAIT_APPLY,则以全局ARCH_WAIT_APPLY为准;若某一个归档目标配置了WAIT_APPLY,则对应归档目标是否是事务一致由配置的WAIT_APPLY为准。取值:0:表示高性能模式;1:表示事务一致模式
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值0:否;1:是。默认值为0
[ARCHIVE_RAFT1] RAFT归档 ARCH_TYPE 归档类型。ARCH_TYPE支持配置为RAFT和LEARNER。其中LEARNER归档仅在动态增删节点时使用
ARCH_DEST 归档目标实例名。需要配置在ARCH_TYPE之后
ARCH_DEST_ID 归档目标多副本节点编号,用于标识多副本RAFT组中不同的节点。取值范围0~31
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值0:否;1:是。默认值为0
REMOTE 远程归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档目录实例名。需要配置在ARCH_TYPE之后
ARCH_INCOMING_PATH 指定远程归档目标ARCH_DEST的本地归档日志文件存放路径。需要配置在ARCH_TYPE之后
ARCH_RECV_PATH 修复故障节点归档,直接将联机日志检查点偏移后的所有有效日志拷贝一份写入本地路径

相关说明

  1. 归档类型 ARCH_TYPE 有以下几种:

    本地归档 LOCAL(一台主库最多配 8 个)

    远程实时归档 REALTIME(一台主库最多配 8 个)

    远程异步归档 ASYNC(一台主库最多配 8 个)

    同步归档 SYNC(一台主库最多配 8 个)

    即时归档 TIMELY(一个主库最多配 8 个)

    远程归档 REMOTE(一个主库最多配 8 个)

    RAFT 归档 RAFT/LEARNER (一个主库最多配 8 个)

  2. 配置名[ARCHIVE_*]表示归档名,在配置文件中必须唯一。

  3. 不能存在相同实例名的不同归档。

  4. 不能存在 DEST 相同的不同归档实例。

  5. ARCH_TIMER_NAME 为定制的定时器名称,定时器配置见 dmtimer.ini。

  6. 对于一个归档配置,ARCH_TYPE 需要配置在 ARCH_DEST、ARCH_TIMER_NAME、ARCH_INCOMING_PATH 之前。

  7. ARCH_STANDBY_APPLY 参数支持 REALTIME/TIMELY/SYNC/ASYNC/RAFT 归档,如果多个归档目标都配置了此字段,当前库会根据重已重演 LSN 值最小的备库重演信息确定自身本地归档是否可以删除。当主库配置了本地归档文件空间限制参数 ARCH_SPACE_LIMIT,同一节点号的本地归档文件已经达到空间上限,但归档又不满足删除条件的情况下,仍然正常创建新文件,不再做挂起处理,优先保证主库服务不中断。如果备库一直故障,主库从未获取过此备库的 apply 信息,则不允许删除任何日志;如果曾经获取过此备库的 apply 信息,则以此历史信息为准判断是否删除。不要求备库一定和主库配置一致,备库切换主库后,将按照新主库的配置情况来决定如何删除归档,主备切换后,有可能还是会发生归档已经被清理的情况。对于异步备库的级联配置情况,异步备库会根据级联的备库重演情况决定自身的本地归档是否可删除。没有级联配置的备库,不受此参数控制。

  8. 关于 DSC 环境的本地归档清理规则说明如下:

    (1)查询 V$ARCH_FILE 时,DSC 环境不仅会有本地归档还会有远程归档,若是 ASM 环境,还可能查出 DSC 集群其他节点的本地归档和远程归档。本地归档空间上限和远程归档空间上限分开计算。

    (2)配置 ARCH_STANDBY_APPLY=1 后,DSC 为备库时,主库归档空间达到上限后,按照 DSC 控制节点的重演情况清理本地归档。

    (3)当主库是 DSC 集群,备库生成本地归档时会按照收到日志包的节点号分开保存归档(对于主库是 DSC2 节点的场景,备库收到 0 号节点发送过来的日志包产生的归档文件加入到 0 号归档链表中,备库收到 1 号节点发送过来的日志包产生的归档文件加入到 1 号归档链表中)。两个归档文件链表的空间上限分开计算。若此后又发生主备切换,新主库为单机库的场景,主库生成的新归档文件仅会加入到 0 号归档链表中。

2.1.1.4 sqllog.ini

sqllog.ini 用于 SQL 日志的配置,当且仅当 INI 参数 SVR_LOG=1 时使用。

2.1.1.4.1 sqllog.ini 配置项

sqllog.ini 的详细配置请参考下表。

表2.32 sqllog.ini的配置项
参数名 缺省值 属性 说明
SQL_TRACE_MASK 1 动态,系统级 指定 SQL 日志中需要被记录的语句类型。为了避免日志量过大,建议用户根据实际需要有选择地指定,而非一律全部指定。
指定方式为 SQL_TRACE_MASK=位号:位号:位号……。例如:3:5:7 表示第 3,第 5,第 7 位号代表的类型需要被记录在 SQL 日志中。
以下位号均可以单独使用,也可以搭配使用,其中位号 2~17 与 23、24、25、26、28 搭配使用时,表示取其交集。
例如:SQL_TRACE_MASK=2 表示记录 DML 语句;SQL_TRACE_MASK=24 表示记录执行语句;SQL_TRACE_MASK=29 表示记录事务相关语句;SQL_TRACE_MASK=2:3:24:29 表示记录 DML 和 DDL 的执行语句以及事务相关语句。
位号的含义如下所示:
1 全部记录(等同于同时设置 4~31)
2 DML 类型相关语句(等同于同时设置 4~10)
3 DDL 类型相关语句(等同于同时设置 11~17)
4 UPDATE 类型语句(更新)
5 DELETE 类型语句(删除)
6 INSERT 类型语句(插入)
7 SELECT 类型语句(查询)
8 COMMIT 类型语句(提交)
9 ROLLBACK 类型语句(回滚)
10 CALL 类型语句(过程调用)
11 BACKUP 类型语句(备份)
12 RESTORE 类型语句(恢复)
13 创建对象操作(CREATE DDL)
14 修改对象操作(ALTER DDL)
15 删除对象操作(DROP DDL)
16 授权操作(GRANT DDL)
17 回收操作(REVOKE DDL)
22 记录绑定参数的行数
23 记录存在错误的语句(语法错误,语义分析错误等)
24 记录执行语句
25 记录执行语句、执行语句的时间、语句的影响行数(只有增删改查有行数,其它语句无行数)
26 记录执行语句的时间、语句的影响行数(只有增删改查有行数,其它语句无行数)。25 和 26 二者只能选择其一。25 和 26 同时存在时,只有 25 有效
27 记录原始语句(服务器从客户端收到的未加分析的语句)
28 记录参数信息,包括参数的序号、数据类型和值
29 记录事务相关事件,包括锁类型、锁等待时间等
30 记录 XA 事务
31 记录数据库登录操作,包括登录成功、登录失败、退出登录
FILE_NUM 5 动态,系统级 总共记录多少个日志文件,当日志文件达到这个设定值以后,再生成新的文件时,会删除最早的那个日志文件。取值范围 2~1024。日志文件名称中将包含日期时间信息,关于日志文件命名格式的详细介绍请参考 2.8 SQL 日志文件
SWITCH_MODE 2 动态,系统级 表示 SQL 日志文件切换的模式:
0:不切换
1:按文件中记录数量切换
2:按文件大小切换
3:按时间间隔切换
SWITCH_LIMIT 与切换模式有关 动态,系统级 不同切换模式 SWITCH_MODE 下,意义不同:
1 按数量切换时,一个日志文件中的 SQL 记录条数达到多少条之后,系统自动将日志切换到另一个文件中。取值范围 1000~10000000,缺省为 100000
2 按文件大小切换时,一个日志文件达到该大小后,系统自动将日志切换到另一个文件中,单位 MB。取值范围 1~2000,缺省为 128
3 按时间间隔切换时,每隔指定的时间间隔,系统自动将日志切换到另一个文件中,单位分钟。取值范围 1~30000,缺省为 60
ASYNC_FLUSH 1 动态,系统级 是否打开 SQL 日志异步刷盘功能。0:否,采用实时刷盘;1:是,采用异步刷盘
MIN_EXEC_TIME 0 动态,系统级 记录的最小语句执行时间,单位毫秒。执行时间小于该值的语句不记录在日志文件中。取值范围 0~2147483647
FILE_PATH ../log 动态,系统级 SQL 日志文件所在的文件夹路径。缺省生成在 DM 安装目录的 log 子目录下面
BUF_TOTAL_SIZE 10240 动态,系统级 SQL 日志 buffer 占用空间的上限,单位为 KB,取值范围 1024~1024000
BUF_SIZE 1024 动态,系统级 一块 SQL 日志 BUFFER 的空间大小,单位为 KB,取值范围 50~409600
BUF_KEEP_CNT 6 动态,系统级 系统保留的 SQL 日志缓存的个数,取值范围 1~ 100
PART_STOR 0 动态,系统级 SQL 日志分区存储,表示 SQL 日志进行分区存储的划分条件。 0 表示不划分;1 表示 user:根据不同用户分布存储
ITEMS 0 动态,系统级 指定一条 SQL 日志中应包含的内容。指定方式为 ITEMS=位号:位号:位号……。 例如:ITEMS=3:5:7。表示应包含第 3、第 5、第 7 位代表的内容。
0 表示记录除 CLIENT_INFO 外的所有的列(等同于同时设置 1~12,默认不设置 13)
1 TIME 执行的时间
2 SEQNO 服务器的站点号
3 SESS 操作的 SESS 地址
4 USER 执行的用户
5 TRXID 事务 ID
6 STMT 语句地址
7 APPNAME 客户端工具
8 IP 客户端 IP
9 STMT_TYPE 语句类型。分别为[ORA]表示原始语句(服务器从客户端收到的未加分析的语句) 、[DDL]表示 DDL 语句、[INS]表示 INSERT 语句、[DML]表示 DML 语句、[CAL]表示 CALL 语句、[UPD] 表示 UPDATE 语句、[DEL] 表示 DELETE 语句、[SEL]表示 SELECT 语句、[LGN]表示登录登出语句
10 INFO 记录内容,记录当前执行的 SQL 语句
11 RESULT 运行结果,包括运行用时、影响行数和 EXEC_ID(可能没有)
12 THRD 线程地址
13 CLIENT_INFO 客户端主机名(不能与 0 同时使用)
USER_MODE 0 动态,系统级 SQL 日志按用户过滤时的过滤模式,取值
0:关闭用户过滤
1:白名单模式,只记录列出的用户操作的 SQL 日志
2:黑名单模式,列出的用户不记录 SQL 日志
USERS 空串 动态,系统级 打开 USER_MODE 时指定的用户列表。格式为:用户名:用户名:用户名
EXECTIME_PREC_FLAG 0 动态,系统级 设置 SQL 日志中执行时间 exectime 的时间单位。0:单位为毫秒 ms;1:单位为微秒 us
2.1.1.4.2 sqllog.ini 用法

sqllog.ini 在 INI 参数 SVR_LOG=1 时启用。

如果在服务器启动过程中,修改了 sqllog.ini 文件,须调用过程 SP_REFRESH_SVR_LOG_CONFIG()才会生效。

sqllog.ini 配置文件的内容分为全局配置区和模式配置区。

全局配置区为 sqllog.ini 文件头中无模式的配置区。全局配置区内允许配置所有的配置项,包括全局配置项(参数 BUF_TOTAL_SIZE、BUF_SIZE、 BUF_KEEP_CNT)和模式内配置项(除 BUF_TOTAL_SIZE、BUF_SIZE、 BUF_KEEP_CNT 的其他参数)。其中,全局配置项对全部模式生效,配置的参数的优先级为:模式配置区配置的值 > 全局配置区配置的值 > 缺省值。

模式配置区位于全局配置区后面,以“[模式名]”开头,可配置表 2.32 sqllog.ini 的配置项中除了 BUF_TOTAL_SIZE、BUF_SIZE、 BUF_KEEP_CNT 三个参数之外的所有参数,只对本模式生效。

下面以一个简单的 sqllog.ini 为例。配置好 sqllog.ini 后,需同时开启 INI 参数 SVR_LOG=1,SVR_LOG_NAME=SLOG_ALL 之后,sqllog.ini 和 SLOG_ALL 模式参数才能生效。

#  以#开头的行表示是注释
#  全局配置区
BUF_TOTAL_SIZE          = 10240         #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE                = 1024          #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT            = 6             #SQLs Log buffer keeped count(1~100)

#  模式配置区。此处模式名为SLOG_ALL
[SLOG_ALL]
    FILE_PATH    = ../log
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 128
    ASYNC_FLUSH   = 1
    FILE_NUM = 5
    ITEMS    = 0 
    SQL_TRACE_MASK  = 1
    MIN_EXEC_TIME = 0 
    USER_MODE   = 0 
    USERS =

当 SVR_LOG 为 1 时,但 sqllog.ini 不存在,或 sqllog.ini 存在但是配置的多个模式名均不在 INI 参数 SVR_LOG_NAME 中的情况下,按照各配置项的系统默认值记录 SQL 日志。在系统默认值中,模式名为*<*DEFAULT>。

通过动态视图 V​DM_SQLLOG_INI和VDM_SQLLOG_CONFIG 可以分别查询 sqllog.ini 文件和内存中的 SQL 日志配置参数,由于视图中使用*<PUBLIC> 来标记全局配置参数,并且使用 <DEFAULT> 来标记系统默认配置,因此 sqllog.ini 中不允许指定模式名为 <PUBLIC> 或 <*DEFAULT>。

sqllog.ini 中可以配置多个模式配置区。不同模式配置区中的配置项(数量或取值)可以不同。例如:记录过滤掩码,刷盘方式,文件切换方式等。当各模式的 items 设置不同时,使用其并集。仅当配置的模式名存在于 INI 参数 SVR_LOG_NAME 中时,该模式名对应配置才会生效。当配置为多模式时,会在日志文件名中的实例名后面加上该日志文件对应的模式名。

例 在 INI 参数 SVR_LOG=1 时,sqllog.ini 文件中配置了两个模式,模式名分别是 SLOG_ALL 和 SLOG_LOGIN,SLOG_ALL 模式指定日志中记录全部记录,SLOG_LOGIN 模式指定日志中仅记录数据库登录操作。

BUF_TOTAL_SIZE          = 10240         #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE                = 1024          #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT            = 6             #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
    FILE_PATH    = ../log
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 128
    ASYNC_FLUSH   = 1
    FILE_NUM = 5
    ITEMS    = 0 
    SQL_TRACE_MASK  = 1
    MIN_EXEC_TIME = 0 
    USER_MODE   = 0 
    USERS =

[SLOG_LOGIN]
    FILE_PATH    = ../log
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 128
    FILE_NUM = 5
    ITEMS    = 0 
    SQL_TRACE_MASK  = 31

2.1.1.5 dmthrd.ini

dmthrd.ini 用于为线程类型绑定 CPU 核心,当且仅当 INI 参数 DMTHRD_INI=1 时使用。

2.1.1.5.1 dmthrd.ini 配置项

dmthrd.ini 支持的线程类型请参考下表。

表2.33 dmthrd.ini支持的线程类型
线程类型 说明
dm_audit_thd 审计日志刷盘线程
dm_timwrk_thd 定时器线程
dm_rapply_thd 日志重演工作线程,备用节点从主节点获取重演日志
dm_rapredo_thd 日志并行重演线程
dm_iocp_thd sess 线程池打开时的任务监控线程
dm_wrkgrp_thd 会话连接并发处理线程
dm_sqllog_thd DMSERVER 的 dmsql 写线程
dm_rtrd_thd 高可用集群远程读线程
dm_gbswrk_thd 全局闩服务工作线程
dm_glswrk_thd 全局锁服务工作线程
dm_gtvwrk_thd 全局事务视图工作线程
dm_aux_thd 全局事务视图 AUX 系统线程
dm_hio_thd HUGE 文件系统 IO 线程
dm_osio_thd 系统 IO 线程
dm_purge_thd 清除线程
dm_Lbswrk_thd 本地闩服务工作线程
dm_Llswrk_thd 本地锁服务工作线程
dm_Ltvwrk_thd 本地事务视图工作线程
dm_redolog_thd 日志重做线程,日志刷盘
rlog4_enc_cmpr_thd 日志加密压缩线程
dm_asm_io_thd dmasm 系统 IO 线程
dm_async_send_tHd 异步归档发送线程
dm_rsyswrk_thd 异步归档工作线程
dm_llog_thd 逻辑日志线程
dm_sched_thd 调度线程,接管系统中所有需要定时调度的任务
dm_pwr_thd PWR 日志刷盘线程
dm_chkpnt_thd 检查点刷盘线程
dm_trxbro_thd 活动事务视图广播线程
dm_lpq_thd 本地并行工作线程
dm_tskwrk_thd 解析执行 SQL 语句的任务工作线程
dm_sql_thd 会话工作线程
2.1.1.5.2 dmthrd.ini 用法

dmthrd.ini 在 INI 参数 DMTHRD_INI=1 时启用。

dmthrd.ini 中为线程类型绑定 CPU 核心的语法如下:

<线程类型名> = [<最小值>, <最大值>] 

或

<线程类型名> = [<绑定值>]

< 线程类型名 >:指定线程类型,支持的线程类型请参考[2.1.1.6.1 dmthrd.ini 配置项](#2.1.1.6.1 dmthrd.ini 配置项)。

[< 最小值 >, < 最大值 >]:非负整数,指定 CPU 核心的绑定范围。例如设置 DM_AUDIT_THD=[0,2],表示创建审计日志刷盘线程时会循环绑定编号为 0、1、2 的三个 CPU 核心。

[< 绑定值 >]:非负整数,表示仅绑定一个 CPU 核心,例如设置 DM_AUDIT_THD=[2],表示仅绑定编号值为 2 的 CPU 核心,等同于 DM_AUDIT_THD=[2,2]。

线程类型绑定 CPU 核心的注意事项如下:

  1. < 最小值 > 或者 < 最大值 > 缺省时,默认值为 0。例如 DM_AUDIT_THD=[,1]等同于 DM_AUDIT_THD=[0,1];
  2. < 最小值 > 不能大于 < 最大值 >,否则生成错误日志,并将 < 最大值 > 作为 < 最小值 >。例如 DM_AUDIT_THD=[2,1]等同于 DM_AUDIT_THD=[1,1];
  3. < 最大值 > 或 < 绑定值 > 不能大于当前机器的 CPU 核心数量,否则生成错误日志,并将其调整为 CPU 核心数量减 1;
  4. 如果对同一个线程类型多次绑定 CPU 核心,则以最后一次绑定范围或绑定值为准;
  5. 所有线程类型默认不绑定 CPU 核心。

下面以一个简单的 dmthrd.ini 为例。配置好 dmthrd.ini 后,需开启 INI 参数 DMTHRD_INI=1,dmthrd.ini 才能生效。

# 以#开头表示是注释

DM_TSKWRK_THD  = [0,15]     #创建DM_TSKWRK_THD类型线程时循环绑定编号在0~15范围内的CPU核心

DM_SQL_THD = [16,31]       #创建DM_SQL_THD类型线程时循环绑定编号在16~31范围内的CPU核心

2.1.2.6 dmtimer.ini

dmtimer.ini 用于配置定时器,用于数据守护中记录异步备库的定时器信息中记录异步复制的定时器信息。dmtimer.ini 的配置项见下表。

表2.34 dmtimer.ini的配置项
配置项 配置含义
[TIMER_NAME1] 定时器名称。例如,名为 RT 的定时器,名称书写方式为[RT]
TYPE 定时器调度类型:
1:执行一次。时间上只需要指定 DURING_START_DATE 即可,不需要指定 START_TIME、END_TIME 和 DURING_END_DATE
2:按日执行
3:按周执行
4:按月执行的第几天
5:按月执行的第一周
6:按月执行的第二周
7:按月执行的第三周
8:按月执行的第四周
9:按月执行的最后一周
10: 按 REPEAT_INTERVAL 指定的日历表达式的频率进行。不再需要通过 START_TIME、END_TIME、DURING_START_DATE 和 DURING_END_DATE 指定时间
FREQ_MONTH_WEEK_INTERVAL 间隔月或周数。这个列的可选值与上面的不同调度类型有关。表示执行的频率。
说明如下:
当 TYPE=1 时,这个值无效,系统不会做检查。
当 TYPE=2 时,表示每隔几天执行,值的有效范围为 1 到 100。
当 TYPE=3 时,表示的是每隔几个星期执行,值的范围没有具体的限制。
当 TYPE=4 时,表示每几个月中的某一天执行,值的范围没有具体的限制。
当 TYPE 为 5、6、7、8 或 9 时,都表示每几个月的某一周执行,值的范围也没有具体的限制
FREQ_SUB_INTERVAL 间隔天数。这个列的可选值与上面的不同调度类型有关。表示执行的频率,在 FREQ_MONTH_WEEK _INTERVAL 基础上,继续指定更为精细的频率。
说明如下:
当 TYPE=1 或 2 时,这个值无效,系统不会做检查。
当 TYPE=3 时,表示的是某一个星期的星期几执行,可以同时选中七天中的任意几天。取值范围 1~127。具体如何取值,请用户参考如下规则。因为每周有七天,所以 DM 用七位二进制来表示选中的日子。从最低位开始算起,依次表示周日、周一...周五、周六。选中周几,就将该位置 1,否则 0。例如:选中周二和周六,7 位二进制就是 1000100,转化成十进制就是 68,所以 FREQ_SUB_INTERVAL 就取值 68。
当 TYPE=4 时,表示将在一个月的第几天执行,此时这个列的有效值范围为 1 到 31
当 TYPE 为 5、6、7、8 或 9 时,都表示将在某一周内第几天执行,有效值为 1 到 7,分别表示从周一到周日
FREQ_MINUTE_INTERVAL 间隔分钟数。
当 TYPE 为 2、3、4、5、6、7、8 或 9 时,在 FREQ_MONTH_WEEK_INTERVALHE 和 FREQ_SUB_INTERVAL 的基础上,继续指定更为精细的频率。表示一天内每隔多少分钟执行一次。取值范围 0~1439,0 表示一天内执行一次
REPEAT_INTERVAL 当 TYPE 为 10 时使用,用来指定的日历表达式。语法详见《DM8 系统包使用手册》手册 DBMS_SCHEDULER 包中关于 REPEAT_INTERVAL 的介绍
START_TIME 定时器开始时间,TIME 类型。例如:20:59:59.999999
END_TIME 定时器结束时间,TIME 类型
DURING_START_DATE 指定定时器的有效日期范围的起始日期,必须是有效的日期字符串,不可以为空。TIMESTAMP 类型。例如:2021-12-15 10:00:00
DURING_END_DATE 指定定时器的有效日期范围的结束日期,可以为空。如果不为空,必须是有效的日期字符串,同时必须是在 DURING_START_DATE 日期之后。TIMESTAMP 类型
NO_END_DATE_FLAG 是否结束标记。1 是,0 否
DESCRIBE 定时器描述
IS_VALID 定时器有效标记,缺省为 0。
0:表示已关闭定时器
1:表示已启用定时器

2.1.2 客户端配置文件

dm_svc.conf 是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置的一些参数。它必须和接口/客户端工具位于同一台机器上才能生效。

初始 dm_svc.conf 文件在 DM 安装时自动生成。不同平台的生成目录有所不同。

  1. 32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  2. 64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  3. 32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
  4. 在 Linux 平台下,此文件位于/etc 目录。

可以通过设置操作系统环境变量 DM_SVC_PATH 来修改 dm_svc.conf 文件路径。

2.1.2.1 dm_svc.conf 配置项

2.1.2.1.1 JDBC/.NET PROVIDER/NODE JS/Go 接口

下表中列举了 DM 对 JDBC/.NET PROVIDER/NODE JS/Go 接口配置项的支持情况,其中 √ 表示支持,× 表示不支持。

表 2.35 JDBC/.NET PROVIDER/NODE JS/Go 接口配置项介绍

配置项 缺省值 简述 JDBC .NET PROVIDER NODE JS GO
服务名 连接服务名,参数值格式为ip[:port],ip[:port],......
ADDRESS_REMAP 库地址重定向,格式ADDRESS_REMAP =(IP:PORT, IP:PORT),多个:
ADDRESS_REMAP =(IP:PORT, IP:PORT)
ADDRESS_REMAP =(IP:PORT, IP:PORT)
×
ALWAYS_ALLOW_COMMIT TRUE 在自动提交开关打开时,是否允许手动提交回滚;取值1/0 或 true/false;默认true ×
APP_NAME 客户端应用程序名称
AUTO_COMMIT TRUE 是否自动提交;取值1/0 或 true/false;默认true ×
EP_SELECTOR 0 连接数据库时采用何种模型建立连接。在JDBC中,该配置项的取值为大于或等于0的整数,0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;其余大于0整数表示选择列表中第几个节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接,若配置的值超过服务名列表的节点数,则连接第 (epSelector % 服务名列表节点数) 个节点;
在.NET PROVIDER、NODE.JS、GO中,该配置项的取值为0或1,0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接
AUTO_RECONNECT (DO_SWITCH别名) 0 连接发生异常或一些特殊场景下连接处理策略。0:关闭连接;1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2:配合EP_SELECTOR=1使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上;4:保持各节点会话动态均衡,通过后台线程检测节点及会话数变化,并切换连接使之保持均衡。
也可以将AUTO_RECONNECT置为上述几个值的组合值,表示同时进行多项配置,如置为3表示同时配置1和2
×
BATCH_ALLOW_MAX_ERRORS 0 开启批量执行出错时继续时,批量执行最大可容错行数。达到上限则停止执行,但不报错。如设置0则无限制。默认0 ×
BATCH_CONTINUE_ON_ERROR (CONTINUE_BATCH_ON_ERROR别名) FALSE 批量执行出错时是否继续执行;缺省为false;取值true/True,false/False;true/True:是,false/False:否 ×
BATCH_NOT_ON_CALL FALSE 执行SQL为存储过程时,是否允许一次执行多行参数。缺省为FALSE ×
BATCH_TYPE 1 批处理模式;1 表示批量绑定执行 2 表示一行一行执行;默认1 ×
BUF_PREFETCH 0 结果集fetch预取消息buffer大小;单位KB,有效值范围32~65535。默认0表示按服务器配置,若结果集上指定了fetchSize会自动预估大小 ×
BUFFER_TYPE 0 消息缓存类型。取值0:byte数值;1:java堆内存buffer;2:直接内存buffer × × ×
CIPHER_PATH 第三方加密算法的路径 × ×
CLOB_AS_STRING FALSE clob类型列调用resultSetMetaData的getColumnType()映射为Types.VARCHAR类型;取值1/0 或 true/false;默认false × × ×
CLUSTER 连接的集群类型;DSC表示共享存储集群 ×
COLUMN_NAME_CASE 列名大小写统一;取值upper:全部大写;lower:全部小写 ×
COLUMN_NAME_UPPER_CASE FALSE 列名转换为大写字母;取值1/0 或 true/false;默认false ×
COMPATIBLE_MODE 兼容其他数据库;取值为数据库名称:oracle表示兼容oracle,mysql表示兼容mysql ×
COMPRESS(COMPRESS_MSG别名) 0 是否压缩消息。取值范围0~2。0表示不压缩;1表示完全压缩,采用第三方压缩包进行压缩;2表示优化的压缩,只有当消息长度超过8192字节并且非本地连接,才会采用第三方压缩包进行压缩,其他情况不压缩。缺省为0。采用的第三方压缩包类型由compressID指定 ×
COMPRESS_ID 0 消息压缩算法标识,最终与服务器支持情况协商决定。取值0和1。缺省为0。 0指定zip算法,zip算法由第三方压缩包jzlib-X.X.X.jar提供;1指定snappy算法,snappy算法由第三方压缩包snappy-java- X.X.X.jar提供。X.X.X表示版本号。 指定了compressID 参数后,用户JAVA代码中须引用相应的第三方压缩包。第三方压缩包位于DM安装目录\tool\dropins\com.dameng\plugins\com.dameng.third中 ×
COMPRESS_MSG(别名COMPRESS) 0 是否启用消息压缩。0:不启用;1:启用;2:自适应压缩。即自动选取长度较长的通信消息进行压缩;短消息不需要压缩,直接传输效率更高 ×
CONNECT_TIMEOUT 5000 连接超时时间,单位为毫秒。0表示无限制 ×
CONTINUE_BATCH_ON_ERROR FALSE 批量执行出错时是否继续执行;默认false;取值(true/True,false/False) ×
DATABASE_PRODUCT_NAME 数据库产品名称 × × ×
DB_ALIVE_CHECK_FREQ 0 检测数据库是否存活的频率;单位ms,有效值范围0~2147483647,0表示不检测;默认0 × × ×
DBMD_CHK_PRV TRUE 编目函数是否进行权限检测;取值1/0 或 true/false;默认true × × ×
DO_SWITCH 0 连接发生异常或一些特殊场景下连接处理策略;0表示关闭连接;1表示当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个SQLException,用于通知上层应用进行事务执行失败时的相关处理; 2包含1的功能,并配合epSelector使用,检测故障库的恢复,恢复后将当前连接切换回前面的数据库 ×
ENABLE_RS_CACHE 0 是否进行客户端结果集缓存。0:不进行;1:进行 ×
ESCAPE_PROCESS TRUE 是否进行语法转义处理;取值1/0 或 true/false;默认true
HOST localhost 主库地址,包括IP地址、localhost或者配置文件中主库地址列表对应的变量名,如dm_svc.conf中的’o2000’ × ×
IGNORE_CASE TRUE 结果集列名是否忽略大小写;取值1/0 或 true/false;默认true × × ×
IS_BDTA_RS TRUE 是否使用列模式结果集,需同步服务器开启该功能;取值1/0 或 true/false;默认true ×
KERBEROS_LOGIN_CONF_PATH 用户名加前缀”///”标识开启kerberos认证,该参数指定kerberos认证登录配置文件路径 × × ×
KEY_WORDS(KEYWORDS别名) 标识用户关键字,所有在列表中的字符串,如果以单词的形式出现在sql语句中,则这个单词会被加上双引号;默认为空串
KEYWORDS 标识用户关键字,所有在列表中的字符串,如果以单词的形式出现在sql语句中,则这个单词会被加上双引号。该参数主要用来解决用户需要使用DM8中的保留字作为对象名使用的状况
LANGUAGE 操作系统语言 当前数据库服务器使用的语言,会影响帮助信息错误和提示信息。支持的选项为:CN(表示中文)和EN(表示英文)。可以不指定,若不指定,系统会读取操作系统信息获得语言信息,建议有需要才指定
LOB_MODE 1 大字段数据获取模式;1 表示get数据时从服务器段获取,2 表示结果集生成时将大字段数据完整缓存到本地;默认1 ×
LOG_DIR 日志等其他一些JDBC过程文件生成目录,默认为jvm当前工作目录
LOG_FLUSH_FREQ 60 日志刷盘频率;单位s,有效值范围0~2147483647;默认60 ×
LOG_LEVEL off 生成日志的级别,日志按从低到高依次如下(off:不记录;error:只记录错误日志;warn:记录警告信息;sql:记录sql执行信息;info:记录全部执行信息;all:记录全部),高级别同时记录低级别的信息;默认off
LOGIN_CERTIFICATE 指定登录加密用户名密码公钥所在的路径,一旦配置即认为开启了客户端的证书加密用户名密码模式 × ×
LOGIN_DSC_CTRL 0 服务名连接数据库时是否只选择dsc control节点的库。0:否;1:是
注:不建议与EP_SELECTOR同时使用
×
LOGIN_MODE 4 指定优先登录的服务器模式。0:优先连接Primary模式的库,Normal模式次之,最后选择Stantby模式;1:只连接主库;2:只连接备库;3:优先连接Standby模式的库,Primary模式次之,最后选择Normal模式;4:优先连接Normal模式的库,Primary模式次之,最后选择Standby模式
LOGIN_STATUS 0 连接时只连状态匹配的库; 0表示不限制;3表示mount状态;4 表示open状态;5 表示suspend状态;默认0 ×
MARK_CONF 网络M标配置文件路径 × × ×
MAX_ROWS 0 结果集行数限制,超过上限结果集截断;有效值范围0~2147483647,0表示无限制;默认0 ×
MPP_LOCAL FALSE 是否MPP本地连接;取值1/0 或 true/false;默认false ×
MPP_OPT 0 Mpp集群批量插入数据的优化处理;范围0~1;默认0 × × ×
OS_AUTH_TYPE 0 指定操作系统认证用户类型,开启操作系统认证时,用户名使用系统用户名。0 表示关闭;1 表示DBA;2 表示SSO; 3 表示AUDITOR;4 表示自适应。默认0 × ×
OS_NAME 操作系统名称 操作系统名称
PASSWORD 登录密码 × ×
PORT 5236 端口号,服务器登录端口号 × ×
PSTMT_POOL_SIZE 0 prepare语句句柄池大小;有效值范围0~2147483647,0表示关闭;默认0 × ×
PSTMT_POOL_VALID_TIME 0 prepare语句缓存的有效时间;单位ms, 有效值范围0~2147483647,0表示无限制;默认0 × × ×
RESULT_SET_TYPE ResultSet.TYPE_FORWARD_ONLY 指定默认创建结果集类型;取值为java标准中的ResultSet.TYPE_FORWARD_ONLY,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.TYPE_SCROLL_SENSITIVE,默认ResultSet.TYPE_FORWARD_ONLY × × ×
RS_CACHE_SIZE 20 设置结果集缓冲区大小,以M为单位。有效值为1~65535,如果设置太大,可能导致空间分配失败,进而使缓存失效 ×
RS_REFRESH_FREQ 10 结果集缓存检查更新的频率,以秒为单位,有效值为0~10000,如果设置为0,则不需检查更新 ×
RW_AUTO_DISTRIBUTE TRUE 读写分离系统事务分发是否由JDBC自动管理;取值1/0 或 true/false;默认true;false:事务分发由用户管理,用户可通过设置连接上的 readOnly属性标记事务为只读事务 × × ×
RW_FILTER_TYPE 2 读写分离备库获取方式。取值1:备库由服务器返回;2:备库由JDBC驱动通过查询动态视图获取 × × ×
RW_HA FALSE 是否开启读写分离系统高可用;取值1/0 或 true/false;默认false ×
RW_IGNORE_SQL FALSE 读写分离sql语句不做类型校验的优化,所有sql都可能发到备库执行,开启优化检测sql开头2个单词判断语句类型,写操作不发往备库 ×
RW_PERCENT 25 读写分离分发比例,有效值范围0~100
RW_SEPARATE 0 是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点;4:启用,备库由客户端进行选择,只连接事务一致性备库;5:启用,目前仅JDBC提供支持,为GATEWAY准备,连接EPLIST列表内第一个可用的备库
启用读写分离时,LOGIN_MODE参数失效
RW_STANDBY_RECOVER_TIME 60000 读写分离系统备库故障恢复检测间隔,单位ms,有效值范围0~2147483647,0表示不回复;默认60000 ×
SCHEMA 登录用户默认模式 指定用户登录后的当前模式,默认为用户的默认模式 ×
SESS_ENCODE 会话通信字符编码,默认使用库编码 ×
SESSION_TIMEOUT 0 会话超时时间;单位ms,有效值范围0~2147483647,0表示无限制;默认0 ×
SOCKET_TIMEOUT 0 网络通信链路超时时间;单位ms,有效值范围0~2147483647,0表示无限制;默认0 × ×
SSL_FILES_PATH 数据库端开启ssl通信加密,该参数指定ssl加密文件的路径 ×
SSL_KEYSTORE_PASS 数据库端开启ssl通信加密,该参数指定ssl加密文件的指令 × × ×
STAT_DIR 状态监控信息以文本文件形式输出的目录,默认为jvm当前工作目录 × ×
STAT_ENABLE FALSE 是否启用状态监控;取值1/0 或 true/false;默认false × ×
STAT_FLUSH_FREQ 10 状态监控统计信息写文件刷盘频率;单位s,有效值范围0~2147483647;0表示不写文件;默认10 × ×
STAT_HIGH_FREQ_SQL_COUNT 100 统计高频sql top行数;有效值范围0~1000;默认100 × ×
STAT_SLOW_SQL_COUNT 100 统计慢sql top行数;有效值范围0~1000;默认100 × ×
STAT_SQL_MAX_COUNT 1000 状态监控可以统计不同sql的个数;有效值范围0~100000;默认100000 × ×
STAT_SQL_REMOVE_MODE eldest 执行的不同sql个数超过statSqlMaxCount时使用的淘汰方式;取值latest/eldest;latest表示淘汰最近执行的sql,eldest表示淘汰最老的sql;默认eldest × ×
STMT_POOL_SIZE 15 语句句柄池大小;有效值范围0~2147483647,0表示关闭;默认15 × ×
SWITCH_INTERVAL 1000 在服务器之间切换的时间间隔,单位为毫秒,有效值范围1~9223372036854775807
SWITCH_TIMES 1 服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围1~9223372036854775807
TIME_ZONE 操作系统时区 指明客户端的默认时区,设置范围为:-779~840m,如60对应+1:00时区
UKEY_NAME Ukey的用户名 × × ×
UKEY_PIN Ukey的口令 × × ×
UNIX_SOCKET_FILE UNIX系统与服务器使用本地unix socket方式通信使用的.sock文件路径 × × ×
USER 登录用户 × ×
LOG_SIZE 100 * 1024 * 1024 单个日志文件大小,单位字节。默认大小100M × × ×
SERVER LOCALHOST 主库地址,包括IP地址、localhost或者配置文件中主库地址列表对应的变量名,如dm_svc.conf中的’o2000’ × × ×
COMMAND_TIMEOUT 30 SQL执行超时,单位ms,有效值范围0~2147483647 × × ×
STMT_POOLING 1 是否启用句柄池,0不启用,1启用。默认启用 × × ×
PSTMT_POOLING 0 是否启用prepare句柄池,0不启用,1启用。默认不启用 × × ×
CONN_POOLING 0 是否启用连接池,0不启用,1启用。默认不启用 × × ×
CONN_POOLSIZE 100 连接池大小,有效值范围0~2147483647。默认值100 × × ×
CONN_POOL_CHECK 0 是否启用连接有效性检查,0不启用,1启用。默认不启用 × × ×
TRACE NONE 是否启用.NET Provider的TRACE功能。NONE:不启用;DEBUG:打印到控制台;NORMAL:打印到执行目录下的“PROVIERTRACE.TXT”文件中;TRACE:打印到执行目录下的“PROVIERTRACE.TXT”文件中,比NORMAL内容要更详细一些;THREAD:每个线程的TRACE分别打印到执行目录下的“PROVIERTRACE线程号.TXT”文件中 × × ×
AFTER_GET_MORE_RESULTS 1 调用JDBC标准接口getMoreResults()后是否关闭之前的结果集;取值1/2/3;缺省为1;1:关闭当前一个结果集;2:保持当前结果集打开;3:关闭当前所有结果集 × × ×
ALLOW_RANGE 5 允许动态负载均衡误差范围的百分比,百分比越大表示允许的误差范围越大,取值范围0~50 × × ×
CHECK_EXEC_TYPE FALSE 是否检查executeXXX接口执行的SQL语句类型与接口是否匹配;取值1/0 或 true/false;1/true:是,0/false:否 × × ×
CHECK_FREQ 300000 服务名连接数据库时,循环检测连接是否需要重置的时间间隔。即每间隔设定时间检测连接对象是否发生改变,若连接对象发生改变,JDBC连接会自动重置到新对象。单位ms,取值范围0~2147483647 × × ×
DB_ALIVE_CHECK_TIMEOUT 10000 检测数据库是否存活的连接超时时间,如果该时间内未连接成功即认为数据库故障;单位ms,取值范围1~2147483647 × × ×
DMSVCCONF 指定url属性配置文件所在路径 × × ×
ERR_MAP 自定义DM错误码和Oracle错误码的映射关系。
格式:errMap=(dmCode:oracleCode, ...., dmCode:oracleCode)
例如:errMap=(-2223:955, -2207:2289)
× × ×
GEN_KEY_NAME_CASE upper 调用preparedStatement(String sql, String[] columnName)接口prepare sql时可同时指定列名,用于在表数据增删改后返回指定的列值。该参数用于指定这里的列名的大小写。取值0/1/2或none/upper/lower。取值 0 或 none:保持用户输入不变;1 或 upper: 将用户输入转为大写;2 或 lower: 将用户输入转为小写 × × ×
IGNORE_WARNINGS 默认为空 用于设置忽略指定的SQLWarnings,取值与含义如下:
all:忽略所有警告;
sqlCode:忽略指定的警告;
op sqlCode:忽略满足条件的警告,op可以为符号>、<、>=、<=、!;
(sqlCode,sqlCode):忽略指定的多个警告,默认为空
× × ×
injectArray FALSE 绑定参数为数组时,是否直接注入到SQL语句中,非数组类型的参数不受影响,仅支持select、insert、update、delete语句;缺省为false,取值范围(true,false)
例如:conn.execute("select * from test where id in (?);", [[1,2,3]])
实际执行的SQL语句会被改写为:select * from test where id in (1, 2, 3)
× × ×
LOCAL_ENCRYPT FALSE 是否启用用户名密码本地加密;取值1/0 或 true/false;1/true:是,0/false:否 × × ×
LOCAL_ENCRYPT_ENGINE 本地加密引擎名,不指定时使用系统内置的加密引擎,用户可指定自定义的加密引擎 × × ×
logBufferSize 32768 日志缓冲区大小 × × ×
logFlusherQueueSize 100 日志刷盘线程中等待刷盘的日志缓冲区队列大小 × × ×
PREPARE_OPTIMIZE FALSE 是否对预编译SQL做优化;取值1/0 或 true/false;1/true:是,0/false:否 × × ×
QUOTE_REPLACE FALSE 是否将SQL语句中的双引号改成单引号;取值1/0 或 true/false;1/true:是,0/false:否 × × ×
RW_AUTO_DISTRIBUTE TRUE 读写分离系统事务分发是否由驱动自动管理,取值范围(true,false)。false:事务分发由用户管理,用户可通过设置连接上的 readOnly属性标记事务为只读事务 × × ×
socketTimeout 0 网络通信链路超时时间;单位ms,有效值范围0~2147483647,0表示无限制 × × ×
sslCertPath 指定ssl加密证书文件的路径 × × ×
sslKeyPath 指定ssl加密密钥文件的路径 × × ×
stmtPoolSize 15 语句句柄池大小;有效值范围0~2147483647,0表示关闭 × × ×
ZIPKIN_SERVICE_NAME dmService zipkin服务名,用于zipkin链路追踪,必须和sql拦截器customFilter =com.dameng.zipkin.DmZipkinCustom一起使用
例如:jdbc:dm://localhost:5236?customFilter=com.dameng.zipkin.DmZipkinCustom&zipkinServiceName=myDatabaseService
× × ×
reconnectErrors reconnectErrors=(-6001) 用于指定需要重连的异常,即当用服务名进行连接时,若发生指定的异常时将继续找下一个节点进行连接,发生其他异常则会抛出异常停止连接。 配置格式:reconnectErrors=(errorCode,errorCode,......)。errorCode为数据库错误码(其中,超过了最大连接限制错误码-6001不论设置与否,都会继续重连)。 例如:reconnectErrors=(-14009,-13217) × × ×
2.1.2.1.2 DPI 接口
表2.36 DPI接口配置项介绍
配置项 缺省值 简述
服务名 连接服务名,参数值格式为 ip[:port],ip[:port],......
ADDRESS_REMAP 库地址重定向,格式 ADDRESS_REMAP =(IP:PORT, IP:PORT),多个: ADDRESS_REMAP =(IP:PORT, IP:PORT) ADDRESS_REMAP =(IP:PORT, IP:PORT)
EP_SELECTOR 0 连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;其余大于 0 整数表示选择列表中第几个节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接,若配置的值超过服务名列表的节点数,则连接第 (epSelector % 服务名列表节点数) 个节点
AUTO_RECONNECT 0 连接发生异常或一些特殊场景下连接处理策略。0:关闭连接;1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会重置一下链路切换事件
CHAR_CODE 操作系统编码格式 客户端使用的编码格式,会影响帮助信息和错误提示信息,要与客户端使用的编码格式一致。支持的选项为:PG_UTF8(表示 utf8 编码);PG_GBK/PG_GB18030(两者都表示 GBK 编码);PG_BIG5(表示 BIG5 编码);PG_ISO_8859_9(表示 ISO88599 编码);PG_EUC_JP(表示 EUC_JP 编码);PG_EUC_KR(表示 EUC_KR 编码);PG_KOI8R(表示 KOI8R 编码);PG_ISO_8859_1(表示 ISO_8859_1 编码) 可以不指定,若不指定,系统会读取操作系统信息获得编码信息,建议有需要才指定
COMPRESS_MSG 0 是否启用消息压缩。0:不启用;1:启用;2:自适应压缩。即自动选取长度较长的通信消息进行压缩;短消息不需要压缩,直接传输效率更高
CONNECT_TIMEOUT 5000 连接超时时间,单位为毫秒。0 表示无限制
DEC2DOUB 0 指明在 DPI、DMODBC、DCI、DMPHP 和 DM PRO*C 中,是否将 DEC 类型转换为 DOUBLE 类型。dec(0,0)的类型描述为 double。0:不转换;1:转换
ENABLE_RS_CACHE 0 是否进行客户端结果集缓存。0:不进行;1:进行
KEYWORDS 标识用户关键字,所有在列表中的字符串,如果以单词的形式出现在 sql 语句中,则这个单词会被加上双引号。该参数主要用来解决用户需要使用 DM8 中的保留字作为对象名使用的状况
LANGUAGE 操作系统语言 当前数据库服务器使用的语言,会影响帮助信息错误和提示信息。支持的选项为:CN(表示中文)和 EN(表示英文)。可以不指定,若不指定,系统会读取操作系统信息获得语言信息,建议有需要才指定
LOGIN_CERTIFICATE 指定登录加密用户名密码公钥所在的路径,一旦配置即认为开启了客户端的证书加密用户名密码模式
LOGIN_DSC_CTRL 0 服务名连接数据库时是否只选择 dsc control 节点的库。0:否;1:是
注:不建议与 EP_SELECTOR 同时使用
LOGIN_MODE 4 指定优先登录的服务器模式。0:优先连接 Primary 模式的库,Normal 模式次之,最后选择 Stantby 模式;1:只连接主库;2:只连接备库;3:优先连接 Standby 模式的库,Primary 模式次之,最后选择 Normal 模式;4:优先连接 Normal 模式的库,Primary 模式次之,最后选择 Standby 模式
PROTOCOL_TYPE TCP 网络协议类型。可选 TCP/UDP/IPC/RDMA
RS_CACHE_SIZE 20 设置结果集缓冲区大小,以 M 为单位。有效值为 1~65535,如果设置太大,可能导致空间分配失败,进而使缓存失效
RS_REFRESH_FREQ 10 结果集缓存检查更新的频率,以秒为单位,有效值为 0~10000,如果设置为 0,则不需检查更新
RW_PERCENT 25 读写分离分发比例,有效值范围 0~100
RW_SEPARATE 0 是否启用读写分离。0:不启用;1:启用;4:启用,备库由客户端进行选择,只连接事务一致性备库
SSL_CONFIG 指定用户的 SSL 信息,在配置 SSL_CONFIG 时,参数信息需要在同一行输入,输入信息中存在换行会导致初始化 SSL 环境失败。参数格式为: (USER=(用户名 1) SSL_PATH=(SSL 路径 1) SSL_PWD=(SSL key1))...
SWITCH_INTERVAL 200 在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807
SWITCH_TIMES 1 服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807
TIME_ZONE 操作系统时区 指明客户端的默认时区,设置范围为:-779~840m,如 60 对应 +1:00 时区
WALLET_LOCATION wallet 文件的路径。支持 disql、dmfldr、dimp/dexp、备份还原等客户端工具使用。wallet 文件用法请参考《DM8 安全管理》手册。
该配置项仅支持全局配置,不支持服务名配置
DPI_TCP_DETECT 1 用于创建 TCP 的链路异常检测。1:创建;0:不创建
DETECT_TIMEOUT 0 用于设置链路异常检测超时时间,当链路检测时间超过设定时间没有响应,判定为链路异常,主动断开链路。取值范围:0~4294967294,0 表示没有超时,单位秒
RECONNECTERRORS RECONNECTERRORS=(-6001) 用于指定需要重连的异常,即当用服务名进行连接时,若发生指定的异常时将继续找下一个节点进行连接,发生其他异常则会抛出异常停止连接。 配置格式:RECONNECTERRORS=(errorCode,errorCode,......)。errorCode 为数据库错误码(其中,超过了最大连接限制错误码-6001 不论设置与否,都会继续重连)。 例如:RECONNECTERRORS=(-14009,-13217)
VARCHAR_MAXSZ_DESC 用于指定 VARCHAR 类型的最大描述长度。取值范围 1~32767,当服务器返回的 VARCHAR 定义长度超过设定值时,按照设定值返回描述长度。若配置的参数值超出有效取值范围,则忽略该配置。
建议谨慎使用该配置项,使用时必须保证设定值适应实际数据长度,否则存在数据获取不完整的风险
UKEY_LOGIN 0 配置服务名是否必须使用 UKEY 登录。0:非必须;1:必须使用 ukey 登录
2.1.2.1.3 CYT 安全接口
表2.37 CYT安全接口配置项介绍
配置项 缺省值 简述
CIPHER_PATH 第三方加密算法的路径
2.1.2.1.4 DIMP/DEXP 工具
表2.38 DIMP/DEXP工具配置项介绍
配置项 缺省值 简述
DIRECT Y DIMP 专用,作用相当于 DIMP 工具的 FAST_LOAD 参数。表示是否使用快速装载。y:使用;n:不使用
DUMMY 2 DEXP 和 DIMP 均可使用。写文件时,发现文件已存在的处理方式。0:报错;1:直接覆盖文件;2:询问用户,有交互信息
WALLET_LOCATION wallet 文件的路径。支持 disql、dmfldr、dimp/dexp、备份还原等客户端工具使用。wallet 文件用法请参考《DM8 安全管理》手册。
该配置项仅支持全局配置,不支持服务名配置
DUMP_CONN_STR NONE DEXP 和 DIMP 均可使用。指定导入导出默认连接串。DEXP 或 DIMP 没有指定 USERID 连接串时,使用该连接串
DUMP_PASSWORD NONE DEXP 和 DIMP 均可使用。指定导入导出默认连接密码。DEXP 或 DIMP 的 USERID 参数缺省密码时,使用该密码
2.1.2.1.5 DPC 接口
表2.39 DPC接口配置项介绍
配置项 缺省值 简述
DPC_TRACE DPC 的 TRACE 文件路径,不配置时不写 TRACE 信息
ENABLE_SSL 0 是否启用 SSL。1/Y/y:启用 SSL;其他值:不启用
SSL_CONFIG 在启用 SSL 的前提下,设置 SSL 值。在配置 SSL_CONFIG 时,参数信息需要在同一行输入,输入信息中存在换行会导致初始化 SSL 环境失败。格式如下:SSL_CONFIG=((USER=(用户名 1) SSL_PATH=(SSL 路径 1) SSL_PWD=(SSL key1)) (USER=(用户名 2) SSL_PATH=(SSL 路径 2) SSL_PWD=(SSL key2)))
2.1.2.1.6 Disql 工具
表2.40 Disql工具配置项介绍
配置项 缺省值 简述
AUTO_LOGIN DIsql 读取的用于自动登录的连接串。例如:AUTO_LOGIN=(SYSDBA/DMsys_123@192.168.6.7:5236)。DIsql 会优先连接 AUTO_LOGIN 中的服务器
WALLET_LOCATION wallet 文件的路径。支持 disql、dmfldr、dimp/dexp、备份还原等客户端工具使用。wallet 文件用法请参考《DM8 安全管理》手册。
该配置项仅支持全局配置,不支持服务名配置
2.1.2.1.7 DCI 接口
表2.41 DCI接口配置项介绍
配置项 缺省值 简述
DCI_VERSION 0 控制 DCI 接口是否返回 DM 的版本信息。可取值 0/1,0 表示返回 DM 的版本信息,1 表示返回 Oracle 的版本信息。
该配置项仅支持全局配置,不支持服务名配置

2.1.2.2 dm_svc.conf 用法

dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,服务配置区在后,以“[服务名]”开头。“服务名”配置项可以在全局配置区,也可以在此服务名对应的服务配置区之前,即在其对应的“[服务名]”之前。

服务配置区中的配置优先级高于全局配置区。全局配置区的配置项影响所有会话,除非会话所属服务配置区中单独进行了配置,因此对于全局配置区配置项的设置修改需要慎重。

下面以一个普通环境中 dm_svc.conf 为例:

#  以#开头的行表示是注释

#  全局配置区
NORMAL=(192.168.0.1:5000,192.168.0.2:5236)
Data_Watch=(192.168.0.3:5236,192.168.0.4:4350)
TIME_ZONE=(480)     #表示+8:00时区
DIRECT=(Y)

#  服务配置区
#  常规环境,两个没有关系的IP
[NORMAL]
TIME_ZONE=(540)     #表示+9:00时区
LOGIN_MODE=(4)
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)

#  服务配置区
#  数据守护环境,一主一备,只连备库
[Data_Watch]
TIME_ZONE=(540)     #表示+9:00时区
LOGIN_MODE=(2)
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)

下面以 DSC 场景中 dm_svc.conf 为例:

# 以#开头的行表示是注释

# 全局配置区
DMDSC1=(192.168.1.1:5236,192.168.1.3:5236)
DMDSC2=(192.168.1.5:5236,192.168.1.7:5236)
TIME_ZONE=(480)   #表示+8:00时区

#DMDSC1 服务配置区
#以下配置目标连接 DMDSC1 服务名的第一个服务(192.168.1.1:5236),以间隔 1000 毫秒的节奏尝试遍历服务名中的各服务进行连接,若在遍历中成功连上符合要求的服务则立即返回;若没有,则继续。一共尝试 60 次遍历,若60次尝试后依然未连接上目标服务,则根据LOGIN_MODE的配置进行下一种连接的尝试。若连接建立时连上的是2号服务,而一段时间后 1 号服务可以正常连接了,当前连接也不会自动切换到 1 号服务。
[DMDSC1]
LOGIN_MODE=(4) #若是DSC主+单机备,建议这里配置成0
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000)
EP_SELECTOR=(1)
AUTO_RECONNECT=(1)

#DMDSC2 服务配置区
#以下配置目标连接 DMDSC2 服务名的第一个服务(192.168.1.5:5236),以间隔 1000 毫秒的节奏尝试遍历服务名中的各服务进行连接,若在遍历中成功连上符合要求的服务则立即返回;若没有,则继续。一共尝试 60 次遍历,若60次尝试后依然未连接上目标服务,则根据LOGIN_MODE的配置进行下一种连接的尝试。假设2号服务先连接成功,由于AUTO_RECONNECT=(2),因此当1号服务可以正常连接后当前连接会切换到1号服务。
[DMDSC2]
CLUSTER=(DSC)
LOGIN_MODE=(4) #若是DSC主+单机备,建议这里配置成0
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000)
EP_SELECTOR=(1)
AUTO_RECONNECT=(2)

需要说明的是,如果对 dm_svc.conf 的配置项进行了修改,需要重启客户端程序,修改的配置才能生效。另外,如果 dm_svc.conf 配置文件中包含中文,则必须保证该配置文件的编码与客户端编码一致。

2.2 控制文件

每个 DM 数据库都拥有两个控制文件,即 dm.ctl 和 dmtemp.ctl 控制文件,控制文件均为二进制文件。

dm.ctl 用于记录数据库必要的初始信息,主要包含以下内容:

  1. 数据库名称;
  2. 数据库服务器模式;
  3. OGUID 唯一标识;
  4. 数据库服务器版本;
  5. 数据文件版本;
  6. 数据库的启动次数;
  7. 数据库最近一次启动时间;
  8. 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的表空间,数组的方式保存起来;
  9. 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改。

dmtemp.ctl 用于记录临时表空间相关信息,主要包括临时表空间名以及临时表空间物理文件路径等。

在服务器运行期间,执行表空间的 DDL 等操作后,服务器内部需要同步修改控制文件内容。如果在修改过程中服务器故障,可能会导致控制文件损坏,为了避免出现这种情况,在修改控制文件时系统内部会执行备份操作。备份策略如下:

  • 策略一
    在修改控制文件之前,先执行一次备份,确定控制文件修改成功后,再将备份删除,如果控制文件修改失败或中途出现故障,则保留备份文件。
  • 策略二
    在修改控制文件成功之后,根据 dm.ini 中指定的 CTL_BAK_PATH/CTL_BAK_NUM 对最新的控制文件执行备份,如果用户指定的 CTL_BAK_PATH 是非法路径,则不再生成备份文件,在路径有效的情况下,生成备份文件时根据指定的 CTL_BAK_NUM 判断是否删除老的备份文件。

注意:

  • 如果控制文件存放在裸设备上,则【策略一】不会生效。
  • 如果指定的 CTL_BAK_PATH 是无效路径,则【策略二】也不会生效。
  • 如果【策略一】和【策略二】的条件都满足,则都会生效执行,否则只执行满足条件的备份策略,如果都不满足,则不会再生成备份文件。
  • 如果是初始化新库,在初始化完成后,会在“SYSTEM_PATH/CTL_BAK”路径下对原始的控制文件执行一次备份。

2.3 数据文件

数据文件以 DBF 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。在实际应用中,通常有多个数据文件。

当 DM 的数据文件空间用完时,它可以自动扩展。可以在创建数据文件时通过 MAXSIZE 参数限制其扩展量,当然,也可以不限制。但是,数据文件的大小最终会受物理磁盘大小的限制。在实际使用中,一般不建议使用单个巨大的数据文件,为一个表空间创建多个较小的数据文件是更好的选择。

数据文件在物理上按照页、簇和段的方式进行管理,详细结构请参考第一章的内容。

数据文件按数据组织形式,可以分为如下几种:

  1. B 树数据

行存储数据,也是应用最广泛的存储形式,其数据是按 B 树索引组织的。普通表、分区表、B 树索引的物理存储格式都是 B 树。

一个 B 树包含两个段,一个内节点段,存放内节点数据;一个叶子段,存放叶子节点数据。其 B 树的逻辑关系由段内页面上的记录,通过文件指针来完成。

当表上没有指定聚集索引时,系统会自动产生一个唯一标识 ROWID 作为 B 树的 key 来唯一标识一行。

  1. 堆表数据

堆表的数据是以挂链形式存储的,一般情况下,支持最多 128 个链表,一个链表在物理上就是一个段,堆表采用的是物理 ROWID,在插入过程中,ROWID 在事先已确定,并保证其唯一性,所以可以并发插入,插入效率很高,且由于 ROWID 是即时生成,无需保存在物理磁盘上,也节省了空间。

  1. 列存储数据

数据按列方式组织存储,包含每个列对应的存放列数据的一系列数据文件,以及存放列数据控制信息的辅助表。读取列数据时,只需要顺序扫描列数据文件和辅助表数据。在某些特殊应用场景下,其效率要远远高于行存储。

  1. 位图索引

位图索引与 B 树索引不同,每个索引条目不是指向一行数据,而是指向多行数据。每个索引项保存的是一定范围内所有行与当前索引键值映射关系的位图。

数据文件中还有两类特殊的数据文件:ROLL 和 TEMP 文件。

1)ROLL 文件

ROLL 表空间的 DBF 文件,称为 ROLL 文件。ROLL 文件用于保存系统的回滚记录,提供事务回滚时的信息。回滚文件可被分为若干回滚段,每个事务的回滚页在回滚段中各自挂链,页内则顺序存放回滚记录。

2)TEMP 文件

TEMP.DBF 临时数据文件,临时文件可以在 dm.ini 中通过 TEMP_SIZE 配置大小。

当数据库查询的临时结果集过大,缓存已经不够用时,临时结果集就可以保存在 TEMP.DBF 文件中,供后续运算使用。系统中用户创建的临时表也存储在临时文件中。

2.4 重做日志文件

重做日志(即 REDO 日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件默认以 log 为扩展名,可在初始化数据库时使用建库参数 RLOG_POSTFIX_NAME 指定重做日志文件的扩展名。每个 DM 数据库实例必须至少有 2 个重做日志文件,默认两个日志文件为 DAMENG01.log、DAMENG02.log,这两个文件循环使用。

重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文件。

重做日志文件主要用于数据库的备份与恢复。理想情况下,数据库系统不会用到重做日志文件中的信息。然而现实世界总是充满了各种意外,比如电源故障、系统故障、介质故障,或者数据库实例进程被强制终止等,数据库缓冲区中的数据页会来不及写入数据文件。这样,在重启 DM 实例时,通过重做日志文件中的信息,就可以将数据库的状态恢复到发生意外时的状态。

重做日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在出现系统故障和介质故障时能够进行故障恢复。在 DM 数据库运行过程中,任何修改数据库的操作都会产生重做日志,例如,当一条元组插入到一个表中的时候,插入的结果写入了重做日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当系统出现故障时,通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到故障之前的状态。

2.5 归档日志文件

日志文件分为联机日志文件和归档日志文件。DM 数据库可以在归档模式和非归档模式下运行。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。

联机日志文件指的是系统当前正在使用的日志文件。创建数据库时,联机日志文件通常被扩展至一定长度,其内容则被初始化为空,当系统运行时,该文件逐渐被产生的日志所填充。对日志文件的写入是顺序连续的。然而系统磁盘空间总是有限,系统必须能够循环利用日志文件的空间,为了做到这一点,当所有日志文件空间被占满时,系统需要清空一部分日志以便重用日志文件的空间,为了保证被清空的日志所“保护”的数据在磁盘上是安全的,这里需要引入一个关键的数据库概念——检查点。当产生检查点时,系统将系统缓冲区中的日志和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日志文件即可被安全重用。

归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。归档日志文件以归档时间命名,扩展名默认与初始化数据库时指定的参数 RLOG_POSTFIX_NAME 一致,也可通过 INI 参数 LOG_FILE_POSTFIX_NAME 指定归档日志文件的扩展名。只有在归档模式下运行时,DM 数据库才会将重做日志写入到归档日志文件中。采用归档模式会对系统的性能产生影响,然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。

2.6 物理逻辑日志文件

物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于 DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时,这部分日志内容会被存储在重做日志文件中。

要开启物理逻辑日志的功能,需要满足下面两个条件:

首先,要设置 RLOG_APPEND_LOGIC 为 1、2、3 或者 4;

其次,通过设置参数 RLOG_IGNORE_TABLE_SET=1 或者建表(或修改表)时指定 ADD LOGIC LOG 开启。如果需要记录所有表的物理逻辑日志,设置 INI 参数 RLOG_IGNORE_TABLE_SET 为 1 即可;如果只需要记录某些表的物理逻辑日志,设置 INI 参数 RLOG_IGNORE_TABLE_SET 为 0,并在建表或者修改表的语法中使用 ADD LOGIC LOG。

2.7 备份文件

备份文件以 bak 为扩展名,当系统正常运行时,备份文件不会起任何作用,它也不是数据库必须有的联机文件类型之一。然而,从来没有哪个数据库系统能够保证永远正确无误地运行,当数据库不幸出现故障时,备份文件就显得尤为重要了。

当客户利用管理工具或直接发出备份的 SQL 命令时,DM Server 会自动进行备份,并产生一个或多个备份文件,备份文件自身包含了备份的名称、对应的数据库、备份类型和备份时间等信息。同时,系统还会自动记录备份信息及该备份文件所处的位置,但这种记录是松散的,用户可根据需要将其拷贝至任何地方,并不会影响系统的运行。

2.8 SQL 日志文件

用户在 dm.ini 中配置 SVR_LOG 参数后就会打开 SQL 日志。

SQL 日志文件是一个纯文本文件。命名格式为“dmsql_实例名[_模式名][_用户名][_日期_时间].log”。当 sqllog.ini 中存在多个有效模式名时,日志文件名中会添加“_模式名”,否则不添加;当 sqllog.ini 参数 PART_STOR=1 时,日志文件名中会添加“_用户名”,否则不添加;当 sqllog.ini 参数 SWITCH_MODE 不为 0 时,日志文件名中会添加“_日期_时间”,否则不添加。

SQL 日志文件缺省生成在 DM 安装目录的 log 子目录下面,管理员可通过 sqllog.ini 参数 FILE_PATH 设置其生成路径。

SQL 日志内容包含系统各会话上用户执行的 SQL 语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,比如,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。

系统中 SQL 日志的缓存是分块循环使用,管理员可根据系统执行的语句情况及压力情况设置恰当的日志缓存块大小及预留的缓冲块个数。当预留块不足以记录系统产生的任务时,系统会分配新的用后即弃的缓存块,但是总的空间大小由 sqllog.ini 参数 BUF_TOTAL_SIZE 控制,管理员可根据实际情况进行设置。

打开 SQL 日志会影响系统的性能,因此一般在需要查错和调优的时候才会打开。缺省情况下系统是关闭 SQL 日志的。若用户需要打开 SQL 日志,同时对日志的实时性并没有严格的要求,又希望系统性能好,此时可以从两方面进行改进:一设置 sqllog.ini 参数 SQL_TRACE_MASK 和 MIN_EXEC_TIME 只记录关注的相关记录,减少日志总量;二设置 sqllog.ini 参数 ASYNC_FLUSH 打开 SQL 日志异步刷盘提高系统性能。

用户可以调用系统过程 SP_SET_SQLLOG_INI()或 SP_DELETE_SQLLOG_INI_MODE()来动态修改 sqllog.ini 文件的内容,修改后可以调用系统过程 SP_REFRESH_SVR_LOG_CONFIG()更新内存中对应的参数值,以使所做的修改生效。利用动态视图 V​DM_SQLLOG_INI可以查询sqllog.ini文件中的SQL日志配置参数,利用动态视图VDM_SQLLOG_CONFIG 可以查询内存中的 SQL 日志配置参数。

2.9 事件日志文件

事件日志文件记录了 DM 数据库运行时的关键事件。例如:系统启动、关闭、内存申请失败、IO 错误等一些致命错误;数据库运行过程中的日志信息;备份还原过程中备份还原操作的阶段性信息等。

事件日志文件主要用于系统出现严重错误时进行查看并定位问题。事件日志简称 ELOG。事件日志文件随着 DM 数据库服务的运行一直存在。

事件日志文件打印的是中间步骤的信息,所以出现部分缺失属于正常现象。事件日志信息格式为:时间 + 日志类型(INFO/WARNING/ERROR/FATAL)+ 进程(database)+ 进程 ID(P 开头)+ 线程(dm_sql_thd/main_thread 等)+ 日志内容。

初始化过程中产生的 ELOG 会保存在 ELOG_PATH 参数指定的目录下,名称为“dminit+ 日期 + 时间”。例如:dminit20220914090452.log。

系统启动和运行过程中产生的 ELOG 保存在系统 log 目录下。

系统启动时,如遇到 dm.key、dm.ini 不存在等原因无法正常启动,因尚未获取到实例名,因此将生成的事件日志文件命名为“dm_unknown_年月”。例如:dm_unknown_202212。

当 ELOG_FLAG 设为 1 时,数据库运行过程中的事件日志都记录在名为“dm_实例名”的日志文件中,如 dm_DMSERVER.log。

当 ELOG_FLAG 设为 0 时,事件日志会被拆分记录到多个带有时间后缀的日志文件中。图 2.2 展示了 ELOG_FLAG 设为 0 时,9 月份的月度日志和分时日志。运行过程中,ELOG 日志文件的生成分两步完成:

第一步,系统将所有 ELOG 内容生成到当月的月度 ELOG 日志文件中,命名为“dm_实例名_年月”。例如:9 月的月度 ELOG 日志文件为 dm_DMSERVER_202209.log。

第二步,当符合 SVR_ELOG_FREQ 切换频率的切换点来临时,系统将月度 ELOG 日志文件中最近生成的(1 月/1 日/1 时)日志,剪切并归档到新的(分月/分日/分时)ELOG 日志文件中,命名为“dm*实例名*日期_整点”,其中后缀中的整点为该日志首条记录的时间。不论切换频率为月、日或时,切换的时间点均为某时 0 分。例如:设置 SVR_ELOG_FREQ=2 按小时进行切换,则归档后的分时 ELOG 日志文件名为 dm_DMSERVER_20220914_09.log。

图 2.2 ELOG 日志文件.png

图 2.2 ELOG_FLAG 为 0 时的 ELOG 日志文件

通过查询动态视图 V$ELOG_FILE 可以获得当前实例的日志文件的信息。可以使用系统过程 SP_ELOG_FILE_DELETE 删除指定文件名的 ELOG 日志文件。

微信扫码
分享文档
扫一扫
联系客服