hhdb数据库介绍(9-22)
计算节点特殊说明
dataNodeIdleCheckPeriod
参数说明:
Property | Value |
---|---|
参数值 | dataNodeIdleCheckPeriod |
是否可见 | 是 |
参数说明 | 数据节点默认空闲检查时间(秒) |
默认值 | 120 |
最小值 | 1 |
最大值 | 3600 |
Reload是否生效 | Y |
参数设置:
<property name="dataNodeIdleCheckPeriod">120</property><!-- 数据节点默认空闲检查时间(秒) -->
参数作用:
用于设置数据节点空闲检查的定时任务的时间。计算节点会定时检查后端存储节点连接情况,关闭多余的空闲连接或者补足连接池的可用连接,保持连接不被存储节点关闭,维护连接池的正常运作。
例如:在3323服务端口进行大并发的插入操作,在3325管理端口执行Show @@backend监控后端连接数量,大并发操作执行完毕以后,当计算节点检测到数据节点有超过配置数量的处于空闲的后端连接,计算节点会去清理掉这些连接。
deadlockCheckPeriod
参数说明:
Property | Value |
---|---|
参数值 | deadlockCheckPeriod |
是否可见 | 是 |
参数说明 | 死锁检测周期(毫秒),0代表不启用 |
默认值 | 3000 |
最小值 | 0 |
最大值 | 100000 |
Reload是否生效 | Y |
参数作用:
开启死锁检测时,会根据设置的周期定时检测跨库死锁。如果发现跨库死锁,会杀掉其中trx_weight最小的事务。
mysql> select * from autoi where id=4 for update;
ERROR 1213 (HY000): Deadlock found when trying to get lock; try restarting transaction
不开启死锁检测,发生死锁时会一直等待到锁超时,锁超时时间依据存储节点中的innodb_lock_wait_timeout参数值。
mysql> select * from autoi where id=10 for update;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
defaultCollationForUtf8mb4
参数说明:
Property | Value |
---|---|
参数值 | defaultCollationForUtf8mb4 |
是否可见 | 否 |
参数说明 | MySQL8.0 utf8mb4字符集的默认校对集 |
默认值 | utf8mb4_0900_ai_ci |
最小值 | / |
最大值 | / |
Reload是否生效 | 是 |
备注 | 仅支持以下两个值:utf8mb4_0900_ai_ci、utf8mb4_general_ci |
参数设置:
<property name="defaultCollationForUtf8mb4">utf8mb4_0900_ai_ci</property><!-- MySQL 8.0 utf8mb4字符集的默认校对集(Default collation for utf8mb4 in MySQL 8.0) -->
参数作用:
当指定字符集为utf8mb4且未指定校对集时(仅针对指定了字符集未指定校对集的情况),系统会根据当前配置的参数指定默认的校对集。若未指定字符集,则此参数不生效,此参数仅针对8.0版本的存储节点生效。不配置的时候默认为utf8mb4_0900_ai_ci,可选择配置为utf8mb4_general_ci。
defaultMaxLimit
参数说明:
Property | Value |
---|---|
参数值 | defaultMaxLimit |
是否可见 | 否 |
参数说明 | 默认最大有序数量 |
默认值 | 10000 |
最小值 | 1 |
最大值 | 10000000 |
Reload是否生效 | 是 |
参数设置:
server.xml中defaultMaxLimit参数配置 如下配置:
<property name="defaultMaxLimit">10000</property><!--默认最大有序数量-->
参数作用:
此参数为计算节点过载保护相关参数,与highCostSqlConcurrency参数配套使用。当前端并发执行跨库update/delete limit n场景时,若n超过defaultMaxLimit设置时,就会触发highCostSqlConcurrency参数控制,限制高内存消耗语句并发数量,相关连接会被hold住,等待前面执行完后,才能执行下一批。
体现在show processlist中State为Flow control,等待下一批执行。下图为方便测试,设置defaultMaxLimit=5,highCostSqlConcurrency=10,采用20并发执行跨库update limit n场景,可见10个连接在执行,另外的10个连接已经被限制。
mysql> show processlist;
+----+------+-------------------+----+---------+------+--------------+-------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-------------------+----+---------+------+--------------+-------------------------------------------------------------------+
| 4 | ztm | 10.10.0.201:57882 | PM | Query | 0 | executing | show processlist |
| 6 | ztm | 10.10.0.201:57905 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 7 | ztm | 10.10.0.201:57902 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 8 | ztm | 10.10.0.201:57912 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 9 | ztm | 10.10.0.201:57900 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 10 | ztm | 10.10.0.201:57919 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 11 | ztm | 10.10.0.201:57911 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 12 | ztm | 10.10.0.201:57904 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 13 | ztm | 10.10.0.201:57906 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 14 | ztm | 10.10.0.201:57903 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 15 | ztm | 10.10.0.201:57910 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 16 | ztm | 10.10.0.201:57908 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 17 | ztm | 10.10.0.201:57920 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 18 | ztm | 10.10.0.201:57907 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 19 | ztm | 10.10.0.201:57913 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 20 | ztm | 10.10.0.201:57909 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 21 | ztm | 10.10.0.201:57921 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 22 | ztm | 10.10.0.201:57918 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 23 | ztm | 10.10.0.201:57962 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 24 | ztm | 10.10.0.201:57915 | PM | Query | 1 | Flow control | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
| 25 | ztm | 10.10.0.201:57914 | PM | Query | 1 | Sending data | UPDATE customer_route_1 SET address = 'abcd' order by id LIMIT 20 |
+----+------+-------------------+----+---------+------+--------------+-------------------------------------------------------------------+
21 rows in set (0.01 sec)
disableDDLMinLongTrx
参数说明:
Property | Value |
---|---|
参数值 | disableDDLMinLongTrx |
是否可见 | 否 |
参数说明 | 禁用DDL最小长事务时长,单位毫秒 |
默认值 | 0 |
Reload是否生效 | 是 |
参数设置:
<property name="disableDDLMinLongTrx">0</property><!--禁用DDL最小长事务时长,单位毫秒(Disable DDL minimum long transaction length, unit: ms)-->
参数作用:
禁用DDL最小事务时长,当执行DDL操作后,先检查该表对象是否存在超过设定值时长的未提交事务,若存在,则DDL操作被禁用,并记录相关信息到hotdb.log日志文件中。 开启状态: 配置该设定值为10000,例如:
<property name="disableDDLMinLongTrx">10000</property><!--禁用DDL最小长事务时长,单位毫秒(Disable DDL minimum long transaction length, unit: ms)-->
打开会话1,登录服务端口,开启事务,如下所示:
root@127.0.0.1:hotdb 5.7.22 01:52:10> begin;update test_ddl set tel=222 where id=1;
Query OK, 0 rows affected (0.00 sec)
等待10秒钟后,打开会话2,登录服务端口,执行DDL操作,如下所示:
root@127.0.0.1:hotdb 5.7.22 01:52:22> alter table test_ddl add column car int;
ERROR 10266 (HY000): DDL is disable when exists long trx, long trx is: 11
可见:当表对象存在未提交事务且事务时长超过10秒的情况下,该表的DDL操作会被禁用,同时hotdb.log日志可见如下内容:
2022-01-07 13:52:22.747 [INFO] [HOTDBERROR] [Unusual-Logger-1] cn.hotpu.hotdb.server.b(291) - sql: alter table test_ddl add column car int, err: DDL is disab
le when exists long trx, long trx is: 11 from connection [thread=Unusual-Logger-1,id=37,user=root,host=127.0.0.1,port=3323,localport=48600,schema=HOTDB,isEtl
=false,[{_os:linux-glibc2.12}, {_client_name:libmysql}, {_pid:6849}, {_client_version:5.7.25}, {_platform:x86_64}, {program_name:mysql}]]
dnInitConcurrency
参数说明:
Property | Value |
---|---|
参数值 | dnInitConcurrency |
是否可见 | 否 |
参数说明 | 数据节点初始化时的并发数 |
默认值 | 8 |
最小值 | 1 |
最大值 | 256 |
Reload是否生效 | 是 |
参数设置:
<property name="dnInitConcurrency">8</property><!-- 数据节点初始化时的并发数 -->
参数作用:
应用于正常容灾选举切换流程时,控制初始化存储节点状态及复制关系等信息所采用的并发数。 例:A机房和B机房构成双活集群,A机房2个计算节点,B机房3个计算节点,primary节点在A机房,当A机房宕机后,B机房计算节点服务使用B机房配置上线,由于A机房宕机,B机房配置库中对应存储节点的状态配置未修改,在使用B机房配置库初始化存储节点状态机复制等信息时会尝试连接配置库中可用的存储节点,而无法连接的节点数较多时效率会比较低,设置该参数可有效提高容灾切换后的存储节点初始化效率,使集群尽早恢复正常运行状态。
dropTableRetentionTime
参数说明:
Property | Value |
---|---|
参数值 | dropTableRetentionTime |
是否可见 | 是 |
参数说明 | 被删除表保留时长,默认为0,不保留 |
默认值 | 0(小时) |
最小值 | 0 |
最大值 | 87600 |
Reload是否生效 | 是 |
参数设置:
server.xml中dropTableRetentionTime参数配置:
<property name=" dropTableRetentionTime">0</property><!--被删除表保留时长,默认为0,不保留-->
参数作用:
dropTableRetentionTime参数默认为0,表示不保留被DROP的表,执行DROP TABLE语句将立即删除表;dropTableRetentionTime大于0时,单位以小时计算,保留被DROP的表到设置时长,超过设置时长后自动删除被保留的表。例如dropTableRetentionTime=24表示保留被DROP的表,24小时后再删除被保留的表。
ddlForDbNeedSuper
参数说明:
Property | Value |
---|---|
参数值 | ddlForDbNeedSuper |
是否可见 | 否 |
参数说明 | DATABASE的DDL语句是否需要额外的SUPER权限 |
默认值 | false |
Reload是否生效 | 是 |
参数设置:
ddlForDbNeedSuper参数指针对DATABASE的DDL语句是否需要配置额外的SUPER权限。
<property name="ddlForDbNeedSuper">true</property><!--针对DATABASE的DDL语句是否需要额外的SUPER权限(Does DDL for database require extra SUPER privilege) -->
参数作用:
以创建逻辑库为例,设置成true时,需要同时拥有super权限和create全局权限才支持建库,否则创建报错:
设置成false时,只需要create全局权限即可建库:
若设置成false时,未配置create全局权限也会创建失败:
digestAllLiteralAsS
参数说明:
Property | Value |
---|---|
参数值 | digestAllLiteralAsS |
是否可见 | 否 |
参数说明 | 慢查询日志中将所有的字面值统一摘要为'S' |
默认值 | false |
Reload是否生效 | 是 |
参数设置:
<property name="digestAllLiteralAsS">false</property><!-- 慢查询日志中将所有的字面值统一摘要为'S'以减少慢查询日志的种类(false/true)(All the literal values in slow query logs are digested as 'S' to reduce the types of slow query logs, default: true) -->
参数作用:
慢查询日志中将所有的字面值统一摘要为'S'以减少慢查询日志的种类。 开启参数recordSql,当参数digestAllLiteralAsS设置为false,服务端执行SQL后查看SQL记录:
当参数digestAllLiteralAsS设置为true时,不同类型的字面值都摘要为‘S’:
drBakUrl & drBakUsername & drBakPassword
参数说明:
Property | Value |
---|---|
参数值 | drBakUrl |
是否可见 | 是 |
参数说明 | 容灾机房从配置库地址 |
默认值 | jdbcmysql//127.0.0.1:3306/hotdb_config |
Reload是否生效 | 是 |
Property | Value |
---|---|
参数值 | drBakUsername |
是否可见 | 是 |
参数说明 | 容灾机房从配置库用户名 |
默认值 | hotdb_config |
Reload是否生效 | 是 |
Property | Value |
---|---|
参数值 | drBakPassword |
是否可见 | 是 |
参数说明 | 容灾机房从配置库密码 |
默认值 | DRDS_config@2013 |
Reload是否生效 | 是 |
参数作用:
drBakUrl和drBakUsername以及drBakPassword属于配套参数,用于容灾机房配置库高可用功能。当容灾机房切换为当前主机房时,若使用配置库高可用,则需要设置为对应从配置库的信息且保证主从配置库实例的复制关系正常,且互为主备。当容灾机房切换为当前主机房时,主配置库发生故障时会自动切换到从配置库.
<property name="drBakUrl">jdbc:mysql://192.168.240.77:3316/hotdb_config</property><!-- 容灾机房从配置库地址 -->
<property name="drBakUsername">hotdb_config</property><!-- 容灾机房从配置库用户名 -->
<property name="drBakPassword">DRDS_config@2013</property><!-- 容灾机房从配置库密码 -->
drChangeMaster
参数说明:
Property | Value |
---|---|
参数值 | drChangeMaster |
是否可见 | 是 |
参数说明 | 灾备存储节点故障是否更改复制关系 |
默认值 | 0 |
最小值 | 0 |
最大值 | 1 |
Reload是否生效 | 是 |
参数设置:
<property name="drChangeMaster">false</property><!--灾备机房心跳周期(秒)-->
参数作用:
用于控制当灾备存储节点故障时,是否要更改复制关系。默认为0表示否。
drHeartbeatPeriod & drHeartbeatTimeoutMS
参数说明:
Property | Value |
---|---|
参数值 | drHeartbeatPeriod |
是否可见 | 是 |
参数说明 | 灾备机房心跳周期(秒) |
默认值 | 5 |
最小值 | 1 |
最大值 | 60 |
Reload是否生效 | 是 |
Property | Value |
---|---|
参数值 | drHeartbeatTimeoutMS |
是否可见 | 是 |
参数说明 | 灾备机房心跳周期(秒) |
默认值 | 1000 |
最小值 | 100 |
最大值 | 10000 |
Reload是否生效 | 是 |
参数设置:
<property name="drHeartbeatPeriod">5</property><!--灾备机房心跳周期(秒)-->
<property name="drHeartbeatTimeoutMS">1000</property><!--灾备机房心跳超时时间(毫秒)-->
参数作用:
drheartbeatPeriod设置灾备机房心跳检测周期,默认值为5s,即心跳定时检测每5秒执行一次。drheartbeatTimeoutMs设置心跳超时时间,默认值为1000ms。检测灾备机房存储节点共用情况,存储节点状态,心跳超时的情况下会将节点置为不可用并根据drChangeMaster参数的开启情况决定是否切换灾备机房存储节点。
drUrl & drUsername & drPassword
参数说明:
Property | Value |
---|---|
参数值 | drUrl |
是否可见 | 是 |
参数说明 | 容灾机房配置库地址 |
默认值 | jdbcmysql//127.0.0.1:3306/hotdb_config |
Reload是否生效 | 是 |
Property | Value |
---|---|
参数值 | drUsername |
是否可见 | 是 |
参数说明 | 容灾机房配置库用户名 |
默认值 | hotdb_config |
Reload是否生效 | 是 |
Property | Value |
---|---|
参数值 | drPassword |
是否可见 | 是 |
参数说明 | 容灾机房配置库密码 |
默认值 | DRDS_config@2013 |
Reload是否生效 | 是 |
参数作用:
drUrl,drUsername,drPassword属于配套参数,,drUrl是指容灾机房计算节点配置信息的配置库路径,drUsername,drPassword是指连接该物理库的用户名密码,该配置库用于存储容灾机房配置信息。
<property name="drUrl">jdbc:mysql://192.168.240.76:3316/hotdb_config</property><!-- 容灾机房配置库地址 -->
<property name="drUsername">hotdb_config</property><!-- 容灾机房配置库用户名 -->
<property name="drPassword">DRDS_config@2013</property><!-- 容灾机房配置库密码 -->
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了