clickhouse新特性之————MergeTree启动加速(使用篇)

简介: clickhouse新特性之————MergeTree启动加速(使用篇)

前言


MergeTree Family启动慢问题一直是ClickHouse社区的痛点。在完成对所有MergeTree part的加载之前,clickhouse-server实例无法对外提供服务。而在生产环境中,加载过程动辄持续几十分钟,严重影响clickhouse集群的可用性。


针对这个痛点,我们开发了MergeTree启动加速特性:通过RocksDB缓存part元数据,将clickhouse-server的启动时间从小时级减少到分钟级。该特性目前已被合入社区,PR见:https://github.com/ClickHouse/ClickHouse/pull/32928。本文将着重讲解如何使用该特性,并对启动性能进行评测。




使用


配置


首先需要在config.xml中加入配置

<!-- Uncomment if enable merge tree metadata cache -->
    <merge_tree_metadata_cache>
        <lru_cache_size>268435456</lru_cache_size>
        <continue_if_corrupted>true</continue_if_corrupted>
    </merge_tree_metadata_cache>

lru_cache_size: 用于缓存part元数据的RocksDB实例中的LRU大小

continue_if_corrupted: 当本地的RocksDB目录读取失败时,用户可选择退出进程(false)或者清空脏数据(true)。



建表


创建MergeTree Family的表时,需指定settings: use_metadata_cache = true,这样该表下所有part的元数据除了落地到文件中,还会写一份到RocksDB.

建表

CREATE TABLE test
(
    `x` UInt32, 
    `y` UInt32, 
    `z` UInt32, 
    `t` UInt32
)
ENGINE = MergeTree
PARTITION BY x % 10
ORDER BY (x, y) 
SETTINGS use_metadata_cache = true

插入数据

insert into test select number, number, number, number from system.numbers limit 100;

查看元数据缓存

:) desc system.merge_tree_metadata_cache 
DESCRIBE TABLE system.merge_tree_metadata_cache
Query id: d2a96900-db4f-45ef-8d19-f1d2f6edd930
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ key   │ String │              │                    │         │                  │                │
│ value │ String │              │                    │         │                  │                │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
:) select key from system.merge_tree_metadata_cache where key like 'default:%' limit 10; 
SELECT key
FROM system.merge_tree_metadata_cache
WHERE key LIKE 'default:%'
LIMIT 10
Query id: 7c87cb78-ba72-4702-b457-6bdfba5ee83c
┌─key──────────────────────────────────────────────────────────────────────────────────────────┐
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/0_1_1_0/checksums.txt                 │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/0_1_1_0/columns.txt                   │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/0_1_1_0/count.txt                     │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/0_1_1_0/default_compression_codec.txt │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/0_1_1_0/minmax_x.idx                  │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/0_1_1_0/partition.dat                 │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/0_1_1_0/primary.idx                   │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/1_2_2_0/checksums.txt                 │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/1_2_2_0/columns.txt                   │
│ default:store/b47/b47ee9c8-afa1-41ac-adfb-2e0dc42de819/1_2_2_0/count.txt                     │
└──────────────────────────────────────────────────────────────────────────────────────────────┘
10 rows in set. Elapsed: 0.002 sec. 

系统表system.merge_tree_metadata_cache可用于查询rocksdb缓存的part元数据。其中


  • key: part元数据文件的路径,格式为., 其中disk_name为配置在config.xml中的disk名称。如果该表使用默认存储策略,disk_name的值为default。relative_path为part元数据文件相对disk根目录的路径


  • value: part元数据文件的内容




测评


接下来我们分别测试在不使用和使用metadata cache的情况下,clickhouse-server的启动速度




环境准备


为了尽量模拟生产环境,在单个clickhouse实例上创建2000张MergeTree表,每张MergeTree表50个字段,350个part。单实例上一共70万个part,与笔者的生产环境持平。clickhouse版本选择22.4


脚本如下,用它分别初始化clickhouse实例A(禁用启动加速)和实例B(使用启动加速)

#!/bin/bash
num_tables=2000
num_columns=50
num_partitions=350
# 禁用启动加速特性
# use_metadata_cache=0
# 使用启动加速特性
use_metadata_cache=1
function get_create_table_query()
{
    id=$1
    echo -n "CREATE TABLE test.test_${id} (day Date"
    for i in `seq 1 $num_columns`; do
        echo -n ", col${i} String"
    done
    echo -n ") ENGINE = MergeTree() PARTITION BY toYYYYMMDD(day) ORDER BY col1"
    if [ $use_metadata_cache -eq 1 ]; then 
      echo -n " SETTINGS use_metadata_cache = true;"
    else
      echo -n " SETTINGS use_metadata_cache = false;"
    fi
}
function get_insert_table_query()
{
    id=$1
    offset=$2
    echo -n "insert into test.test_${id} values (today()-${offset}"
    for i in `seq 1 $num_columns`; do
        echo -n ", 'hello world:${i}'"
    done
    echo -n ");"
}
tock="clickhouse-client"
echo "drop database if exists test;" | tock
echo "create database if not exists test ENGINE = Ordinary;" | tock
for i in `seq 1 $num_tables`; do
    sql=`get_create_table_query $i`
    echo "$sql" | tock
    for offset in `seq 1 $num_partitions`; do
        (sql=`get_insert_table_query $i $offset`; echo "$sql" | tock)&
        if (( $offset % 90 == 0 )); then
            wait
        fi
    done
    wait
done



测试结果


环境 启动时长
使用MergeTree启动加速 63 minutes
禁用MergeTree启动加速 18 seconds



总结


在这篇文章中,我们介绍了如何使用启动加速特性,并对比了优化前后的启动性能。该特性能够将clickhouse的启动时长从小时级优化到分钟级。目前已经在我们的生产环境稳定运行超过一年,欢迎社区的小伙伴们使用。


相关文章
|
存储 数据库 索引
61.【clickhouse】ClickHouse从入门到放弃-MergeTree的存储结构
【clickhouse】ClickHouse从入门到放弃-MergeTree的存储结构
61.【clickhouse】ClickHouse从入门到放弃-MergeTree的存储结构
|
存储 数据库 索引
60.【clickhouse】ClickHouse从入门到放弃-MergeTree的创建方式
【clickhouse】ClickHouse从入门到放弃-MergeTree的创建方式
60.【clickhouse】ClickHouse从入门到放弃-MergeTree的创建方式
|
存储 SQL JSON
一文读懂 ClickHouse V22.8 新版本重要特性
ClickHouse 又双叒叕发布新版本了。
一文读懂 ClickHouse V22.8 新版本重要特性
|
存储 SQL 数据采集
ClickHouse V22.8 新特性介绍
ClickHouse V22.8 版本作为社区推荐的 LTS 版本经过几个月的稳定性后迭代后,已经完全可以应用于生产环境。本文将介绍V22.8版本的重要特性发布,包括半结构化数据的存储和分析性能的增强,轻量 Delete 标准 SQL支持,引擎内置远程文件的查询缓存机制等能力的详细介绍,同时对于社区的技术演进方向进行探讨。
1296 1
|
存储 SQL NoSQL
ClickHouse 特性
ClickHouse 特性
166 0
|
存储 SQL JSON
ClickHouse特性
ClickHouse特性
133 0
|
1天前
|
存储 Cloud Native 大数据
国内独家|阿里云瑶池发布ClickHouse企业版:云原生Serverless新体验
全面升级为云原生架构,支持云原生按需弹性Serverless能力,解决了长期困扰用户的集群扩展效率和平滑性问题。
国内独家|阿里云瑶池发布ClickHouse企业版:云原生Serverless新体验
|
5天前
|
存储 容灾 Cloud Native
阿里云ClickHouse企业版正式商业化,为开发者提供容灾性更好、性价比更高的实时数仓
2024年4月23日,阿里云联合 ClickHouse Inc. 成功举办了企业版商业化发布会。阿里云 ClickHouse 企业版是阿里云和 ClickHouse 原厂 ClickHouse. Inc 独家合作的存算分离的云原生版本,支持资源按需弹性 Serverless,帮助企业降低成本的同时,为企业带来更多商业价值。
100 1

热门文章

最新文章