primary_key_bytes_in_memory与标记缓存大小的关系

Relationship between primary_key_bytes_in_memory and mark cache size

我正在尝试了解 21.8-altinitystable 上 AggregatingMergeTree 上标记缓存的指标table。

system.parts table 上的这些列有什么区别? primary_key_bytes_in_memory 和 primary_key_bytes_in_memory_allocated?它们是否代表 mark_bytes 内存中标记缓存中的部分?

它们与 system.asynchronous_metrics table 中的 MarkCacheBytes 指标有任何关联吗? 我有一个 4Gb 标记缓存大小,MarkCacheBytes 显示它已被完全使用但是 primary_key_bytes_in_memory 和 primary_key_bytes_in_memory_allocated across tables and parts 的总和要低得多(分别为 1 和 2 Gb)。

谢谢 菲利波

primary_key_inmemory_* 这是给 primary.idx MarksCache 用于 *.mrk 个文件

https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings#server-mark-cache-size

https://clickhouse.com/docs/en/guides/improving-query-performance/sparse-primary-indexes#a-table-with-a-primary-key 详情

抱歉,对于之前的回答。

我试着解释更多细节:

What is the difference between these columns on the system.parts table? primary_key_bytes_in_memory and primary_key_bytes_in_memory_allocated?

根据消息来源 https://github.com/ClickHouse/ClickHouse/blob/229d35408b61a814dc1cb5a4cefcfa852efa13fe/src/Storages/System/StorageSystemParts.cpp#L181-L184

primary_key_bytes_in_memory - 加载到内存中的大小为 primary.idx primary_key_bytes_in_memory_allocated - 在内存中加载期间 primary.idx 按列拆分并且在拆分期间分配的内存比原始大小稍大

Do they represent the portion of mark_bytes that are in memory in the mark cache?

不,它仅代表 primary.idx 所选部分在内存中的表示

Are they related in any way with the MarkCacheBytes metric in the system.asynchronous_metrics table

不,上面的字段与 MarkCache 无关,MarkCache 相关指标仅显示加载到内存中的 <column_name>.mrk2 文件。而CacheHit、CacheMiss为这个标志缓存

primary.idx 中的每条记录都包含主键字段的值和原始数据中 8192 行中每一行的粒度数,这是一个粒度

<column_name>.mrk2 中的每条记录都包含压缩文件 .bin 中的开始偏移量、解压缩块中的偏移量以及 中包含的行数颗粒

希望对你有所帮助