1、以时间来分区的日志表,行为表等,建表分区时尽量避免用时间戳,年月日来分区。
原因:因为以这种基数大的属性列分区时,存储数据的时候,磁盘上就会生成N个数据目录,merge会跟不上或者很慢。
解决方案:建议用年月(toYYYYMM)或者年(toYYYY)来当建表时的索引列。
2、Too many parts(XXX). Merges are processing significantly slower than inserts.
原因:当发送一个插入请求的时候,涉及了N多个分区的数据,在磁盘上会生成N个数据目录,merge跟不上。
解决方案:①设置分区的时候需要思考清楚,是否会导致插入的时候涉及太多分区。
②插入的时候,尽量避免数据中的“分区”列过多。比如一张表建表时是以年月日来分区的,你插入几万数据,但是涉及的年月日有几百个之多,那么插入速度会非常的慢。这个时候就建议你把数据按年月日分成N等份,分批插入较好(如果需要插入的数据一直是这样,那么建议还是以按年月或者按年分区会比较好)。
3、查询的过程中clickhouse-server进程老是挂掉。
原因:clickhouse查询一些需要非常大内存的sql时,会被OS kill掉。因为安装时max_memory_usage_for_all_queries的默认值为0,即不限制clickhouse内存使用。
解决方案:clickhouse安装完成以后,在users.xml这个配置文件中配置一下max_memory_usage_for_all_queries,控制
clickhouse-server的最大占用内存,避免被OS ki