---
title: 如何解决 Log out of disk space 问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 如何解决 Log out of disk space 问题相关的常见问题和使用技巧，帮助您快速解决 如何解决 Log out of disk space 问题的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 如何解决 Log out of disk space 问题

更新时间：2024-07-22 03:11

适用版本： V4.0.x、V4.1.x、V4.2.x 内容类型：How-to  

## 问题现象

observer.log 日志报错。

```shell
try_recycle_blocks (palf_env_impl.cpp:775)[397][T1_PalfGC][T1][Y0-0000000000000000-0-0] [lt=26][errcode=-4264] Log out of disk space(msg="log disk space is almost full

```

由报错信息可知 T1 租户（也就是 SYS 租户）的 clog 目录满了，可以通过扩大 `log_disk_size` 参数来解决。

例如集群资源情况如下。

```shell
memory_limit=6G,system_memory=1G,datafile_size=5G,log_disk_size=5G,cpu_count=16

```

正常情况下 `log_disk_size` 应该是 `memory_limit` 的 3~4 倍，最低建议值是 18G 。

## Log out of disk space 的解决方法

### 情况一：集群运行过程中 clog 满了

1. 先查看集群的总的 `log_disk_size` 是否有剩余，关注 `logdisk_free` 字段。

   ```shell
   select a.zone,concat(a.svr_ip,':',a.svr_port) observer,a.CPU_CAPACITY cpu_total, (CPU_CAPACITY-cpu_assigned) cpu_free,round(a.memory_limit/1024/1024/1024 ) mem_total_gb,  round((memory_limit-mem_assigned)/1024/1024/1024) mem_free_gb, round(a.LOG_DISK_CAPACITY/1024/1024/1024) logdisk_total, round((a.LOG_DISK_CAPACITY-a.LOG_DISK_ASSIGNED)/1024/1024/1024) logdisk_free ,round(a.DATA_DISK_CAPACITY/1024/1024/1024) data_total ,round((DATA_DISK_CAPACITY-a.DATA_DISK_IN_USE)/1024/1024/1024) data_free,b.status,usec_to_time(b.start_service_time) start_service_time, usec_to_time(b.stop_time) stop_time,b.build_version from oceanbase.GV$OB_SERVERS  a join oceanbase.__all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;

   ```
 2. 如果有剩余，先查看 SYS 租户的资源情况。

   ```shell
   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_G,
   CAST(a.log_disk_in_use/1024/1024/1024 as DECIMAL(15,2)) log_disk_use_G
   from oceanbase.__all_virtual_unit a,dba_ob_tenants b where a.tenant_id=b.tenant_id;

   ```
 3. 修改 SYS 租户 log_disk_size 。

      1. 通过 __all_unit_config 表，查询当前集群中的所有 unit_config 信息。

        ```shell
        select * from oceanbase.__all_unit_config where name like '%sys%';

        ```
      2. 修改租户 Unit 配置，命令如下。

        ```shell
        ## 修改 SYS 租户 Unit 配置,建议是 SYS 租户内存的 3-4 倍大小。
        alter resource unit  $unit_name log_disk_size '18G';

        ```

### 情况二：集群重启失败，报错 clog 满了

因为集群无法启动，是无法登录数据库进行修改的，需要使用带参数尝试启动。

1. 带参数启动，命令如下。

   ```shell
   ./bin/observer -o "log_disk_size=18G"

   ```

   #### 注意

   不能直接到 `bin` 目录下执行。

   如果执行带参数启动过程中出现报错 `libmariadb.so.3: cannot open shared object file`，处理方法如下。

   ```shell
   ## 将 OceanBase 数据库的 library path 加到环境变量 LD_LIBRARY_PATH 中，按实际路径替换下面路径。
   echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase-ce/lib/' >> ~/.bash_profile
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase-ce/lib/

   ```
 2. 如果尝试启动还是不成功，且剩余磁盘也充足，日志报错如下信息。

   ![image01](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/storage/20240719logoutdiskspace001.png)

   可以看出来还是 T1 租户，日志磁盘不足，`used_percent(%)=95，warn_percent(%)=80（log_disk_utilization_threshold），limit_percent(%)=95（log_disk_utilization_limit_threshold）`，可知这个是 T1 租户 clog 空间超过 95% 使用率，应该在 80% 时候就利用重写，但当前日志还无法回收掉，而达到了停写阀值是 95%，因此需要调整停写上限或者重写上限，而且需要集群级别生效的。

   尝试设置更高的上限拉起，命令如下。

   ```shell
   ./bin/observer -o "log_disk_size=18G,log_disk_utilization_threshold=95"

   ```

   或者

   ```shell
   ./bin/observer -o "log_disk_size=18G,log_disk_utilization_limit_threshold=98"

   ```

   又或者

   ```shell
   ./bin/observer -o "log_disk_size=18G,log_disk_utilization_threshold=95,log_disk_utilization_limit_threshold=98"

   ```
 3. 启动后需要就可以按照 **情况一：集群运行过程中 clog 满了** 步骤调整 SYS 租户的 `log_disk_size` 的大小了，然后还原回 `log_disk_utilization_threshold（80）`或者 `log_disk_utilization_limit_threshold（95）`参数。

      1. 设置租户日志盘利用率限制阈值为 95。

        ```shell
        alter system set log_disk_utilization_limit_threshold=95;

        ```
      2. 还原租户日志盘利用率限制阈值为 80。

        ```shell
        alter system set log_disk_utilization_threshold=80;

        ```

上一篇

[OceanBase 数据库报错 error occurs on data disk or slog disk 主机磁盘异常的原因及解决办法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002397316)

下一篇

[OceanBase 数据库 V2.X 版本的磁盘故障检测原理](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000001011) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
