ClickHouse性能调优 - 当磁盘IO是瓶颈的时候

news2024/10/8 20:38:07

ClickHouse性能调优 - 当磁盘IO是瓶颈的时候

引言

ClickHouse的性能调优问题是一个大的话题。虽然ClickHouse以其高速的数据处理能力而闻名,但在实际使用中,磁盘IO常常成为影响系统性能的瓶颈。本文将探讨在磁盘IO成为瓶颈时,如何通过一系列优化措施来提升ClickHouse的整体性能。

磁盘IO瓶颈

磁盘IO瓶颈指的是在数据读写过程中,磁盘的读写速度跟不上数据处理的需求,导致系统性能下降。这种情况在数据量大、查询频繁的场景下尤为明显。常见的症状包括查询延迟增大、系统响应时间变长,同时CPU利用率并不高。

确认是磁盘IO瓶颈

找到耗时的查询,执行查询,观察执行统计信息,重点关注IO读取数据量。例如以下信息就表明查询所读取的数据很大,可能是磁盘IO瓶颈。
0 rows in set. Elapsed: 38.308 sec. Peak memory: 1.39 GiB. Processed 22.89 million rows, 385.79 GB (597.51 thousand rows/s., 10.07 GB/s.)

把MergeTree表转成Memory表,然后执行同样的查询。注意避开查询并用不到的大数据列,避免内存溢出。以下是一个例子。

CREATE TABLE `big_table1_memory`
ENGINE = Memory AS
SELECT * EXCEPT `unused_big_column`
FROM `big_table1`
ORDER BY `id` ASC

将原先查询里的big_table1修改成big_table1_memory,执行查询,比较性能差异。
如果内存差异很大,基本可以判定是磁盘IO瓶颈(但也有可能是数据解压缩瓶颈)。

保证内存足够

解决磁盘IO瓶颈的方法是把数据搬到内存,所以必须保证内存充足。在一个实际例子中,服务器内存128G,非常充足,非常合适使用本文方法提升性能。

启用数据块缓存

在优化ClickHouse性能时,理解和配置缓存参数是非常重要的。以下是对几个关键配置项及其相互关系的解释:

关键配置
  1. uncompressed_cache_size

uncompressed_cache_size 参数是服务器参数,在config.xml中设置,用于指定ClickHouse在内存中用于存储解压缩数据的缓存大小。解压缩数据缓存可以减少对磁盘的访问,从而提高查询性能。

  • 默认值:默认情况下,这个值可能会根据系统内存大小自动配置,通常为总内存的一部分。
  • 作用:当数据从磁盘读取后,ClickHouse会将解压缩的数据块存储在这个缓存中。如果相同的数据块再次被访问,可以直接从缓存中读取,避免了重复的解压缩操作。
  1. use_uncompressed_cache

use_uncompressed_cache 参数是用户参数,在users.xml中设置,是一个布尔值,用于启用或禁用解压缩数据的缓存。

  • 默认值:通常为true,表示启用解压缩缓存。
  • 作用:设置为true时,ClickHouse将使用解压缩数据缓存来提升查询性能。设置为false时,ClickHouse将不会使用这个缓存。
  1. merge_tree_max_rows_to_use_cache

merge_tree_max_rows_to_use_cache 参数是用户参数,在users.xml中设置,定义了一个阈值,表示如果一个数据块的行数小于这个值,则该数据块可以被缓存在解压缩数据块缓存中。

  • 默认值:根据具体版本和配置情况而定。
  • 作用:这个参数帮助控制哪些数据块可以使用解压缩缓存,从而防止过大的数据块占用缓存空间。
  1. merge_tree_max_bytes_to_use_cache

merge_tree_max_bytes_to_use_cache 参数是用户参数,在users.xml中设置,定义了一个阈值,表示如果一个数据块的大小(以字节为单位)小于这个值,则该数据块可以被缓存在解压缩缓存中。

  • 默认值:根据具体版本和配置情况而定。
  • 作用:与merge_tree_max_rows_to_use_cache类似,这个参数帮助控制哪些数据块可以使用解压缩缓存,防止过大的数据块占用缓存空间。
参数之间的相互关系
  • uncompressed_cache_size与use_uncompressed_cache:uncompressed_cache_size定义了缓存的大小,而use_uncompressed_cache决定了是否启用这个缓存。如果未启用缓存(use_uncompressed_cache = false),则uncompressed_cache_size的设置将无效。

  • merge_tree_max_rows_to_use_cache与merge_tree_max_bytes_to_use_cache:这两个参数共同控制了哪些数据块可以使用解压缩缓存。一个数据块必须同时满足行数和字节大小的限制,才能被缓存在解压缩缓存中。

  • 整体关系:uncompressed_cache_size提供了缓存空间,use_uncompressed_cache决定是否使用这个空间,而merge_tree_max_rows_to_use_cache和merge_tree_max_bytes_to_use_cache则细化了缓存策略,确保只有较小的数据块被缓存,从而有效利用内存并提升性能。

示例配置

假设系统有足够的内存,以下是一个示例配置:

uncompressed_cache_size: 10GB
use_uncompressed_cache: true
merge_tree_max_rows_to_use_cache: 100000
merge_tree_max_bytes_to_use_cache: 104857600 # 100MB

  • uncompressed_cache_size: 10GB:指定10GB的内存用于解压缩数据缓存。
  • use_uncompressed_cache: true:启用解压缩数据缓存。
  • merge_tree_max_rows_to_use_cache: 100000:数据块的行数少于100,000行时可以使用解压缩缓存。
  • merge_tree_max_bytes_to_use_cache: 104857600:数据块的大小小于100MB时可以使用解压缩缓存。

通过合理配置这些参数,可以有效提升ClickHouse的查询性能,尤其是在磁盘IO成为瓶颈的情况下。

检查命中率

用以下查询观察缓存命中率,这个命中率是从服务器启动到现在的累计值。

SELECT
    event,
    value, description
FROM
    system.events
WHERE
    event LIKE '%Cache%';

如果解压缩缓存被正确启用,在查询结果中可以看到解压缩缓存的命中情况,例如:

    ┌─event────────────────────────────────────────────┬──────value─┬─description───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 1. │ UncompressedCacheMisses                          │      29300 │ Number of times a block of data has not been found in the uncompressed cache (and required decompression).                                                    │
 2. │ UncompressedCacheWeightLost                      │ 1921875200 │ Number of bytes evicted from the uncompressed cache.                                                                                                          │
    └──────────────────────────────────────────────────┴────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

其他因素

压缩算法会减少磁盘IO的负载,但是会增加CPU的负载。

压缩算法对ClickHouse性能的影响

在ClickHouse中,压缩算法的选择对系统性能有着重要的影响。默认情况下,ClickHouse使用LZ4压缩算法,它在性能和压缩率之间提供了良好的平衡。以下是对压缩算法如何影响磁盘IO和CPU负载的详细解释。

压缩算法的作用

压缩算法通过减少数据的存储大小,降低了磁盘IO的工作量。具体表现为:

  • 减少磁盘空间占用:压缩后的数据占用更少的磁盘空间,从而节省存储成本。
  • 降低磁盘IO频率:由于数据变小,读取和写入操作需要访问的磁盘块数量减少,从而降低了磁盘IO的频率。

然而,压缩数据在读取时需要解压缩,这会增加CPU的负载。以LZ4为例,虽然它是一种快速的压缩算法,但解压缩操作仍然需要一定的CPU资源。

压缩算法对性能的影响

  • 磁盘IO减少:压缩算法显著降低了数据的存储大小,因此减少了磁盘读写操作的次数。这对于IO瓶颈的系统尤为重要。
  • CPU负载增加:解压缩操作需要消耗CPU资源。尽管LZ4的解压缩速度很快,但在数据量非常大的情况下,CPU的负载仍可能显著增加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

傅里叶分析之掐死教程(完整版)更新于2014.06.06

作 者:韩 昊 知 乎:Heinrich 微 博:花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。 转载的同学请保留上面这句话,谢谢。如果…

许昌文旅助手:AI智能体在文旅领域的创新应用

哈哈,大家好,我是王帅旭,来自大禹智库,也是《实战AI智能体》一书的作者。今天,咱们就来聊聊一个超级有趣的案例——许昌文旅助手,看看AI智能体是如何在文旅领域大放异彩的! 无限拓展的能力集&am…

大数据开发--1.3 Linux的常用命令大全

目录 一. 终端命令格式 命令格式 说明: 二. 显示文件列表命令 -ls 作用 格式 ls常用选项 案例 三. 目录操作命令 -pwd 作用 格式 案例 四. 目录操作命令 -cd 作用 格式 案例 五. 目录操作命令 -mkdir 作用 格式 案…

c语言中的有关“sizeof”和“strlen”在“数组”以及“指针”中应用的举例

数组名表示首元素地址 但是有两个意外 1. sizeof(数组名) 2. &数组名----这里的数组名表示整个数组,取出的是数组的地址。 (1)字符数组的sizeof (2)字符数组的strlen (3&…

高远科技总经理张会斌受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 北京高远华信科技有限公司总经理张会斌先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾,演讲议题为“哪些AI工具与技术可以应用于项目管理”。大会将于10月26-27日在北京举办&#xff0c…

APP自动化搭建与应用

APP自动化环境搭建 用于做APP端UI自动化,adb连接手机设备。 需要的工具java编辑器:jdk、Android-sdk软件开发工具组、appium的python客户端、nodes.js、夜神模拟器、apk包、uiautomatorviewer 第一步:安装sdk,里面包含建立工具bu…

1.1K Star,跨平台开发者工具箱

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 在现代开发环境中,提升工作效率的工具不可或缺&#xff0…

如何在百度地图上添加自己店铺的位置?

随着互联网的快速发展,如今许多事都可以通过网络去解决,例如线上支付、线上购物、线上订餐等,包括日常出行,人们也可以依靠地图软件去规划路线,然后导航至目的地。其中,百度地图作为国内领先的地图导航平台…

手写mybatis之数据源池化技术实现

前言 在上一章节我们解析了 XML 中数据源配置信息,并使用 Druid 创建数据源完成数据库的操作。但其实在 Mybatis 中是有自己的数据源实现的,包括无池化的 UnpooledDataSource 实现方式和有池化的 PooledDataSource 实现方式。 你可以把池化技术理解为享…

如何将精益思维应用于智能音箱的产品设计?

在激烈的市场竞争中,如何让自家的智能音箱脱颖而出,成为用户心中的“智能生活伴侣”?答案或许就藏在“精益思维”这一理念之中。本文,天行健精益生产顾问将带大家深入探索,如何将精益思维巧妙应用于智能音箱的产品设计…

排序算法之你不得不知道的(1)

一、排序运用场景 (1)排序概念:将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。 (2)运用场景: (1)淘宝、支付宝、京东等购物平台的价格排序、质…

vue的h函数和template语法如何混用?

前言: h函数定义: 我们编写的代码转化为真正的dom时,首先会先转换为VNode,然后多个Vnode进行结合起来转化为VDOM,最后VDOM才渲染成真实的DOM。在 Vue.js 中,h 函数是 createElement 的别名,它是 Vue 用来创…

如何使用ssm实现基于vue的学生宿舍设备报修管理系统的设计与实现+vue

TOC ssm804基于vue的学生宿舍设备报修管理系统的设计与实现vue 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大,人为计算方面才是一个巨大的短板,所以发明了各种计算设备,从结绳记事,到算筹,以及算盘&#x…

基于java SpringBoot和Vue校园求职招聘系统设计

摘要 随着信息技术的迅猛发展,基于Java Spring Boot和Vue的校园求职招聘系统设计成为了解决高校就业难问题的重要手段。本文旨在探讨如何利用Java Spring Boot框架构建后端服务,以及使用Vue.js进行前端开发,从而创建一个高效、易用且功能全面…

【JavaScript】JS核心语法及函数

文章目录 一、初识 JS二、JS 核心语法2-1 变量2-2 数据类型typeofString 对象 2-3 数组创建数组常用属性方法 2-4 运算符号加号运算符 减号运算符 -比较运算符逻辑运算符 2-5 控制语句for-inbreakcontinue 三、函数3-1 常用系统函数3-2 自定义函数函数声明函数调用 3-3 创建对象…

RISC-V知识点目录

分支预测 分支预测概述https://blog.csdn.net/zhangshangjie1/article/details/136947089?sharetypeblogdetail&sharerId136947089&sharereferPC&sharesourcezhangshangjie1&spm1011.2480.3001.8118分支指令的方向预测https://blog.csdn.net/zhangshangjie1/a…

高效微调理解(prompt-tuning,p-tuning v1,p-tuning v2,lora)

高效微调(prompt-tuning,p-tuning v1,p-tuning v2,lora) 1.prompt-tuning: 例子理解;保持原本模型参数不变,通过训练提示词的参数调整prompt,使其与下游任务匹配。 例子…

HCIP-HarmonyOS Application Developer 习题(八)

(填空)1、声明式开发范式中使用装饰器( )装饰的结构体具有组件化能力,能够成为一个自定义组件。 答案:component 分析:component 装饰的struct表示该结构体具有组件化能力,能够成为一个独立的组件&#xff…

IT行业哪些证书可以应对就业难?

作为IT运维专业人士,持续增强自身的专业技能和知识是提升职场竞争力、实现升职加薪的关键途径。 下面为大家搜罗了5本适合IT运维人员考取的证书。 一、ITSS认证 ITSS,即信息技术服务标准,是一套涵盖了IT服务领域的标准库和方法论。 这是我…

企业升级首选:Windows 11 24H2 LTSC 纯净企业版!

今日,系统之家小编给大家带来最新的Windows11 24H2 LTSC 2024 纯净企业版下载,该版本系统是离线制作而成,各种各样的捆绑软件也都删除了,确保系统是安全无毒,还具备出色的稳定性与安全性,非常适合企业用户办…