如何提高 ClickHouse 服务器的启动时间?

Posted

技术标签:

【中文标题】如何提高 ClickHouse 服务器的启动时间?【英文标题】:How can I improve ClickHouse server's startup time? 【发布时间】:2019-03-26 09:41:45 【问题描述】:

我正在评估 ClickHouse 在项目中的潜在用途的性能。到目前为止,写入性能一直令人鼓舞,但是当我运行测试并且不得不重新启动服务器几次时,我注意到一个可能成为硬性阻碍的问题:服务器启动时间在波动,并且大部分时间时代非常高。

我的评估服务器包含 26 个数据库,包含大约 540 亿条记录,占用了 697.32 GB 的磁盘空间。

有了这么多数据,我的启动时间从低至 7 分 35 秒缩短到近 3 小时。

这正常吗?可以通过一些更高级的配置来解决吗?我做错了什么吗?因为,就目前而言,如此长的启动时间是个大问题。

【问题讨论】:

【参考方案1】:

启动时间慢的主要原因是需要加载大量的元数据,这与数据文件的数量呈正相关。为了增加启动时间,您需要减少文件数量或获取更多内存以保留所有 dentry 和 inode 缓存。

我的评估服务器包含 26 个数据库,包含大约 540 亿条记录,占用了 697.32 GB 的磁盘空间。

我建议如下:

    尝试以更粗略的方式调整当前数据分区方案 使用OPTIMIZE TABLE <table> FINAL压缩所有数据文件 将数据磁盘升级为 SSD 或高效 RAID,或使用 btrfs 等文件系统将元数据单独存储在快速存储上。

【讨论】:

架构已经尽可能小了。如果这将投入生产,整个事情会更加复杂,并且会保存更多的数据。使用 OPTIMIZE:“虽然您可以使用 OPTIMIZE 查询运行计划外的合并,但不要指望使用它,因为 OPTIMIZE 查询会读取和写入大量数据。” (来自 ClickHouse 官方文档clickhouse.yandex/docs/en/operations/table_engines/…)。最后,升级到更快的磁盘不是解决方案。 InfluxDB中包含相同数据的服务器最多1s启动。 那么就没有什么可做的了。 github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/… 。 ClickHouse 在启动时会为每个数据部分读取多个文件,这些都是对底层磁盘的随机读取。而且由于启动速度不是最重要的,我看不到在不久的将来优化这个过程的潜在努力。

以上是关于如何提高 ClickHouse 服务器的启动时间?的主要内容,如果未能解决你的问题,请参考以下文章

clickhouse安装与启动

性能提高 15 倍!只是把 MySQL 换成了 ClickHouse

clickhouse实践——clickhouse启动参数使用总结

Clickhouse 没有启动

clickhouse:在启动时创建物化视图(docker)

复制 ClickHouse 副本的最佳方法?