ITPub博客

首页 > 数据库 > NewSQL > oceanbase日志盘相关配置项小结

oceanbase日志盘相关配置项小结

原创 NewSQL 作者:贺子_DBA时代 时间:2025-05-04 11:26:30 0 删除 编辑

前言:

我们知道oceanbase的日志盘是预分配的,这一点给Oracle类似,那么oceanbase是分布式数据库,该如何配置oceanbase日志盘空间大小呢?可以给不同的observer节点设置不同的值吗?答案是可以的。

一、oceanbase可用日志盘大小:

1、配置项log_disk_size:

1.1、配置项含义:

log_disk_size 用于设置 Redo 日志磁盘的大小,即本 OBServer 可以使用的日志盘总空间大小,我们知道某个observer上可以有多个租户,每个租户都相当于是Oracle的一个实例,也就是说每个租户都需要有自己的独有的redo日志盘,但是这个observer上所有的租户的日志盘总大小不能大于log_disk_size的大小。

log_disk_size属性说明            

属性 描述
参数类型 Varchar
默认值 0,默认单位为 MB,配置时需写明单位。
取值范围 [0M, +∞)
是否可修改 是,支持通过 ALTER SYSTEM SET语句修改。
是否重启 OBServer 节点生效 否
使用说明  
  • 该配置项的值为 0 时,会根据 log_disk_percentage 配置项设置的值分配日志盘空间。也就是说log_disk_size的优先级高于log_disk_percentage。
  • OBServer 节点启动时,会预分配足够多的日志文件。例如:用户配置 log_disk_size = 100 G,那么 OBServer 节点第一次启动时,就会预分配 100 G 的日志文件作为日志文件池。
  • OBServer 节点上创建租户 Unit 时,会为 Unit 预留足够多的日志盘空间,如果本地剩余日志盘空间(日志盘可用空间总大小 — 已分配空间)不满足 Unit 规格要求,则创建租户 Unit 失败。
  • OceanBase 数据库 V4.0创建租户可以指定LOG_DISK_SIZE:租户的日志盘空间大小,OceanBase 数据库 V4.0 会按租户管理日志盘空间,系统为各个租户预留日志盘空间,实现按租户隔离。当用户没有指定时,LOG_DISK_SIZE 默认值是内存规格的 3 倍大小,LOG_DISK_SIZE值最小为 2G;
  • 当log_disk_size需要降低的时候,减小后的值需要大于当前已经给所有租户分配redo大小之和,否则虽然命令执行成功,但是并没有生效。

1.2、查看配置项:

sys 租户和所有用户租户均可以使用 SHOW PARAMETERS 语句或视图 GV$OB_PARAMETERS 查询该配置项,

方式1: 

root@10.18.92.150 : (none) 21:31:44>show  parameters   like   'log_disk_size'; 

+-------+----------+--------------+----------+---------------+-----------+-------+----------------------------------------------------------------+------------+---------+---------+-------------------+---------------+-----------+ | zone  | svr_type | svr_ip       | svr_port | name          | data_type | value | info                                                           | section    | scope   | source  | edit_level        | default_value | isdefault | +-------+----------+--------------+----------+---------------+-----------+-------+----------------------------------------------------------------+------------+---------+---------+-------------------+---------------+-----------+ | zone1 | observer | 10.18.92.141 |     2882 | log_disk_size | CAPACITY  | 10G   | the size of disk space used by the log files. Range: [0, +∞)   | LOGSERVICE | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | 0M            |         0 | | zone2 | observer | 10.18.92.142 |     2882 | log_disk_size | CAPACITY  | 10G   | the size of disk space used by the log files. Range: [0, +∞)   | LOGSERVICE | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | 0M            |         0 | | zone3 | observer | 10.18.92.143 |     2882 | log_disk_size | CAPACITY  | 10G   | the size of disk space used by the log files. Range: [0, +∞)   | LOGSERVICE | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | 0M            |         0 | +-------+----------+--------------+----------+---------------+-----------+-------+----------------------------------------------------------------+------------+---------+---------+-------------------+---------------+-----------+ 3 rows in set (0.01 sec) 

方式2: 

root@10.18.92.150 : oceanbase 21:34:21>select  * from  oceanbase.GV$OB_PARAMETERS  where   NAME='log_disk_size'\G 

*************************** 1. row ***************************       

 SVR_IP: 10.18.92.141      SVR_PORT: 2882          ZONE: zone1         SCOPE: CLUSTER     TENANT_ID: NULL          NAME: log_disk_size     DATA_TYPE: CAPACITY         VALUE: 10G          INFO: the size of disk space used by the log files. Range: [0, +∞)       SECTION: LOGSERVICE    EDIT_LEVEL: DYNAMIC_EFFECTIVE DEFAULT_VALUE: 0M     ISDEFAULT: NO 

备注:查询结果中可以看到SCOPE是cluster,表明该配置项是集群级别生效的,如果 scope 列对应的值为 TENANT,则表示该配置项为租户级别。动态生效:edit_level 为 dynamic_effective,重启生效:edit_level 为 static_effective。

1.3、修改配置项

修改 log_disk_size 配置项的示例如下集群的所有observer全部生效: 

root@10.18.92.150 : oceanbase 22:17:50>ALTER SYSTEM SET log_disk_size = '20G'; 

Query OK, 0 rows affected (0.01 sec) 

修改指定 Zone 的 log_disk_size 配置项的示例如下: 

obclient> ALTER SYSTEM SET log_disk_size = '20G' ZONE='z1'; 

修改指定 OBServer 的 log_disk_size 配置项的示例如下: 

obclient> ALTER SYSTEM SET log_disk_size='15G' SERVER='10.18.92.142:2882' ;

2、log_disk_percentage:

2.1、配置项含义:

log_disk_percentage 用于设置 Redo 日志占用其所在磁盘总空间的百分比 属性说明            
属性 描述
参数类型 INT
默认值 0
取值范围 [0, 99]
是否可修改 是,支持通过 ALTER SYSTEM SET语句修改。
是否重启 OBServer 节点生效 否
使用说明  
  • log_disk_size 配置项取值为 0 时,该配置项才生效,若 log_disk_size 取值不为 0,则该配置项不生效。
  • 该配置项的值为 0 时,系统会根据日志和数据是否共用同一磁盘来自动计算 Redo 日志占用其所在磁盘总空间的百分比:
    • 共用时,Redo 日志占用其所在磁盘总空间的百分比为 30%,即分配磁盘总空间 30% 的日志文件。
    • 独占时,Redo 日志占用其所在磁盘总空间的百分比为 90%,即分配磁盘总空间 90% 的日志文件。

3、log_disk_utilization_limit_threshold:

配置项含义:

log_disk_utilization_limit_threshold 用于设置租户日志盘利用率限制阈值。当租户日志盘使用量超过租户日志盘空间总量乘以该值时,不再允许日志写入。
属性 描述
参数类型 整型
默认值 95
取值范围 [80, 100]
是否重启 OBServer 节点生效 否

log_disk_utilization_limit_threshold 的取值应该大于 log_disk_utilization_threshold 的取值。oceanbase V4.0 以后,可以通过设置unit的日志盘大小,来实现控制租户在某个observer节点的日志盘的大小。

可以通过如下sql查看某个租户的日志盘的使用率:(登录sys租户查看)

root@10.18.92.150 : oceanbase 09:41:26>select a.svr_ip,a.svr_port,a.tenant_id,b.tenant_name, CAST(a.data_disk_in_use/1024/1024/1024 as DECIMAL(15,2)) data_disk_use_G,  CAST(a.log_disk_size/1024/1024/1024 as DECIMAL(15,2)) log_disk_size,  CAST(a.log_disk_in_use/1024/1024/1024 as DECIMAL(15,2)) log_disk_use_G, log_disk_in_use/log_disk_size 'usage%' from oceanbase.__all_virtual_unit a,dba_ob_tenants b  where a.tenant_id=b.tenant_id and b.tenant_name='liuwenhe'; 

+--------------+----------+-----------+-------------+-----------------+---------------+----------------+--------+ | svr_ip       | svr_port | tenant_id | tenant_name | data_disk_use_G | log_disk_size | log_disk_use_G | usage% | +--------------+----------+-----------+-------------+-----------------+---------------+----------------+--------+ | 10.18.92.143 |     2882 |      1002 | liuwenhe    |            0.04 |         54.00 |          12.26 | 0.2270 | | 10.18.92.142 |     2882 |      1002 | liuwenhe    |            0.05 |         54.00 |          12.26 | 0.2270 | | 10.18.92.141 |     2882 |      1002 | liuwenhe    |            0.04 |         54.00 |          12.26 | 0.2270 | +--------------+----------+-----------+-------------+-----------------+---------------+----------------+--------+

4、log_disk_utilization_threshold:

配置项含义:

log_disk_utilization_threshold 用于设置租户日志盘利用率阈值,当租户日志盘使用量超过租户日志盘空间总量乘以该值时,进行日志文件重用。
属性 描述
参数类型 整型
默认值 80
取值范围 [10, 99]
是否重启 OBServer 节点生效 否
log_disk_utilization_threshold 的取值应该小于 log_disk_utilization_limit_threshold 的取值。

总结:

某个租户最大可用redo磁盘大小,在默认情况下,系统会根据日志和数据是否共用同一磁盘来自动计算 Redo 日志占用其所在磁盘总空间的百分比,日志和数据共用同一个磁盘时,Redo 日志占用其所在磁盘总空间的百分比为 30%,即分配磁盘总空间 30% 的日志文件,这个时候租户最大可用redo大小为:磁盘总空间×30%×95% ;日志独占一个磁盘时,Redo 日志占用其所在磁盘总空间的百分比为 90%,即分配磁盘总空间 90% 的日志文件,此时租户最大可用redo大小为:磁盘总空间×90%×95% 。可能会人疑问,明明超过log_disk_utilization_threshold的比例,就会触发日志盘复用,那为啥还会触发log_disk_utilization_limit_threshold的值,进而导致不可写日志?

如下场景可能导致:

1)由于有大事务的存在,导致redo日志无法被复用,进而导致日志盘一直增大,最终超过log_disk_utilization_threshold。2)当redo日志被截断后,redo空间就可以被复用了,但是当业务流量大,频发的事务导致日志增长的速度大于日志截断的速度,检查点无法快速推进,进而导致内存脏页过大。

3)数据库转储的速度太慢,导致数据库内存的脏页太多,内存中的脏页需要依靠redo来保护,进而导致redo无法被截断复用;4)多副本同步数据依靠redo来实现,在Paxos 组中,只有多数派副本确认持久化后,Leader 才能截断日志, 当日志同步太慢,也可能导致redo无法及时被截断,进而导致复用速度慢,最终导致redo日志越来越大。

二、日志盘性能相关配置项:

1、log_disk_throttling_maximum_duration:

配置项含义:

log_disk_throttling_maximum_duration 用于调整触发日志限速后,日志盘的最大可用时间。

说明  

该配置项从 V4.2.0 版本开始引入。
属性 描述
参数类型 TIME
默认值 2h,表示 2 小时
取值范围 [1s,3d]
是否重启 OBServer 节点生效 否
log_disk_throttling_maximum_duration 和 log_disk_throttling_percentage 两个配置项均会影响日志限速。log_disk_throttling_percentage 设置的值越小,则日志限速开始的时机越早;log_disk_throttling_maximum_duration 设置的值越大,则预期日志限速支撑的时间越长,限速的力度越大。对于写入压力和转储速度差距较大的场景,可以尝试将 log_disk_throttling_percentage 调小一些,将 log_disk_throttling_maximum_duration 调大一些。建议优先调大 log_disk_throttling_maximum_duration。

2、log_disk_throttling_percentage:

log_disk_throttling_percentage用于触发日志写入限速的不可回收日志盘空间占比。   说明  该配置项从 V4.2.0 版本开始引入。
属性 描述
参数类型 int64_t
默认值 60
取值范围 [40,100]
是否重启 OBServer 节点生效 否

具体来说就是当日志盘使用率超过log_disk_utilization_threshold,会触发redo文件的复用,但是并不是所有的redo文件都可以被复用,当不可复用的文件总大小占总可用磁盘大小的比例超过log_disk_throttling_percentage的时候,就会触发日志的写入限速。

3、log_archive_concurrency : 用于设置日志归档的并发度。

4、log_restore_concurrency:用于设置恢复日志的并发度;

5、log_storage_compress_func:用于设置 clog 存储压缩的压缩算法,默认值为:lz4_1.0,可选值为:zstd_1.0和zstd_1.3.8。

压缩算法对比            

算法 压缩率 压缩速度 解压速度 CPU 占用 适用场景
lz4_1.0 低 极快 极快 低 高吞吐、低延迟场景(如实时写入)
zstd_1.0 中等 较快 较快 中等 平衡压缩率与性能(通用场景)
zstd_1.3.8 高 中等偏快 中等偏快 中等偏高 存储成本敏感场景(需更高压缩率)

6、log_storage_compress_all:用于控制是否开启 clog 存储压缩功能。

7、log_transport_compress_func:用于日志传输的压缩器算法。

8、log_transport_compress_all:用于对日志传输是否使用压缩。默认值是false,表示不开启日志传输压缩,当遇到日志同步慢的问题,可以尝试开启传输压缩来缓解。

三、日志盘故障切换相关配置项:

1、log_storage_warning_tolerance_time 用于设置从日志盘 IO 失败到磁盘被标记为坏盘时触发切主的时间。

说明  

从 V4.1.0 版本开始引入。
属性 描述
参数类型 时间类型
默认值 5s
取值范围 [1s,300s]
是否重启 OBServer 节点生效 否
设置该参数可以调整由于日志盘故障触发切主的敏感度。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29654823/viewspace-3083145/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年数据库管理员从业经历,熟悉Oracle、mysql、tidb、oceanbase、redis、 mongodb 、python等技术栈,持有11g ocm 、mysql 5.7 ocp 、tidb 5.0 ptcp、tidb 6.0 ptca、oceanbase obcp等

注册时间:2014-05-12

  • 博文量
    327
  • 访问量
    2148887