1、问题场景 之 超时了
在海豚调度使用sql节点,当sql语句执行超过30s则会失败,即使实际上后台已经将数据插入表。由于海豚作业是由工作流的一个个节点连接而成,若有一个作业失败,则影响下游作业以及下游其他项目分组的作业。
那么,如何让每个sql作业都能够尽可能短时间地执行呢?
2、实践对比 之 缩短了
方案:优化clickhouse语法,使用执行计划查看后台实际执行语句,注释或失效join测试每个jion占用时长。
在clickhouse,每增加一个jion都会在已有关联语句外再套一层子查询后新增加的jion,则同一级有10个jion,实际上是10层嵌套。而clickhouse的优化jion是小表在右,那么若我们需要jion一个表,需要尽可能将jion的表数据量最小化。
如此,已经成功将执行时长从30s减少到14s。
3、策略详解 之 学到了
1、最少量使用string
2、避免使用null nullable,可以用一个不可能出现的默认值、或者在业务中无意义的来代指空,例如将 id 设置为 -1 表示该商品没有 id,而不是使用 Null。
3、分区按年、月、日、地区等,1亿数据10~30个分区。
4、索引orderby,基数小、重复多、常查询的单一或组合主键,决定分区内顺序。
5、写入删除优化,少次、少分区、多量,例如每秒钟发起 2 ~ 3 此写入操作,每次操作写入 2w ~ 5 w 条数据。
4、参考文档 之 借鉴了
clickhouse查询优化:https://blog.csdn.net/qq_51235856/article/details/134359537
查看执行计划:https://blog.csdn.net/qq_51235856/article/details/134357569
优化策略:https://www.cnblogs.com/traditional/p/15264282.html
5、AI建议
ClickHouse 是一款开源的列式数据库管理系统,适用于处理海量数据的高性能查询。为了优化 ClickHouse 的查询性能,以下是一些策略建议:
数据模型设计优化:在设计数据模型时,应根据查询需求和数据特点合理选择列和列的数据类型。使用合适的列类型可以减少存储空间和提高查询性能。另外,对于频繁使用的字段,可以将其作为排序键或者使用字典编码来提高查询效率。
数据分区设计优化:对大数据集进行分区可以提高查询性能。可以使用时间分区、范围分区或者哈希分区等分区策略。分区可以减少查询的数据量,提高查询速度。
索引优化:ClickHouse 支持多种索引类型,包括主键索引、非主键索引和全文索引。根据查询需求合理选择索引类型,并通过索引提高查询的效率。
数据预处理:在进行查询之前,可以对数据进行预处理,例如进行数据合并、数据过滤、数据清洗等。预处理可以减少查询的数据量和复杂度,提高查询的性能。
优化查询语句:合理构造查询语句可以提高查询性能。避免使用不必要的聚合函数和子查询,合理使用 JOIN 操作和 WHERE 条件,避免查询全表数据等。
并行查询优化:ClickHouse 支持并行查询,可以通过适当调整并行度来提高查询效率。可以根据系统配置和查询需求,调整并行度来达到最佳性能。
硬件优化:合理配置硬件资源可以提高 ClickHouse 的查询性能。可以考虑增加 CPU、内存和磁盘资源,优化网络连接等。
数据压缩优化:ClickHouse 支持多种数据压缩算法,可以根据数据特点选择合适的压缩算法。压缩可以减小数据的存储空间,提高查询性能。
优化数据加载:在数据加载过程中,可以合理设置并行度和数据块大小,提高数据加载的效率。可以使用并行加载和分布式加载方式来优化数据加载。
定期维护:定期进行系统维护可以保持 ClickHouse 的性能稳定。可以定期清理过期数据、优化表结构、重新分区等。
以上是一些 ClickHouse 查询优化的策略建议,根据具体情况和需求,可以灵活选择合适的优化策略。