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_size
和log_disk_percentage
共同控制。
log_disk_size
不为0时,系统按照log_disk_size
的值分配日志盘空间;log_disk_size=0
且log_disk_percentage
不为0时,系统按照log_disk_percentage
的值分配日志盘空间;log_disk_size
和log_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日志盘空间满的问题时,集群一般表现为无主选举,写入失败,缺副本等现象。应急处理步骤如下:
-
主动停止租户的写入,防止clog盘临时腾挪的空间再次快速被业务写入打满,无法修复。
-
停止集群写入后,临时调大clog盘阈值比例,由95%调整到98%。
ALTER SYSTEM SET log_disk_utilization_limit_threshold = 98 server ='[observer_ip]:2882';
- 观察一段时间,一般情况下clog追上后,集群可以自动恢复。
数据盘空间管理
数据盘容量参数
🐯 与数据盘data_dir
相关的四个重要参数:
datafile_size
:用于设置数据文件占用磁盘可用空间的大小。默认值为0M
。该配置项支持动态修改,且修改时不支持缩小,只支持扩大。datafile_disk_percentage
:磁盘数据文件占用磁盘总空间的百分比,默认值为0,取值范围[0,99]
。该配置项支持动态修改。datafile_next
:用于设置磁盘数据文件自动扩容的步长,默认值为0M
,表示不启动增长。该配置项支持动态修改。datafile_maxsize
:用于设置磁盘数据文件自动扩容的最大空间,默认值为0M
,表示不启动自动扩容。该配置项支持动态修改。
🦁 OBServer可以使用的数据盘总容量由集群级别的配置项datafile_size
和datafile_disk_percentage
共同控制。
datafile_size
不为0时,系统按照datafile_size
的值分配数据盘空间;datafile_size=0M
且datafile_disk_percentage
不为0时,系统按照datafile_disk_percentage
的值分配日志盘空间;datafile_size
和datafile_disk_percentage
都为0时,系统会根据日志和数据是否共用磁盘来自动计算日志占用的磁盘空间百分比:- 日志和数据共用磁盘时,数据占用磁盘空间的百分比为60%;
- 数据独占磁盘时,数据占用磁盘空间的百分比为90%。
🐱 datafile_next
和datafile_maxsize
两个参数用于控制数据文件的自动扩展。
datafile_next
或者datafile_maxsize
的值设置为0M
时,表示关闭数据文件自动扩展。datafile_maxsize
的配置需要大于当前数据文件占用的磁盘空间大小,即datafile_size
或datafile_disk_percentage
对应的数据文件大小,否则不会触发自动扩容。- 如果
datafile_maxsize
超过了磁盘最大空间,则以实际磁盘的可用大小作为最大值。 - 如果
datafile_next
的值小于或等于1G时,实际生效的配置为min(1G, datafile_maxsize * 10%)
。 - 如果
datafile_next
的值大于1G时,实际生效的配置为min(datafile_next, 磁盘剩余空间)
。
配置磁盘数据文件的自动扩容功能时,建议将步长datafile_next
的初始配置设置为datafile_maxsize
的20%
左右,避免频繁扩容。
检查数据盘相关的配置参数:
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 |
+-------+-----------+---------+---------+--------------------------+-------+-------------------+---------------+
- 检查数据文件参数配置:
show parameters like 'datafile_size';
show parameters like 'datafile_disk_percentage';
show parameters like 'datafile_next';
show parameters like 'datafile_maxsize';
- 检查当前已经预分配的磁盘空间:
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)
- 将
datafile_maxsize
配置为比data_disk_allocated
更大的值,同时设置datafile_next
为非零的值。
alter system set datafile_maxsize = '2TB';
alter system set datafile_next = '100G';
- 确认自动扩容设置是否生效。
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数据盘空间满的情况一般比较少见,但是在写满后也会导致无法转储、无法合并、内存无法释放的问题,进而导致集群无法写入。
处理数据盘空间满的几个策略如下:
- 对于分布了多个租户的OB节点,首先考虑通过扩容节点+迁移Unit的方式均衡数据。
- 扩容节点可以使用OCP页面操作或者使用命令行操作。
- 使用OCP手动迁移Unit到扩容节点。可以通过双击Unit后的规格进行资源的迁移操作。迁移只能在单个Zone内进行。
- 对于暂时无法迁移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%
来计算磁盘空间的利用率。