插入数据太多,磁盘满后发现不能drop数据库,会报SQL 错误 [979]: TDengine ERROR (0x3d3): Conflict transaction not completed

【TDengine 使用环境】
生产环境 /测试/ Poc/预生产环境

【TDengine 版本】3.3.8

【操作系统以及版本】centos 7.9

【部署方式】容器/非容器部署 docker

【集群节点数】

【集群副本数】

【描述业务影响】

【问题复现路径/shan】做过哪些操作出现的问题

【遇到的问题:问题现象及影响】问题如图

【资源配置】

【报错完整截图】(不要大段的粘贴报错代码,论坛直接看报错代码不直观)

出现此错误后,我去删除数据库以释放空间,发现会报

SQL 错误 [979]: TDengine ERROR (0x3d3): Conflict transaction not completed,我该怎么做才能正常删除数据库来释放空间呢

show transactions; 看下现在有什么事务?

我是在执行vehicle_db这个数据库的插入操作导致磁盘满后,报的以上的错。现在我直接杀掉这个事务,会报如图的错

是因为事务一直没结束,导致的 drop 失败。
处理的办法有几种:

  1. 删除文件,看下数据库所在磁盘有没有其他文件可以删除,腾出空间。
  2. 扩盘。

我的磁盘大头只有这个数据库产生的文件,有没有其他方式可以让我清理空间。我刚重启数据库服务还是不能删除那个事务,也删除不了数据库

有一些操作可以,但是需要丢失一部份数据。如果可以接受丢失数据,可以把 vnode 目录下的 wal 目录删除。

可以了大佬,强制删除wal文件后,一执行删库命令就恢复正常了 :drooling_face:

好的,感谢您对 TDengine 的支持!

1 个赞

对了,怎么修改我的个人资料昵称,我发现那个修改界面不支持编辑

我怎么指定压缩算法和等级,以实现在插入数据时占用最小的空间呢

这里

参考这篇文章。

我发现tdengine在执行写数据的操作时,对内存的影响好像远没有对cpu的影响大,这是合理的不

这是10线程在执行插入操作

{
  "filetype": "insert",
  "cfgdir": "/etc/taos",
  "host": "127.0.0.1",
  "port": 6030,
  "user": "root",
  "password": "taosdata",
  "thread_count": 10,
  "create_table_thread_count": 10,
  "confirm_parameter_prompt": "no",
  "num_of_records_per_req": 10000,
  "prepared_rand": 10000,
  "chinese": "no",
  "escape_character": "yes",
  "continue_if_fail": "no",
  "databases": [
    {
      "dbinfo": {
        "name": "vehicle_db",
        "drop": "yes",
        "vgroups": 4,
        "precision": "ms"
      },
      "super_tables": [
        {
          "name": "vehicle_data",
          "child_table_exists": "no",
          "childtable_count": 100000,
          "childtable_prefix": "v",
          "auto_create_table": "yes",
          "batch_create_tbl_num": 100,
          "data_source": "rand",
          "insert_mode": "taosc",
          "non_stop_mode": "no",
          "line_protocol": "line",
          "insert_rows": 10000,
          "childtable_limit": 0,
          "childtable_offset": 0,
          "interlace_rows": 0,
          "insert_interval": 0,
          "partial_col_num": 0,
          "timestamp_step": 1000,
          "start_timestamp": "2025-01-01 00:00:00.000",
          "sample_format": "csv",
          "sample_file": "./sample.csv",
          "use_sample_ts": "no",
          "tags_file": "",
          "columns": [
            {
              "type": "TIMESTAMP",
              "count": 1
            },
            {
              "type": "FLOAT",
              "name": "speed",
              "count": 1,
              "min": 0,
              "max": 120
            },
            {
              "type": "INT",
              "name": "direction",
              "count": 1,
              "min": 0,
              "max": 359
            },
            {
              "type": "FLOAT",
              "name": "altitude",
              "count": 1,
              "min": 0,
              "max": 5000
            },
            {
              "type": "FLOAT",
              "name": "fuel",
              "count": 1,
              "min": 0,
              "max": 100
            },
            {
              "type": "TINYINT",
              "name": "status",
              "count": 1,
              "min": 0,
              "max": 2
            }
          ],
          "tags": [
            {
              "type": "BINARY",
              "name": "vehicle_id",
              "len": 20
            },
            {
              "type": "BINARY",
              "name": "vehicle_type",
              "len": 10,
              "values": [
                "car",
                "truck",
                "bus"
              ]
            },
            {
              "type": "BINARY",
              "name": "region",
              "len": 10,
              "values": [
                "north",
                "south",
                "east",
                "west"
              ]
            }
          ]
        }
      ]
    }
  ]
}

drop数据库之后会立即释放磁盘空间吗?还是需要另外手动compact一下啊

会立即释放磁盘空间。

是回复我那一条的吗?这个说法在文档里哪里有些呀,没找着

是回复你的问题,这个问题文档没有涉及,但不难自己验证:搭一个测试环境,新建一个数据库,写入一些数据,然后 drop,观察 datadir 里的文件变化就能看到了

会立即释放