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

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%来计算磁盘空间的利用率。

相关文章:

  • 量子网络:构建未来通信的超高速“高速公路”
  • Flutter 在 Dart 3.8 开始支持 Null-Aware Elements 语法,自动识别集合里的空元素
  • 探索大语言模型(LLM):自监督学习——从数据内在规律中解锁AI的“自学”密码
  • Arduino 入门学习笔记(六):外部中断实验
  • 从暴力到优化:如何统计符合特殊条件的三元子数组
  • flutter 选择图片 用九宫格显示图片,右上角X删除选择图片,点击查看图片放大缩小,在多张图片可以左右滑动查看图片
  • ‌RISC-V架构的低功耗MCU多电压域优化设计
  • 智能硬件行业售后服务管理:提升客户体验的关键所在
  • 极简主义在 UI 设计中的应用与实践:打造简洁高效界面
  • 机器人抓取位姿检测——GRCN训练及测试教程(Pytorch)
  • tensorflow使用详解
  • 【Redis】set类型
  • java工具类
  • 2P4M-ASEMI机器人功率器件专用2P4M
  • 中国地区土地覆盖综合数据集
  • 复杂背景下无人机影像小目标检测:MPE-YOLO抗遮挡与抗背景干扰设计
  • Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式
  • Spark RDD行动算子与共享变量实战:从数据聚合到分布式通信
  • 革新桌面自动化:微软UFO²操作系统深度解析与未来展望
  • 迷你世界UGC3.0脚本Wiki角色模块管理接口 Actor
  • 人社部:将会同更多部门分行业、分领域制定专项培训计划
  • 准85后青海海北州副州长、州公安局局长李贤荣赴山东临沂挂职
  • 人民日报读者点题:规范涉企执法,怎样防止问题反弹、提振企业信心?
  • 福建省莆田市原副市长胡国防接受审查调查
  • 上海嘉定远香文化环启用,运动、看展、听歌“一站式解决”
  • 我国首次实现地月距离尺度的卫星激光测距