1.2 bootstrap.cnf
本配置文件为dble实例启动时候加载的配置文件。默认使用wrapper.cnf启动的外置参数文件的格式,即使不使用wrapper启动时,也会加载此文件。
1.2.1 jvm启动参数
本文件第一部分为JVM启动参数,可以根据需要修改。
-agentlib:jdwp=transport=dt_socket,server=y,address=8088,suspend=n  
-server  
-XX:+AggressiveOpts  
-Dfile.encoding=UTF-8  
-Dcom.sun.management.jmxremote  
-Dcom.sun.management.jmxremote.port=1984  
-Dcom.sun.management.jmxremote.authenticate=false  
-Dcom.sun.management.jmxremote.ssl=false  
-Dcom.sun.management.jmxremote.host=127.0.0.1  
-Xmx4G  
-Xms1G  
-XX:MaxDirectMemorySize=2G
大部分以上的配置都没有特殊的意义,仅仅是一般的JVM配置,关于JVM调优的部分需要以现实情况进行操作,在此仅介绍以个特殊情况
MaxDirectMemorySize上限值为81917M,约等于79G。需要根据机器的情况进行提前适配,不然会导致服务无法正常启动 具体的细节为需要大于bufferPoolPageNumber*bufferPoolPageSize,这两个选项在第二部分中配置
bufferPoolPageNumber 的默认值= (MaxDirectMemorySize * 0.8 /bufferPoolPageSize), 向下取整 ,上限值为32767
bufferPoolPageSize 的默认值= 2M
以下为建议值:
dble总内存=0.6  可用物理内存(刨除操作系统,驱动等的占用)
Xmx = 0.4  dble总内存
MaxDirectMemorySize = 0.6 * dble总内存  
另外,在启动参数中的bufferPoolPageNumber 和bufferPoolPageSize 受MaxDirectMemorySize影响。
1.2.2 dble系统参数
本文件第二部分为dble系统参数,配置格式遵照启动参数的格式:-Dkey=value, 
注意如果是通过JSW启动的dble服务,需要复合JSW对配置文件的要求,也就是不能有空格,具体参见 wrapper.app.parameter_file
具体系统参数含义参见以下表格。  
| 模块 | 配置名称 | 配置内容 | 默认值/单位 | 详细作用原理或应用 | 配置范围 | 
| 系统服务基本参数 | homePath | 基本目录 慢查询日志(slowlogs)、视图记录日志(viewConf)、xa的tm日志(xalogs)、load data临时文件(temp)等存放路径的父目录 | 无默认值,不配置会报错 | 其他一些类似于事务或者视图存储的的根路径 | 有效路径, | 
| instanceName | 实例名称 | 无默认值,不配置会报错 | 集群配置时的唯一标识,xa事务时的实例标识 | 集群内唯一值 | |
| instanceId | 实例id | 无默认值 | 集群配置时的唯一标识,全局序列时的唯一标识 | 仅当sequenceHandlerType=2 或者 3时候有意义. 当sequenceHandlerType=2,合法值范围为0~1023 当sequenceHandlerType=3,合法值范围为0~,511 | |
| serverId | 服务器名称 | 默认值为服务器IP | dble所在机器的名称 | 用于告警时候报告服务器名称 | |
| bindIp | 服务IP | 默认 "0.0.0.0" | 在服务初始化的时候作为侦听的IP | 有效IP地址, | |
| serverPort | 服务端口 | 默认8066 | 在服务初始化的时候作为服务侦听的端口 | 机器空闲端口 | |
| managerPort | 控制端口 | 默认9066 | 在服务初始化的时候作为控制侦听的 | 机器空闲端口 | |
| maxCon | 控制最大连接数 | 默认0 | 默认不做限制。若maxCon大于0,建立的连接数大于maxCon之后,建立连接会失败.注意当各个用户的maxcon总和值大于此值时,以当前值为准。 全局maxCon不作用于manager用户 | 正整数 | |
| NIOFrontRW | NIO前端处理器的数量,兼容旧参数processors,同时配置NIOFrontRW和processors,以NIOFrontRW为准 | 默认java虚拟机核数 | 进行前端网络IO吞吐的线程数 | 正整数 | |
| NIOBackendRW | NIO后端处理器的数量,兼容旧参数backendProcessors,同时配置NIOBackendRW和backendProcessors,以NIOBackendRW为准 | 默认java虚拟机核数 | 进行后端网络IO吞吐的线程数 | 正整数 | |
| frontWorker | 前端业务处理线程池数量,兼容旧参数processorExecutor,同时配置frontWorker和processorExecutor,以frontWorker为准 | 默认 | 进行前端具体业务处理的线程池大小,负责解析路由下发 | 正整数 | |
| managerFrontWorker | 前侧管理端线程池数量 | 默认 | 负责前侧管理端执行&处理命令的线程池大小 | 正整数 | |
| backendWorker | 后端业务处理线程池数量,兼容旧参数backendProcessorExecutor,同时配置backendWorker和backendProcessorExecutor,以backendWorker为准 | 默认 | 进行后端具体业务处理的线程池大小,负责回收结果集并合并 | 正整数 | |
| complexQueryWorker | 复杂查询后端业务线程池数量,兼容旧参数complexExecutor,同时配置complexQueryWorker和complexExecutor,以complexQueryWorker为准 | 默认 | 负责复杂查询或者子命令结果集的回收 | 正整数 | |
| writeToBackendWorker | 广播下发SQL时候批量处理的线程池,兼容旧参数writeToBackendExecutor,同时配置writeToBackendWorker和writeToBackendExecutor,以writeToBackendWorker为准 | 默认 | 负责广播下发SQL时候批量处理 | 正整数 | |
| fakeMySQLVersion | Dble模拟Mysql版本号 | 默认NULL | 模拟成正常的MySql版本, 用于与客户端协议交互 | MYSQL版本号 | |
| serverBacklog | 前端tcp连接 backlog | 默认2048 | 前端tcp连接 backlog | 正整数 | |
| usePerformanceMode | 是否启用性能模式 | 默认0/单位无 | 开启之后Dble会大量占用CPU资源,并提供更高的性能体现,慎用 | 1-是0-否 | |
| useOuterHa | 是否启用外部高可用联动 | 默认为true,若此时不设置外部高可用,将不做切换 | 如关闭此功能并且dble部署方式为单机,将使用默认的切换方式,详情请见切换相关章节 | true/false | |
| groupConcatMaxLen | GROUP CONCAT()函数允许的最大结果长度 | 默认为1024 | GROUP CONCAT()函数允许的最大结果长度,以字节为单位 | 正整数 | |
| 连接缺省值 | charset | 字符集 | utf8mb4 | 服务启动后的默认字符集于所有字符集相关的部分,包括前端连接和后端连接 | 有效字符集 | 
| maxPacketSize | 包大小限制 | 默认 4×1024×1024 | 限制请求的包大小,启动时候dble会拉取并尝试同步(此值+1024)到每个dbInstance,如果同步失败,就取配置值与各个dbInstance中最小的那个值-1024.留出1024的冗余用于对SQL改写或者上下文同步的支持 | 正整数 | |
| txIsolation | 隔离级别 | 默认 3 | 执行具体SQL的时候会比较前后端连接, 启动时候dble会拉取并尝试同步此值到每个dbInstance,如果同步失败或者session级别重新设置该值,session在SQL下发之前,会执行session级别的隔离级别set | 1-READ_UNCOMMITTED | |
| autocommit | 是否自动提交 | 默认 1,自动提交 | 启动时候dble会拉取并尝试同步此值到每个dbInstance 如果同步失败或者session级别重新设置该值,执行具体SQL的时候会比较,如果不一致将会执行session级别的set | 0/1 | |
| 功能性配置 | useCompression | 是否启用数据压缩 | 默认 0否 | 使用mysql压缩协议 | 1 - 是 0 - 否 | 
| capClientFoundRows | 是否开启Client_Found_Rows权能标识 | 默认 false,关闭 | dble开启Client_Found_Rows权能标识 | true - 开启 false - 关闭 | |
| usingAIO | 是否启用AIO | 默认0 | 在初始化服务的时候将会作为判断启用AIO或是NIO的依据 | 1 - 是 0 - 否 | |
| 线程使用率统计 | useThreadUsageStat | 开启线程使用率统计 | 默认0/单位无 | 开启之后能在管理端通过管理命令show @@thread_used查看各个部分的线程使用情况 | 1-是0-否 | 
| useCostTimeStat | 是否启用查询耗时统计 | 默认0/单位无 | 开启之后以一定的比例统计查询过程中的各个步骤的耗时情况,可以使用BTraceCostTime.java进行观测,也可在管理端使用show @@cost_time观察 | 1-是0-否 | |
| maxCostStatSize | 默认100 | show @@cost_time结果最近保留的行数 | |||
| costSamplePercent | 查询采样百分比 | 默认1/单位% | 在耗时采样统计中实际采样百分比为costSamplePercent | ||
| 一致性检查 | checkTableConsistency | 表格一致性检查 | 默认0 | 如果值为1,那么在服务初始化的时候会启动一个定时任务,在 定时任务会检查DB是不是存在,表格是不是存在,表结构是否一致 | 1-是,0-否 | 
| checkTableConsistencyPeriod | 表格一致性检查周期 | 默认30×60×1000 | 表格一致性检查周期 | 正整数 | |
| processor内部前后端连接检查 | sqlExecuteTimeout | 后端连接执行超时时间 | 默认 300 | 如果超过这个时间没有完毕,就直接关闭连接 | 正整数 | 
| idleTimeout | 前端连接无响应超时时间 | 默认 10 × 60 × 1000 | 在processor定时连接检查时,发现前端连接上一次的读写距今超过阀值,会直接关闭连接 | 正整数 | |
| processorCheckPeriod | processor定时任务检查周期 | 1000 | 根据此配置定时的检查在processor中的前后端连接的状态 | 正整数 | |
| 后端连接socket 配置 | backSocketSoRcvbuf | 后端套接字接收缓冲区大小 | 1024×1024×4 | 在创建后端管道的时候作为buffer大小使用 | 正整数 | 
| backSocketSoSndbuf | 后端套接字发送缓冲区大小 | 1024×1024 | 在创建后端管道的时候作为buffer大小使用 | 正整数 | |
| backSocketNoDelay | 后端Nagle算法是否禁用 | 默认1/单位无 | 在创建后端管道的时候禁用延迟加载,会影响网络包的情况 详见相关资料 | 1-是, 0-否 | |
| 前端连接socket 配置 | frontSocketSoRcvbuf | 前端套接字接受缓冲区大小 | 1024 × 1024 | 在读取网络传输信息的时候作为每次缓冲的大小使用 | 正整数 | 
| frontSocketSoSndbuf | 前端套接字发送缓冲区大小 | 1024×1024×4 | 在创建前端管道的时候作为buffer大小使用 | 正整数 | |
| frontSocketNoDelay | 前端Nagle算法是否禁用 | 默认1 | 在创建前端管道的时候禁用延迟加载 相关资料 | 1-是,0-否 | |
| Session预留内存配置 | orderMemSize | session中的复杂查询order预留内存 | 默认4,单位M | 在session初始化的时候创建内存分配对象,在复杂查询order by的时候使用到 | 正整数 | 
| otherMemSize | session中的复杂查询其他预留内存 | 默认4,单位M | 在session初始化的时候创建内存分配对象,在复杂查询subQuery以及distinctd的时候使用 | 正整数 | |
| joinMemSize | session中的复杂查询join预留内存 | 默认4,单位M | 在session初始化的时候创建内存分配对象,在复杂查询join使用到 | 正整数 | |
| 堆外内存管理 | bufferPoolChunkSize | 内存池中分配的最小粒度 | 默认4096 | 内存池中分配的最小粒度,需要的大小除以此粒度,向上取整 | |
| bufferPoolPageNumber | 预分配内存池页数量 | 默认 0.8 × MaxDirectMemorySize / bufferPoolPageSize(default 2M), 向下取整 | 在初始化的时候通过和bufferPoolPageSize的相乘确定缓冲池最后的大小,内存配置建议见启动参数 | ||
| bufferPoolPageSize | 预分配内存池页大小 | 默认1024 * 1024 * 2, | 在初始化的时候通过和bufferPoolPageNumbe的相乘确定缓冲池最后的大小, 注意:虚拟机参数MaxDirectMemorySize(见启动参数)需要大于bufferPoolPageNumber * bufferPoolPageSize,否则会触发OOM | ||
| mappedFileSize | 文件映射区单个文件最大体积 | 默认1024×1024×64 | 在初始化的时候此参数确定文件映射区最大容量,参见内存管理章节 | ||
| maxResultSet | 大结果集阈值 | 默认512×1024 ,单位字节 | 当查询的结果集超过这个阀值时,查询的SQL和查询结果集的大小才会被记录到结果集统计里面 | 正整数 | |
| enableSessionActiveRatioStat | 统计前端连接繁忙率开关 | 默认为1,开启 | 统计前端连接繁忙率开关;当开启性能模式(-DusePerformanceMode=1)时,此配置不生效 | 0或者1 | |
| enableConnectionAssociateThread | 记录当前时间,前端/后端连接分别使用线程情况的开关 | 默认为1,开启 | 记录当前时间,前端/后端连接分别使用线程情况的开关;当开启性能模式(-DusePerformanceMode=1)时,此配置不生效 | 0或者1 | |
| 普通事务日志相关 | recordTxn | 事务log记录 | 默认0 | 在初始化服务的时候会注册一个类,其作用就是将事务的log写到一个指定的文件中 | 1-是,0-否 | 
| transactionLogBaseDir | 事务log目录 | 默认当前路径/txlogs | 当开启日志log记录时,记录文件会被存放在对应目录下 | 绝对路径 | |
| transactionLogBaseName | 事务log文件名称 | 默认server-tx | 事务记录存储文件的文件名 | 符合运行系统 | |
| transactionRotateSize | 事务日志单个文件大小。 | 默认16 ,单位M | 正整数 | ||
| XA 事务 | xaRecoveryLogBaseDir | xa的tm日志路径 | dble目录/xalogs/ | 此日志涉及到XA事务状态的记录,并且在Dble意外重启之后需要从里面获取重启之前的xa事务状态,切勿自行修改 | 绝对路径 | 
| xaRecoveryLogBaseName | xa的tm日志名称 | xalog | 符合运行系统 | ||
| xaSessionCheckPeriod | XA定时任务执行周期 | 默认1000, 单位ms | 在server开始的时候会注册一个定时任务以此参数为执行周期 (注:定时任务必定会被注册) 如果有尝试多次没有成功提交的session在之后的定时任务会被重复提交 | 正整数 | |
| xaLogCleanPeriod | 定时XAlog清除周期 | 默认1000, 单位ms | 在server开始的时候会根据这个周期注册一个定时任务 (注:定时任务必定会被注册) 定时清XA log,主要是将已经回滚和提交成功的部分从记录中删除 | 正整数 | |
| xaRetryCount | 后台重试XA次数 | 默认0 | 后台定时任务重试XA次数,0为无限重试,达到设定次数后,停止重试 | 正整数 | |
| xaIdCheckPeriod | 检测疑似残留XA任务的周期 | 默认300,单位s | 后台定时检测疑似残留Xid任务; 如果设置小于等于0,则表示不开启此检测定时任务 | 正整数 | |
| 视图相关参数 | viewPersistenceConfBaseDir | 视图记录本地文件路径 | dble目录/viewConf | 用于存放视图本地记录文件的文件路径,集群配置时无意义 | 绝对路径 | 
| viewPersistenceConfBaseName | 视图记录本地文件名 | viewJson | 视图记录的文件文件名,集群配置时无意义 | 符合运行系统 | |
| 队列大小参数 | joinQueueSize | join时,左右结点的暂存数据行数的队列大小 | 1024 | 当行数大于此值而又没有及时被消费者消费掉,将会阻塞,目的是防止接收数据量太大,堆积在内存中 | 正整数 | 
| mergeQueueSize | merge时,左右结点的暂存数据行数的队列大小 | 1024 | 当行数大于此值而又没有及时被消费者消费掉,将会阻塞,目的是防止接收数据量太大,堆积在内存中 | 正整数 | |
| orderByQueueSize | 排序时,时,左右结点的暂存数据行数的队列大小 | 1024 | 当行数大于此值而又没有及时被消费者消费掉,将会阻塞,目的是防止接收数据量太大,堆积在内存中 | 正整数 | |
| join相关的策略 | useJoinStrategy | 是否使用nest loop 优化 | 默认不使用 | 开启之后会尝试判断join两边的where来重新调整查询SQL下发的顺序 | true 开启 false 不开启 | 
| joinStrategyType | nest loop 优化策略 | 默认值为-1,根据不同数值使用不同的nestloop策略 | 值为-1时,如果useJoinStrategy=true,那么进入useJoinStrategy的逻辑,否则不进行nestloop处理,值为0时, 不进行nestloop处理(无视useJoinStrategy是否开启),值为1时 进入useJoinStrategy的逻辑处理(无视useJoinStrategy是否开启),值为2时, 进入alwaysTryNestLoop的逻辑处理(无视useJoinStrategy是否开启) | 允许范围在-1到2之间 | |
| nestLoopConnSize | 临时表阈值 | 默认4 | 若临时表行数大于这两个值乘积,则报告错误 | 正整数 | |
| nestLoopRowsSize | 临时表阈值 | 默认2000 | |||
| inSubQueryTransformToJoin | in子查询转成join进行查询 | 默认false(默认不使用) | in子查询在dble内部可以尝试转成join处理,也可以选择不开启。可以通过查询计划比较两种方式的执行(执行过程有所区别,性能也会因为sql的不同而有不同的表现),开启与否不影响最终结果 | true 开启 false 不开启 | |
| 慢查询日志相关配置 | enableSlowLog | 慢查询日志开关 | 默认为0,关闭 | 慢查询日志开关 | 0或者1 | 
| slowLogBaseDir | 慢查询日志存储文件夹 | dble根目录/slowlogs | 慢查询日志存储文件夹 | 文件夹路径 | |
| slowLogBaseName | 慢查询日志存储文件名前缀 | slow-query | 慢查询日志存储文件名前缀(后缀名是.log) | 合法文件名 | |
| flushSlowLogPeriod | 日志刷盘周期,单位秒 | 1 | 日志刷盘周期,每隔这个周期,会强制将内存数据刷入磁盘 | 正整数 | |
| flushSlowLogSize | 日志刷盘条数阈值 | 1000 | 日志刷盘条数阈值,内存中每次写出这么多条日志,会强制刷盘1次 | 正整数 | |
| sqlSlowTime | 慢日志时间阈值,单位毫秒 | 100 | 慢日志时间阈值,大于此时间的查询会记录下来 | 正整数或者0 | |
| slowQueueOverflowPolicy | 慢日志队列无空间时,后续日志的处理策略 | 2 | 慢日志队列存储的是等待落盘的慢日志,目前队列固定长度为2000,当队列满了,后续慢日志会根据不同的策略进行不同的处理 策略1:保障持续服务业务:当遇到慢查询超过等待写入阈值时,丢弃当前产生的慢SQL,并发出告警; 策略2:尽量保证慢日志不丢失:当遇到慢查询超过等待写入阈值时,触发阻塞队列机制,新的慢SQL等待加入落盘队列,并触发告警;最大阻塞时间为3s,超时会丢弃当前慢日志的记录 | 1或2 | |
| load data 相关配置 | maxCharsPerColumn | 每列所允许最大字符数 | 默认为65535 | 每列所允许最大字符数 | 正整数 | 
| maxRowSizeToFile | 需要持久化的最大行数,在开启load data批处理模式下是拆分文件的阈值 | 默认为100000 | 当load data的数据行数超过阈值后,会将数据保存在文件中以防OOM。在开启批处理模式后load data的数据行数超过阈值后,会将该文件按照阈值拆分成多个文件进行保存,拆分过程中最后的数据行不到阈值放入在最后一个拆分的文件中,而不是再单独创建新文件存放 | 正整数 | |
| enableBatchLoadData | 是否启用load data的批处理模式 | 默认为0 | load data会将导入文件按照maxRowSizeToFile的值拆分成多个文件分批导入 | 正整数,0为不开启,1为开启。其他数字无效 | |
| 流量控制相关参数 | enableFlowControl | 是否启用流量控制,true/false | 默认为false | 具体流量控制请参见相关功能描述章节 | true/false | 
| flowControlHighLevel | 触发流量控制的前端连接水位 | 默认为4194304(4096K) | 当部分前端连接的写出队列的字节数超出水位时触发流量控制,单位为字节数 | 正整数 | |
| flowControlLowLevel | 流量控制取消的前端连接水位 | 默认为262144(256K) | 当流量控制中的前端连接写出队列的字节数小于水位,则取消流量控制,单位为字节数 | 正整数 | |
| 游标相关参数 | enableCursor | 是否开启 server-side-cursor. | 默认false | 注意游标功能必须客户端和服务器端同时开启才有效。且目前只支持分库分表场景使用。另外,如果客户端没开,服务器端开启了,运行 prepare statement依旧会损失一小部分性能。具体见 4.4 | true or false | 
| maxHeapTableSize | 临时表在内存中存储的最大大小,单位byte | 默认为4096 | 临时表在内存中存储的最大大小,超过这个大小会被落盘 | 整数,大于等于 0 | |
| heapTableBufferChunkSize | 读 buffer 的 cache的大小 | 默认等于bufferPoolChunkSize,单位byte | 读取临时表临时文件时,读 buffer 的大小 | 正整数,必须是bufferPoolChunkSize的整数倍 | |
| general日志相关参数 | enableGeneralLog | 是否开启genegral日志 | 默认为0,关闭 | 开启后会将所有接收的sql记录在general日志文件中 | 0:关闭/1:开启 | 
| generalLogFile | general日志文件地址; | 默认为general/general.log | 若配置以'/'开头则作为绝对路径生效,反之,则在homepath后拼接得到最终绝对路径且生效 | 符合运行系统 文件的命名规范 | |
| generalLogFileSize | general日志文件大小; | 默认16M | 当general.log超过其大小则将会生成yyyy-MM/general-MM-dd-%d.log(默认格式)文件;类似与log4j | 正整数 | |
| generalLogQueueSize | 处理general日志的队列大小 | 默认4096 | 涉及内部实现机制;(类似与log4j的AsyncLogger) | 正整数且必须为2的次方 | |
| sql statistic相关参数 | enableStatistic | 是否开启全量统计 | 默认0 | 是否开启全量统计 | 1:开启, 0:不开启 | 
| enableStatisticAnalysis | 是否开启sql对user、table、condition聚合统计 | 默认为0,即不开启 | 作为show @@sql.sum.user、show @@sql.sum.table、show @@sql.condition聚合统计的开关 | 1:开启, 0:不开启 | |
| associateTablesByEntryByUserTableSize | sql_statistic_by_associate_tables_by_entry_by_user表的大小 | 默认1024 | 超过其大小值,则淘汰溢出的历史数据 | 整数且大于1 | |
| frontendByBackendByEntryByUserTableSize | sql_statistic_by_frontend_by_backend_by_entry_by_user表的大小 | 默认1024 | 超过其大小值,则淘汰溢出的历史数据 | 整数且大于1 | |
| tableByUserByEntryTableSize | sql_statistic_by_table_by_user_by_entry表的大小 | 默认1024 | 超过其大小值,则淘汰溢出的历史数据 | 整数且大于1 | |
| statisticQueueSize | 处理sql statistic的队列大小 | 默认4096 | 涉及内部实现机制;(类似与log4j的AsyncLogger) | 正整数且必须为2的次方 | |
| samplingRate | sql抽样统计的采样率 | 默认为100,即开启全样统计 | samplingRate是个百分数。假如有100条事务进入dble,采样率设置为4,此时从100条事务中随机采样4条,且单个事务中的所有语句都会记录。 | [0,100]之间的正整数 | |
| sqlLogTableSize | sql log 表格大小 | 默认1024 | 超过其大小值,则淘汰最旧的一条事务(在开启事务的情况下,一个事务中可能包含多个sql) | 正整数 | |
| 读写分离相关配置 | rwStickyTime | 读写分离场景下,主(写)从(读)实例的粘滞时间段 | 默认1000(ms), 若设置为0,则表示不开启主(写)从(读)实例的粘滞 | 执行当前读SQL的时间,距离上一次写SQL执行的时间段,没有超过rwStickyTime时间段时,则当前读SQL将会下发至后端主(写)实例.  | 正整数 | 
| district | dble配置所属区域,读写分离本地读场景下使用 | 默认为null | 读写分离本地读场景下读流量转发依据,该参数会和db.xml中dbInstance下的dbDistrict参数匹配 | 有效字符集 | |
| dataCenter | dble配置所属数据中心,读写分离本地读场景下使用 | 默认为null | 读写分离本地读场景下读流量转发依据,该参数会和db.xml中dbInstance下的dbDataCenter参数匹配 | 有效字符集 | |
| 堆外内存泄露监控相关 | enableMemoryBufferMonitor | 是否开启堆外内存泄露监控 | 0 | 是否开启堆外内存泄露监控 | 0表示关闭,1 表示开启 | 
| enableMemoryBufferMonitorRecordPool | 是否记录连接池的常驻内存 | 1 | 是否记录连接池的常驻内存,一般不用修改。该类内存通常被连接池一直持有且不释放,属于正常现象也不属于泄露。如果对观测产生了困扰可关闭 | 0表示关闭,1 表示开启 | |
| 审计日志相关参数 | enableSqlDumpLog | 是否开启审计日志 | 默认为0,关闭 | 开启后会记录读写分离(或者分析用户),执行sql下发后端实例的系列信息 | 0:关闭/1:开启 | 
| sqlDumpLogBasePath | 审计日志的base路径 | 默认为sqldump | 审计日志的base路径 | 合法路径 | |
| sqlDumpLogFileName | 审计日志文件名 | 默认为sqldump.log | 日志文件名,生成日志的相对路径:sqldump/sqldump.log | 合法文件名 | |
| sqlDumpLogCompressFilePattern | 压缩日志文件命名格式 | 默认为${date:yyyy-MM}/sqldump-%d{MM-dd}-%i.log.gz | 如:sqldump/2022-10/sqldump-10-11-1.log.gz(精度为:天) | 合法文件名格式 | |
| sqlDumpLogOnStartupRotate | 重启触发日志翻转 | 默认为1 | 每次重启,是否触发翻转;1-是,0-否 | 1-是,0-否 | |
| sqlDumpLogSizeBasedRotate | 文件大小上限触发日志翻转 | 默认为50MB | 当sqldump.log文件大小达到50MB,触发日志翻转;单位可以为:KB、MB、GB | 合法文件大小 | |
| sqlDumpLogTimeBasedRotate | 间隔天数,触发日志翻转 | 默认为1 | 当设置为1时,则每天会进行日志反转 | 正整数 | |
| sqlDumpLogDeleteFileAge | 对过期时间段内的压缩文件进行删除 | 默认为90d | 对过期90天内的压缩文件进行删除,单位可以为:d(天)、h(时)、m(分)、s(秒);(注意,精度单位需要与sqlDumpLogCompressFilePattern保持一致,否者可能不生效;原因:基于log4j2的实现,存在这个现象 | 合法时间段 | |
| sqlDumpLogCompressFilePath | 过期的文件压缩匹配 | 默认为 */sqldump-*.log.gz | 匹配 sqlDumpLogCompressFilePath 路径下 且满足sqlDumpLogDeleteFileAge 的文件进行删除 | 合法路径 | |
| tcp相关参数 | tcpKeepIdle | 启用tcp-keepalive连接检测的连接空闲时间 | 默认为30s,最大值跟使用的操作系统相关 | dble连接如果没有数据发送,多久后会发送Keepalive探测分组,生效条件需要指定版本的jdk,具体可查看2.38章节内容 | 正整数 | 
| tcpKeepInterval | 启用tcp-keepalive连接检测的时间间隔 | 默认为10s,最大值跟使用的操作系统相关 | dble连接开启tcp-keepalive探活机制后,前后两次探测之间的时间间隔,生效条件需要指定版本的jdk,具体可查看2.38章节内容 | 正整数 | |
| tcpKeepCount | 启用tcp-keepalive检测启用后的最大重试次数 | 默认3,最大值跟使用的操作系统相关 | 开启tcp-keepalive探活机制后,关闭一个非正常连接之前的最大重试次数,生效条件需要指定版本的jdk,具体可查看2.38章节内容 | 正整数 | |
1.2.3 bootstrap.dynamic.cnf
有些参数是可以通过管理命令热生效的,这部分参数会写到bootstrap.dynamic.cnf中,当dble重启时候,会用内部的值替换bootstrap.cnf中对应的值,这些参数是:
enableAlert  
enableSlowLog  
flushSlowLogPeriod  
flushSlowLogSize  
sqlSlowTime  
enableFlowControl  
flowControlLowLevel
flowControlHighLevel
enableGeneralLog  
generalLogFile  
enableStatistic  
associateTablesByEntryByUserTableSize  
frontendByBackendByEntryByUserTableSize  
tableByUserByEntryTableSize  
enableBatchLoadData  
maxRowSizeToFile  
enableMemoryBufferMonitor
xaIdCheckPeriod  
enableSqlDumpLog
1.2.4 配置实例
#encoding=UTF-8
-agentlib:jdwp=transport=dt_socket,server=y,address=8088,suspend=n
-server
-XX:+AggressiveOpts
-Dfile.encoding=UTF-8
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1984
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.host=127.0.0.1
-Xmx4G
-Xms1G
-XX:MaxDirectMemorySize=2G
#  base config
-DhomePath=.
-DinstanceName=1
# valid for sequenceHandlerType=2 or 3
-DinstanceId=1
-DserverId=xxx1
#-DbindIp=0.0.0.0
#-DserverPort=8066
#-DmanagerPort=9066
#-DmaxCon=1024
#-DNIOFrontRW=4
#-DNIOBackendRW=12
#-DfrontWorker=4
#-DmanagerFrontWorker=2
#-DbackendWorker=12
#-DcomplexQueryWorker=8
#-DwriteToBackendWorker=4
-DfakeMySQLVersion=5.7.11
# serverBacklog size,default 2048
-DserverBacklog=2048
#-DusePerformanceMode=0
# if need out HA
-DuseOuterHa=true
# connection
#-Dcharset=utf8mb4
-DmaxPacketSize=167772160
-DtxIsolation=2
#-Dautocommit=1
#parameter for mysql
#-DgroupConcatMaxLen=1024
# option
#-DuseCompression=1
-DusingAIO=0
-DuseThreadUsageStat=1
#  query time cost statistics
#-DuseCostTimeStat=0
#-DmaxCostStatSize=100
#-DcostSamplePercent=1
# consistency
#  check the consistency of table structure between nodes,default not
-DcheckTableConsistency=0
#  check period, he default period is 60000 milliseconds
-DcheckTableConsistencyPeriod=60000
#  processor check conn
-DprocessorCheckPeriod=1000
-DsqlExecuteTimeout=3000
-DidleTimeout=1800000
#-DbackSocket unit:bytes
#-DbackSocketSoRcvbuf=4194304
#-DbackSocketSoSndbuf=1048576
#-DbackSocketNoDelay=1
#  frontSocket
#-DfrontSocketSoRcvbuf=1048576
#-DfrontSocketSoSndbuf=4194304
#-DfrontSocketNoDelay=1
#  query memory used for per session,unit is M
-DotherMemSize=4
-DorderMemSize=4
-DjoinMemSize=4
#  off Heap unit:bytes
-DbufferPoolChunkSize=32767
-DbufferPoolPageNumber=512
-DbufferPoolPageSize=2097152
#-DmappedFileSize=2097152
#  transaction log
#  1 enable record the transaction log, 0 disable ,the unit of transactionRotateSize is M
-DrecordTxn=0
#-DtransactionLogBaseDir=/txlogs
#-DtransactionLogBaseName=server-tx
#-DtransactionRotateSize=16
#  XA transaction
#  use XA transaction ,if the mysql service crash,the unfinished XA commit/rollback will retry for several times , it is the check period for ,default is 1000 milliseconds
-DxaSessionCheckPeriod=1000
#  use XA transaction ,the finished XA log will removed. the default period is 1000 milliseconds
-DxaLogCleanPeriod=1000
#  XA Recovery Log path
# -DxaRecoveryLogBaseDir=/xalogs/
#  XA Recovery Log name
#-DxaRecoveryLogBaseName=xalog
#  XA Retry count, retry times in backend, 0 means always retry until success
#-DxaRetryCount=0
#-DviewPersistenceConfBaseDir=/viewPath
#-viewPersistenceConfBaseName=viewJson
#  for join tmp results
#-DmergeQueueSize=1024
#-DorderByQueueSize=1024
#-DjoinQueueSize=1024
#  true is use JoinStrategy, default false
#-DuseJoinStrategy=true
#-DjoinStrategyType=-1
-DnestLoopConnSize=4
-DnestLoopRowsSize=2000
#  if enable the slow query log
-DenableSlowLog=1
#  the slow query log location
#-DslowLogBaseDir=./slowlogs
#-DslowLogBaseName=slow-query
#  the max period for flushing the slow query log from memory to disk  after last time , unit is second
-DflushSlowLogPeriod=1
#  the max records for flushing the slow query log from memory to disk after last time
-DflushSlowLogSize=1000
#  the threshold for judging if the query is slow , unit is millisecond
-DsqlSlowTime=100
#  used for load data,maxCharsPerColumn means max chars length for per column when load data
#-DmaxCharsPerColumn=65535
#  used for load data, because dble need save to disk if loading file contains large size
#-DmaxRowSizeToFile=100000
if enable the batch load data
#-DenableBatchLoadData=1
#enableFlowControl=false
#-DflowControlHighLevel=4194304
#-DflowControlLowLevel=262144
#  if enable the general log
#-DenableGeneralLog=1
#  general log file path
#-DgeneralLogFile=general/general.log
#  maximum value of file, unit is mb
#-DgeneralLogFileSize=16
#  the queue size must not be less than 1 and must be a power of 2
#-DgeneralLogQueueSize=4096
#  if enable statistic sql
#-DenableStatistic=1
#-DenableStatisticAnalysis=0
#-DassociateTablesByEntryByUserTableSize=1024
#-DfrontendByBackendByEntryByUserTableSize=1024
#-DtableByUserByEntryTableSize=1024
#  processing queue size must not be less than 1 and must be a power of 2
#-DstatisticQueueSize=4096
# samplingRate
#-DsamplingRate=100
# size of sql log table
#-DsqlLogTableSize=1024
#-DmaxResultSet=524288
#-DinSubQueryTransformToJoin=false
#For rwSplitUser, Implement stickiness for read and write instances, the default value is 1000ms
#-DrwStickyTime=1000
# if enable frontend connection activity ratio statistics
#-DenableSessionActiveRatioStat=1
# if enable frontend connection and backend connection are associated with threads
#-DenableConnectionAssociateThread=1
#-Ddistrict=
#-DdataCenter=
#-DxaIdCheckPeriod=300
#  whether enable the memory buffer monitor
#-DenableMemoryBufferMonitor=0
#-DenableMemoryBufferMonitorRecordPool=1
#-DenableSqlDumpLog=0
#-DsqlDumpLogBasePath=sqldump
#-DsqlDumpLogFileName=sqldump.log
#-DsqlDumpLogCompressFilePattern=${date:yyyy-MM}/sqldump-%d{MM-dd}-%i.log.gz
#-DsqlDumpLogOnStartupRotate=1
#-DsqlDumpLogSizeBasedRotate=50MB
#-DsqlDumpLogTimeBasedRotate=1
#-DsqlDumpLogDeleteFileAge=90d
#-DsqlDumpLogCompressFilePath=*/sqldump-*.log.gz
#-DtcpKeepIdle=30
#-DtcpKeepInterval=10
#-DtcpKeepCount=3