JJava 知识库
JAVA INTERVIEW

高频面试题

CK高级约 1 分钟

ClickHouse 单条查询很快,但并发一高就抖动,为什么?接口层会怎么保护它?

参考回答约 1 分钟 · 口语表达
我的判断

ClickHouse 单查询能并行吃满 CPU 和磁盘,所以高并发会互相争抢;接口层必须限制并发、时间范围和资源配额。

我会先看并发升高时 system.processes、CPU、磁盘、网络和 memory tracker。单条报表可能使用多个执行线程,10 条并发并不是 10 个轻请求,而是几十上百个线程同时扫数据;merge 也在争磁盘和 CPU。

保护会分层做:接口对同租户和同报表限流,查询设置最大执行时间、最大扫描行数和内存;核心实时查询与离线导出使用不同用户/profile 和配额;重复查询可做短缓存,耗时导出改异步队列。

突发事故时先暂停离线任务、降低单查询线程数、取消明确失控查询并限制入口并发。扩容只在确认长期资源不足后做,而且要看数据是否均匀分布。

提高 max_concurrent_queries 只是允许更多查询一起抢资源。容量不变时,它经常让所有查询都更慢。

思路拆解问题分析

OLAP 和普通接口的差别是:单请求本身就可能是并行大任务。并发治理看的不是连接数,而是 每条查询的扫描量、线程数、内存和持续时间