1. 首页 > 国产数据库教程 > OceanBase教程 > 正文

OceanBase教程FG062-OceanBase磁盘满处理实战

本文档风哥主要介绍OceanBase数据库磁盘满处理相关知识,包括OceanBase磁盘使用分析、OceanBase磁盘组件、OceanBase磁盘限制、OceanBase容量规划、OceanBase磁盘满紧急处理、OceanBase日志清理、OceanBase数据清理等内容,风哥教程参考OceanBase官方文档存储管理、运维指南等内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 OceanBase磁盘使用分析

OceanBase数据库使用磁盘存储数据文件、日志文件、临时文件等,了解磁盘使用情况有助于及时发现和处理磁盘满问题。更多视频教程www.fgedu.net.cn

OceanBase磁盘使用组成:

  • 数据文件:存储表数据、索引数据
  • 日志文件:Clog、Slog等事务日志
  • 临时文件:排序、哈希等操作产生的临时文件
  • 备份文件:数据备份、日志备份
  • 审计日志:操作审计日志

1.2 OceanBase磁盘组件

# OceanBase磁盘组件

1. 数据目录结构
/ob/fgdata/
├── sstable/ # 数据文件目录
│ ├── block_file # 数据块文件
│ └── macro_block # 宏块文件
├── clog/ # 事务日志目录
│ ├── log_files # 日志文件
│ └── index_files # 日志索引
├── slog/ # 系统日志目录
├── ilog/ # 索引日志目录
├── tmp/ # 临时文件目录
└── log/ # 运行日志目录
├── observer.log # 主日志
├── observer.log.wf # 警告日志
└── rootservice.log # RootService日志

2. 磁盘使用比例建议
– 数据文件:60%
– 日志文件:20%
– 临时文件:10%
– 预留空间:10%

1.3 OceanBase磁盘限制

# OceanBase磁盘限制

1. 数据文件限制
– 最大支持:取决于文件系统
– 默认自动扩展
– 可配置最大大小

2. 日志文件限制
– Clog大小:可配置
– 自动清理策略
– 归档日志保留期

3. 临时文件限制
– 受tmpfs或磁盘限制
– 大查询可能产生大量临时文件
– 需要定期清理

4. 磁盘满影响
– 无法写入新数据
– 事务无法提交
– 查询可能失败
– 系统可能崩溃

风哥提示:磁盘满会导致数据库无法正常工作,必须建立完善的监控和告警机制,提前预防磁盘满问题。

Part02-生产环境规划与建议

2.1 OceanBase容量规划

# 容量规划

1. 数据容量估算
– 当前数据量:500GB
– 日增长量:10GB
– 年增长量:3.65TB
– 3年总需求:约11TB

2. 日志容量估算
– Clog保留期:7天
– 日产生量:50GB
– 总需求:350GB

3. 备份容量估算
– 全量备份:500GB
– 增量备份:50GB/天
– 保留7天:850GB

4. 总容量需求
– 数据:11TB
– 日志:350GB
– 备份:850GB
– 预留:2TB
– 总计:约15TB

2.2 OceanBase监控策略

# 监控策略

1. 磁盘使用率监控
#!/bin/bash
# disk_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

DISK_USAGE=$(df -h /ob/fgdata | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)
if [ $DISK_USAGE -gt 80 ]; then
echo “Warning: Disk usage is ${DISK_USAGE}%” | mail -s “Disk Alert” dba@fgedu.net.cn
fi

2. 目录大小监控
$ du -sh /ob/fgdata/* | sort -hr

3. 日志大小监控
$ find /ob/fgdata/log -name “*.log*” -size +1G,风哥提示:。

4. 数据文件监控
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e ”
SELECT
svr_ip,
svr_port,
data_disk_in_use/1024/1024/1024 as data_used_gb,
data_disk_total/1024/1024/1024 as data_total_gb,
log_disk_in_use/1024/1024/1024 as log_used_gb,
log_disk_total/1024/1024/1024 as log_total_gb
FROM oceanbase.__all_virtual_disk_stat;

2.3 OceanBase告警策略

# 告警策略

1. 告警阈值
– 70%:黄色告警
– 80%:橙色告警
– 90%:红色告警
– 95%:紧急告警

2. 告警内容
– 磁盘使用率
– 目录大小
– 日志增长速度
– 数据增长速度,学习交流加群风哥微信: itpux-com。

3. 告警处理
– 黄色:关注增长趋势
– 橙色:准备清理
– 红色:立即清理
– 紧急:停服扩容

4. 告警脚本
#!/bin/bash
# disk_alert.sh
# from:www.itpux.com.qq113257174.wx:itpux-com

THRESHOLD=80
USAGE=$(df -h /ob/fgdata | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)

if [ $USAGE -ge $THRESHOLD ]; then
echo “Disk usage alert: ${USAGE}%” | \
mail -s “[ALERT] OceanBase Disk Usage ${USAGE}%” dba@fgedu.net.cn
fi

生产环境建议:建立多级告警机制,提前发现磁盘使用异常,避免磁盘满导致服务中断。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 OceanBase磁盘满紧急处理

3.1.1 识别磁盘满

# 识别磁盘满

1. 系统告警
– 收到磁盘使用率告警
– 业务报错
– 系统日志提示

2. 检查磁盘状态
$ df -h
Filesystem Size Used Avail Use% Mounted on,学习交流加群风哥QQ113257174。
/dev/sda1 500G 500G 0G 100% /ob/fgdata

# 磁盘已满

3. 检查目录大小
$ du -sh /ob/fgdata/* | sort -hr
200G /ob/fgdata/sstable
150G /ob/fgdata/clog
100G /ob/fgdata/log
30G /ob/fgdata/slog
20G /ob/fgdata/tmp

4. 检查OceanBase状态
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e ”
SELECT
svr_ip,
status,
data_disk_in_use,
log_disk_in_use
FROM oceanbase.__all_virtual_disk_stat;

3.1.2 紧急处理步骤

# 紧急处理步骤

1. 停止非必要进程
$ ps aux | grep -E ‘backup|archive’ | grep -v grep
$ kill -15

2. 清理临时文件
$ rm -rf /ob/fgdata/tmp/*

3. 清理旧日志
$ find /ob/fgdata/log -name “*.log.*” -mtime +7 -delete

4. 压缩归档日志
$ find /ob/fgdata/log -name “*.log.*” -exec gzip {} \;更多视频教程www.fgedu.net.cn。

5. 检查清理效果
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 500G 400G 100G 80% /ob/fgdata

# 磁盘使用率降至80%

6. 重启服务(如果需要)
$ cd /ob/app/oceanbase
$ ./bin/observer -start

3.2 OceanBase日志清理

# 日志清理

1. 自动清理配置
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e ”
— 配置日志保留期
ALTER SYSTEM SET clog_expire_days = 7;
ALTER SYSTEM SET ilog_expire_days = 7;

— 配置日志清理时间
ALTER SYSTEM SET log_archive_checkpoint_interval = ‘1h’;

2. 手动清理日志
#!/bin/bash
# log_cleanup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

# 清理7天前的日志
find /ob/fgdata/log -name “*.log.*” -mtime +7 -delete

# 清理7天前的Clog
find /ob/fgdata/clog -name “*.log” -mtime +7 -delete

# 压缩30天前的日志,更多学习教程公众号风哥教程itpux_com。
find /ob/fgdata/log -name “*.log.*” -mtime +30 -exec gzip {} \;

echo “Log cleanup completed at $(date)”

3. 归档日志管理
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e ”
— 查看归档日志
SELECT * FROM oceanbase.__all_virtual_archive_log_info;

— 删除过期归档日志
ALTER SYSTEM DELETE ARCHIVELOG BEFORE ‘2024-01-01’;

4. 日志轮转配置
$ cat /ob/app/oceanbase/etc/log_rotate.conf
/ob/fgdata/log/observer.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0644 admin admin
}

3.3 OceanBase数据清理

# 数据清理,from DB视频:www.itpux.com。

1. 清理历史数据
$ obclient -h192.168.1.101 -P2881 -uroot@fgedu_tenant -p -e ”
— 删除历史订单(保留90天)
DELETE FROM fgedudb.fgedu_order
WHERE create_time < DATE_SUB(NOW(), INTERVAL 90 DAY); -- 删除历史日志(保留30天) DELETE FROM fgedudb.fgedu_operation_log WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY); " 2. 清理临时表 $ obclient -h192.168.1.101 -P2881 -uroot@fgedu_tenant -p -e " -- 删除临时表 DROP TABLE IF EXISTS fgedudb.tmp_table_001; DROP TABLE IF EXISTS fgedudb.tmp_table_002; -- 清理过期临时表 SELECT CONCAT('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema = 'fgedudb' AND table_name LIKE 'tmp_%' AND create_time < DATE_SUB(NOW(), INTERVAL 7 DAY); " 3. 压缩表数据 $ obclient -h192.168.1.101 -P2881 -uroot@fgedu_tenant -p -e " -- 优化表空间 OPTIMIZE TABLE fgedudb.fgedu_order; -- 分析表 ANALYZE TABLE fgedudb.fgedu_order; " 4. 数据归档 $ obclient -h192.168.1.101 -P2881 -uroot@fgedu_tenant -p -e " -- 归档历史数据 INSERT INTO fgedudb_archive.fgedu_order_archive SELECT * FROM fgedudb.fgedu_order WHERE create_time < DATE_SUB(NOW(), INTERVAL 1 YEAR); -- 删除已归档数据 DELETE FROM fgedudb.fgedu_order WHERE create_time < DATE_SUB(NOW(), INTERVAL 1 YEAR); "

风哥提示:数据清理需要谨慎操作,建议先备份再清理,避免误删重要数据。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 OceanBase日志满处理案例

# 故障现象
– 磁盘使用率100%
– 日志目录占用200GB
– 业务写入失败

# 处理过程

1. 检查磁盘状态
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 500G 500G 0G 100% /ob/fgdata

$ du -sh /ob/fgdata/* | sort -hr
200G /ob/fgdata/log
150G /ob/fgdata/sstable
100G /ob/fgdata/clog

2. 分析日志文件
$ ls -lh /ob/fgdata/log/
-rw-r–r– 1 admin admin 50G Jan 20 10:00 observer.log
-rw-r–r– 1 admin admin 45G Jan 19 10:00 observer.log.1
-rw-r–r– 1 admin admin 40G Jan 18 10:00 observer.log.2

3. 紧急清理
# 压缩旧日志
$ gzip /ob/fgdata/log/observer.log.*

# 删除30天前的日志
$ find /ob/fgdata/log -name “*.gz” -mtime +30 -delete

# 清空当前日志
$ > /ob/fgdata/log/observer.log

4. 配置日志轮转
$ cat > /etc/logrotate.d/oceanbase << EOF /ob/fgdata/log/observer.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 admin admin postrotate /usr/bin/killall -HUP observer endscript } EOF 5. 验证清理效果 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 500G 350G 150G 70% /ob/fgdata # 清理完成

4.2 OceanBase数据满处理案例

# 故障现象
– 数据文件持续增长
– 磁盘使用率95%
– 需要扩容或清理

# 处理过程

1. 分析数据增长
$ obclient -h192.168.1.101 -P2881 -uroot@fgedu_tenant -p -e ”
SELECT
table_name,
ROUND(data_length/1024/1024/1024, 2) as data_size_gb,
ROUND(index_length/1024/1024/1024, 2) as index_size_gb
FROM information_schema.tables
WHERE table_schema = ‘fgedudb’
ORDER BY data_length DESC
LIMIT 10;

+——————+————-+————–+
| table_name | data_size_gb| index_size_gb|
+——————+————-+————–+
| fgedu_order | 100.50 | 20.30 |
| fgedu_log | 80.20 | 5.10 |
| fgedu_user | 30.10 | 3.20 |
+——————+————-+————–+

2. 清理历史数据
$ obclient -h192.168.1.101 -P2881 -uroot@fgedu_tenant -p -e ”
— 归档历史订单
CREATE TABLE fgedudb_archive.fgedu_order_2023 AS
SELECT * FROM fgedudb.fgedu_order
WHERE create_time < '2024-01-01'; -- 删除已归档数据 DELETE FROM fgedudb.fgedu_order WHERE create_time < '2024-01-01'; -- 清理日志表 DELETE FROM fgedudb.fgedu_log WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY); " 3. 优化表空间 $ obclient -h192.168.1.101 -P2881 -uroot@fgedu_tenant -p -e " OPTIMIZE TABLE fgedudb.fgedu_order; OPTIMIZE TABLE fgedudb.fgedu_log; " 4. 检查清理效果 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 500G 300G 200G 60% /ob/fgdata # 清理完成

4.3 OceanBase Clog满处理案例

# 故障现象
– Clog目录占用100GB
– 磁盘空间不足
– 事务提交缓慢

# 处理过程

1. 检查Clog状态
$ du -sh /ob/fgdata/clog
100G /ob/fgdata/clog

$ ls -lh /ob/fgdata/clog/
-rw-r–r– 1 admin admin 1G Jan 20 10:00 000001.log
-rw-r–r– 1 admin admin 1G Jan 20 09:00 000002.log

2. 检查Clog配置
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e ”
SHOW PARAMETERS LIKE ‘clog_expire_days’;
SHOW PARAMETERS LIKE ‘clog_disk_usage_limit_percentage’;

3. 调整Clog保留期
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e ”
— 减少Clog保留期
ALTER SYSTEM SET clog_expire_days = 3;

— 触发Clog清理
ALTER SYSTEM MINOR FREEZE;

4. 手动清理Clog
#!/bin/bash
# clog_cleanup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com

# 停止OBServer(谨慎操作)
# cd /ob/app/oceanbase && ./bin/observer -stop

# 备份Clog
mkdir -p /backup/clog/$(date +%Y%m%d)
cp /ob/fgdata/clog/*.log /backup/clog/$(date +%Y%m%d)/

# 删除3天前的Clog
find /ob/fgdata/clog -name “*.log” -mtime +3 -delete

# 启动OBServer
# cd /ob/app/oceanbase && ./bin/observer -start

5. 验证清理效果
$ du -sh /ob/fgdata/clog
30G /ob/fgdata/clog

# 清理完成

生产环境建议:定期监控磁盘使用情况,及时清理过期数据,必要时进行扩容。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 OceanBase磁盘管理最佳实践

# 磁盘管理最佳实践

1. 容量规划
– 预留20%以上空间
– 定期评估增长趋势
– 提前规划扩容

2. 监控告警
– 多级告警阈值
– 实时监控
– 自动告警通知

3. 日志管理
– 自动轮转
– 定期清理
– 压缩归档

4. 数据管理
– 定期归档
– 历史数据清理
– 表空间优化

5. 应急预案
– 快速清理流程
– 扩容方案
– 回滚计划

5.2 OceanBase磁盘满预防

# 磁盘满预防

1. 预防措施
– 合理规划容量
– 监控磁盘使用
– 定期清理数据
– 及时扩容

2. 自动化脚本
#!/bin/bash
# disk_prevention.sh
# from:www.itpux.com.qq113257174.wx:itpux-com

USAGE=$(df -h /ob/fgdata | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)

if [ $USAGE -gt 70 ]; then
# 清理临时文件
rm -rf /ob/fgdata/tmp/*

# 压缩旧日志
find /ob/fgdata/log -name “*.log.*” -mtime +7 -exec gzip {} \;

# 发送通知
echo “Disk usage is ${USAGE}%, auto cleanup performed” | \
mail -s “Disk Cleanup Notice” dba@fgedu.net.cn
fi

3. 定期检查
– 每日检查磁盘使用
– 每周分析增长趋势
– 每月评估容量需求

4. 容量预警
– 70%:关注
– 80%:准备清理
– 90%:紧急处理
– 95%:停服扩容

5.3 OceanBase磁盘常见问题

# 磁盘常见问题及解决

Q1: 磁盘满后如何快速释放空间?
A1: 清理临时文件、压缩旧日志、删除过期备份

Q2: 如何查看哪些文件占用空间?
A2: 使用du -sh命令查看目录大小

Q3: 日志文件可以删除吗?
A3: 可以删除旧日志,但建议先备份

Q4: Clog可以手动清理吗?
A4: 可以,但需要谨慎,建议先备份

Q5: 如何避免磁盘满?
A5: 定期监控、自动清理、及时扩容

Q6: 磁盘满会影响业务吗?
A6: 会,可能导致写入失败、事务无法提交

Q7: 如何设置日志自动清理?
A7: 配置logrotate或使用OceanBase自动清理参数

Q8: 数据文件可以压缩吗?
A8: 可以使用表压缩功能

Q9: 临时文件如何清理?
A9: 定期清理/tmp目录,重启OBServer

Q10: 磁盘扩容后需要重启吗?
A10: 不需要,但可能需要调整OceanBase配置

风哥提示:磁盘管理是DBA日常工作的重要组成部分,建立完善的监控和清理机制可以有效避免磁盘满问题。from OceanBase视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息