当前位置: 首页 > ai >正文

OceanBase数据库磁盘空间管理

OceanBase数据库磁盘空间管理

  • 日志盘空间管理
    • 日志盘容量参数
    • 日志盘空间满应急处理
  • 数据盘空间管理
    • 数据盘容量参数
    • 数据文件自动扩展
    • 数据盘空间满应急处理
    • 表占用的磁盘空间

日志盘空间管理

日志盘容量参数

🐯 与日志盘redo_dir相关的四个重要参数:

  • log_disk_size:设置OBServer可以使用的日志盘总空间大小。默认值为0M。该配置项支持动态修改。
  • log_disk_percentage:用于设置Redo日志占用其所在磁盘总空间的百分比。默认值为0。该配置项支持动态修改。
  • log_disk_utilization_threshold:用于设置租户日志盘利用率阈值,当租户日志盘使用量超过租户日志盘空间总量乘以该值时,进行日志文件重用。默认值为80,取值范围为[10,99]。该配置项支持动态修改。
  • log_disk_utilization_limit_threshold:用于设置租户日志盘利用率限制阈值。当租户日志盘使用量超过租户日志盘空间总量乘以该值时,不再允许日志写入。默认值为95,取值范围为[80,100]。该配置项支持动态修改。

log_disk_utilization_limit_threshold的取值应该大于log_disk_utilization_threshold的取值。

🦁 OBServer可以使用的日志盘总容量由集群级别的配置项log_disk_sizelog_disk_percentage共同控制。

  • log_disk_size不为0时,系统按照log_disk_size的值分配日志盘空间;
  • log_disk_size=0log_disk_percentage不为0时,系统按照log_disk_percentage的值分配日志盘空间;
  • log_disk_sizelog_disk_percentage都为0时,系统会根据日志和数据是否共用磁盘来自动计算日志占用的磁盘空间百分比:
    • Redo日志和数据共用磁盘时,日志占用磁盘空间的百分比为30%
    • Redo日志独占磁盘时,日志占用磁盘空间的百分比为90%

检查日志盘相关的配置参数值:

obclient(root@sys)[oceanbase]> select zone,tenant_id,scope,section,name,value,edit_level,default_value 
from oceanbase.gv$ob_parameters where name in 
('log_disk_size','log_disk_percentage','log_disk_utilization_limit_threshold','log_disk_utilization_threshold');+-------+-----------+---------+------------+--------------------------------------+-------+-------------------+---------------+
| zone  | tenant_id | scope   | section    | name                                 | value | edit_level        | default_value |
+-------+-----------+---------+------------+--------------------------------------+-------+-------------------+---------------+
| zone1 |      NULL | CLUSTER | LOGSERVICE | log_disk_percentage                  | 0     | DYNAMIC_EFFECTIVE | 0             |
| zone1 |      NULL | CLUSTER | LOGSERVICE | log_disk_size                        | 675G  | DYNAMIC_EFFECTIVE | 0M            |
| zone1 |         1 | TENANT  | LOGSERVICE | log_disk_utilization_threshold       | 80    | DYNAMIC_EFFECTIVE | 80            |
| zone1 |         1 | TENANT  | LOGSERVICE | log_disk_utilization_limit_threshold | 95    | DYNAMIC_EFFECTIVE | 95            |
| zone1 |      1001 | TENANT  | LOGSERVICE | log_disk_utilization_threshold       | 80    | DYNAMIC_EFFECTIVE | 80            |
| zone1 |      1001 | TENANT  | LOGSERVICE | log_disk_utilization_limit_threshold | 95    | DYNAMIC_EFFECTIVE | 95            |
| zone1 |      1002 | TENANT  | LOGSERVICE | log_disk_utilization_threshold       | 80    | DYNAMIC_EFFECTIVE | 80            |
| zone1 |      1002 | TENANT  | LOGSERVICE | log_disk_utilization_limit_threshold | 95    | DYNAMIC_EFFECTIVE | 95            |
+-------+-----------+---------+------------+--------------------------------------+-------+-------------------+---------------+
8 rows in set (0.003 sec)

修改日志盘大小:

ALTER SYSTEM SET log_disk_size='720G';

修改日志文件占用redo_dir磁盘总空间的百分比:

ALTER SYSTEM SET log_disk_percentage=80;

修改特定租户的日志盘利用率阈值:

ALTER SYSTEM SET log_disk_utilization_threshold=85 tenant = tpcc; 
ALTER SYSTEM SET log_disk_utilization_limit_threshold=98 tenant = tpcc; 

日志盘空间满应急处理

当遇到clog日志盘空间满的问题时,集群一般表现为无主选举,写入失败,缺副本等现象。应急处理步骤如下:

  1. 主动停止租户的写入,防止clog盘临时腾挪的空间再次快速被业务写入打满,无法修复。

  2. 停止集群写入后,临时调大clog盘阈值比例,由95%调整到98%。

ALTER SYSTEM SET log_disk_utilization_limit_threshold = 98 server ='[observer_ip]:2882';
  1. 观察一段时间,一般情况下clog追上后,集群可以自动恢复。

数据盘空间管理

数据盘容量参数

🐯 与数据盘data_dir相关的四个重要参数:

  • datafile_size:用于设置数据文件占用磁盘可用空间的大小。默认值为0M。该配置项支持动态修改,且修改时不支持缩小,只支持扩大
  • datafile_disk_percentage:磁盘数据文件占用磁盘总空间的百分比,默认值为0,取值范围[0,99]。该配置项支持动态修改。
  • datafile_next:用于设置磁盘数据文件自动扩容的步长,默认值为0M,表示不启动增长。该配置项支持动态修改。
  • datafile_maxsize:用于设置磁盘数据文件自动扩容的最大空间,默认值为0M,表示不启动自动扩容。该配置项支持动态修改。

🦁 OBServer可以使用的数据盘总容量由集群级别的配置项datafile_sizedatafile_disk_percentage共同控制。

  • datafile_size不为0时,系统按照datafile_size的值分配数据盘空间;
  • datafile_size=0Mdatafile_disk_percentage不为0时,系统按照datafile_disk_percentage的值分配日志盘空间;
  • datafile_sizedatafile_disk_percentage都为0时,系统会根据日志和数据是否共用磁盘来自动计算日志占用的磁盘空间百分比:
    • 日志和数据共用磁盘时,数据占用磁盘空间的百分比为60%
    • 数据独占磁盘时,数据占用磁盘空间的百分比为90%

🐱 datafile_nextdatafile_maxsize两个参数用于控制数据文件的自动扩展。

  • datafile_next或者datafile_maxsize的值设置为0M时,表示关闭数据文件自动扩展。
  • datafile_maxsize的配置需要大于当前数据文件占用的磁盘空间大小,即datafile_sizedatafile_disk_percentage对应的数据文件大小,否则不会触发自动扩容。
  • 如果datafile_maxsize超过了磁盘最大空间,则以实际磁盘的可用大小作为最大值。
  • 如果datafile_next的值小于或等于1G时,实际生效的配置为min(1G, datafile_maxsize * 10%)
  • 如果datafile_next的值大于1G时,实际生效的配置为min(datafile_next, 磁盘剩余空间)

配置磁盘数据文件的自动扩容功能时,建议将步长datafile_next的初始配置设置为datafile_maxsize20%左右,避免频繁扩容。

检查数据盘相关的配置参数:

select zone,tenant_id,scope,section,name,value,edit_level,default_value 
from oceanbase.gv$ob_parameters where name in 
('datafile_size','datafile_disk_percentage','datafile_next','datafile_maxsize');+-------+-----------+---------+---------+--------------------------+-------+-------------------+---------------+
| zone  | tenant_id | scope   | section | name                     | value | edit_level        | default_value |
+-------+-----------+---------+---------+--------------------------+-------+-------------------+---------------+
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_disk_percentage | 0     | DYNAMIC_EFFECTIVE | 0             |
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_maxsize         | 1024T | DYNAMIC_EFFECTIVE | 0             |
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_next            | 2G    | DYNAMIC_EFFECTIVE | 0             |
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_size            | 300G  | DYNAMIC_EFFECTIVE | 0M            |
+-------+-----------+---------+---------+--------------------------+-------+-------------------+---------------+
4 rows in set (0.011 sec)

修改数据文件大小:

ALTER SYSTEM SET datafile_size='500G';

修改数据文件占用data_dir磁盘总空间的百分比:

ALTER SYSTEM SET datafile_disk_percentage=80;

修改数据文件自动扩展配置:

alter system set datafile_next = '20G';
alter system set datafile_maxsize = '800G';

数据文件自动扩展

案例:

+-------+-----------+---------+---------+--------------------------+-------+-------------------+---------------+
| zone  | tenant_id | scope   | section | name                     | value | edit_level        | default_value |
+-------+-----------+---------+---------+--------------------------+-------+-------------------+---------------+
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_disk_percentage | 90    | DYNAMIC_EFFECTIVE | 0             |
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_maxsize         | 0     | DYNAMIC_EFFECTIVE | 0             |
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_next            | 0     | DYNAMIC_EFFECTIVE | 0             |
| zone1 |      NULL | CLUSTER | SSTABLE | datafile_size            | 0M    | DYNAMIC_EFFECTIVE | 0M            |
+-------+-----------+---------+---------+--------------------------+-------+-------------------+---------------+
  1. 检查数据文件参数配置:
show parameters like 'datafile_size';
show parameters like 'datafile_disk_percentage';
show parameters like 'datafile_next';
show parameters like 'datafile_maxsize';
  1. 检查当前已经预分配的磁盘空间:
MySQL [(none)]> SELECT data_disk_allocated/1024/1024/1024 AS datafile_G FROM oceanbase.GV$OB_SERVERS;
+-------------------+
| datafile_G        |
+-------------------+
| 1842.292968750000 |
+-------------------+
1 row in set (0.004 sec)
  1. datafile_maxsize配置为比data_disk_allocated更大的值,同时设置datafile_next为非零的值。
alter system set datafile_maxsize = '2TB';
alter system set datafile_next = '100G';
  1. 确认自动扩容设置是否生效。
MySQL [(none)]> SELECT data_disk_allocated/1024/1024/1024 AS datafile_G, data_disk_capacity/1024/1024/1024 AS datafile_max_G FROM oceanbase.GV$OB_SERVERS;
+-------------------+-------------------+
| datafile_G        | datafile_max_G    |
+-------------------+-------------------+
| 1842.292968750000 | 2028.677734375000 |
+-------------------+-------------------+
1 row in set (0.000 sec)

根据查询结果,当前磁盘数据文件自动扩容的最大上限空间data_disk_capacity的值为设置的datafile_maxsize的值,且data_disk_capacity的值大于data_disk_allocated的值,说明自动扩容设置成功。

数据盘空间满应急处理

OceanBase数据盘空间满的情况一般比较少见,但是在写满后也会导致无法转储、无法合并、内存无法释放的问题,进而导致集群无法写入。

处理数据盘空间满的几个策略如下:

  1. 对于分布了多个租户的OB节点,首先考虑通过扩容节点+迁移Unit的方式均衡数据。
  • 扩容节点可以使用OCP页面操作或者使用命令行操作。
  • 使用OCP手动迁移Unit到扩容节点。可以通过双击Unit后的规格进行资源的迁移操作。迁移只能在单个Zone内进行。
  1. 对于暂时无法迁移Unit或通过扩容进行数据均衡的情况,通常采用如下几种方式应急。
  • 调大OceanBase集群磁盘最大空间百分比。该参数默认值为90,应急时调大可以临时释放一部分空间。
ALTER system SET datafile_disk_percentage = 98;
  • 删除部分可删除的数据、表、冗余索引等,并清空回收站中的数据。

表占用的磁盘空间

登录用户租户的系统管理员,查看表占用的磁盘空间:

--MySQL租户
SELECT * FROM oceanbase.DBA_OB_TABLE_SPACE_USAGE;--Oracle租户
SELECT * FROM sys.DBA_OB_TABLE_SPACE_USAGE;

返回结果中:

  • OCCUPY_SIZE:表压缩后落盘的数据量,单位为字节。
  • REQUIRED_SIZE:表压缩后落盘的数据量实际占用了多少磁盘空间,单位为字节。
    从返回结果中,还可以通过(OCCUPY_SIZE / REQUIRED_SIZE) * 100%来计算磁盘空间的利用率。
http://www.xdnf.cn/news/2296.html

相关文章:

  • AI声像融合守护幼儿安全——打骂/异常声音报警系统的智慧防护
  • 在Linux中使用ferror()函数和feof()函数判断文件是否读取成功,或者读取指针是否到达了文件末尾?
  • python实战项目66:抓取考研招生专业信息
  • 2025上海车展 | 移远通信重磅发布AR脚踢毫米波雷达,重新定义“无接触交互”尾门
  • IO与文件·I(linux+C)
  • 洛谷题目:P8856 [POI 2002] 火车线路 题解(有一点难)
  • Docker(二):docker常用命令
  • 概率论与统计(不确定性分析)主要应用在什么方面?涉及到具体知识是什么?
  • 如何识别DDoS攻击类型及有效防护?一篇简明指南
  • Git Bash 下使用 SSH 连接出现 “Software caused connection abort” 问题
  • Macos m系列芯片环境下python3安装mysqlclient系列问题
  • 数据需求管理办法有哪些?具体应如何应用?
  • 图神经网络(GNN)基本概念与核心原理
  • 某化工厂运维升级:智和信通运维平台实现工业交换机智能管理
  • Maven 4.0.0 模式-pom.xml配置详解
  • 《AI大模型应知应会100篇》第37篇:Agent框架入门:让AI具备自主行动能力
  • 数字巴别塔:全栈多模态开发框架如何用自然语言重构软件生产关系?
  • Unity 和 Unreal Engine(UE) 两大主流游戏引擎的核心使用方法
  • 回顾|Apache Cloudberry™ (Incubating) Meetup·2025 杭州站
  • MyBatis 类型处理器(TypeHandler)注册与映射机制:JsonListTypeHandler和JsonListTypeHandler注册时机
  • 174页Deepseek大模型在银行系统的部署方案
  • 一、I/O的相关概念
  • Spark RDD行动算子与共享变量实战:从数据聚合到分布式通信
  • 基于SpringBoot+PostgreSQL+ROS Java库机器人数据可视化管理系统
  • 热红外遥感在火情监测中有什么作用?
  • 深入Java JVM常见问题及解决方案
  • Java位运算符大全
  • 亚组风险比分析与可视化
  • OceanBase单机重启和配置修改
  • 再学GPIO(一)