【问题标题】:Can't start clickhouse service, too many files in ../data/default/<TableName>无法启动 clickhouse 服务,../data/default/<TableName> 中的文件太多
【发布时间】:2018-11-07 07:30:50
【问题描述】:

我的独立 clickhouse-server 安装有一个奇怪的问题。服务器运行了一段时间,几乎是默认配置,除了 data 和 tmp 目录被替换为单独的磁盘:

cat /etc/clickhouse-server/config.d/my_config.xml 
<?xml version="1.0"?> 
<yandex> 
  <path>/data/clickhouse/</path> 
  <tmp_path>/data/clickhouse/tmp/</tmp_path> 
</yandex>

今天服务器停止响应,出现连接被拒绝错误。它已重新启动,之后服务无法完全启动:

2018.05.28 13:15:44.248373 [ 2 ] <Information> DatabaseOrdinary (default): 42.86%
2018.05.28 13:15:44.259860 [ 2 ] <Debug> default.event_4648 (Data): Loading data parts
2018.05.28 13:16:02.531851 [ 2 ] <Debug> default.event_4648 (Data): Loaded data parts (2168 items)
2018.05.28 13:16:02.532130 [ 2 ] <Information> DatabaseOrdinary (default): 57.14%
2018.05.28 13:16:02.534622 [ 2 ] <Debug> default.event_5156 (Data): Loading data parts
2018.05.28 13:34:01.731053 [ 3 ] <Information> Application: Received termination signal (Terminated)

真的,我在 57% 时停止了进程,因为它启动时间过长(也许它可能在一两个小时内启动,我没有尝试)。

默认的日志级别是“trace”,但我没有说明这种行为的任何原因。

我认为问题在于 /data/clickhouse/data/default/event_5156 中的文件计数。 现在里面有626023个目录,ls -la命令在这个目录下不能正常工作,我得用find来统计文件:

#  time find . -maxdepth 1 | wc -l
626023

real    5m0.302s
user    0m3.114s
sys     0m24.848s

我有两个问题:

1)为什么 Clickhouse-Server 使用默认配置生成了这么多文件和目录?

2)如何在不丢失数据的情况下及时启动服务?

【问题讨论】:

  • 我认为这不是服务器配置的问题,而是表分区的问题。它太细了。如果甚至像 ls -la 这样的系统级工具都不起作用,那么 CH 就不是魔术师。我想即使你等得够久,它也不会开始。至少增加打开文件的限制:sudo sysctl -w fs.file-max=50000000(它不是永久的!),也许它会帮助它启动。然后,您可以将架构更改为更大的分区。关于如何使其加载更快 - idk.
  • 哦,这不是分区,是不同的表!你确定你需要那么多表,而不是一张分区表吗?
  • 我会 1) 进行备份 2) 移出 80% 的旧表,3) 不使用它们启动 4) 制作一个分区表 5) 使用旧表启动另一个 CH 实例 6) 移动行从旧到新(单表)模型 7)更改应用程序逻辑以使用新表。这是假设您的 event_XXXX 表实际上是同一个表,但不同的部分。

标签: database clickhouse


【解决方案1】:

问题在于数据更新方法。我使用带有 jdbc 连接器的脚本,并且每个请求都发送一个字符串。将方案改为批量更新后,问题解决了。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2020-08-26
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多