Clickhouse 文件缓存的使用
元数据缓存
1、Clickhouse启动的时候会加载所有表的元数据信息,这部分会缓存在内存里面。这部分的内存没有办法知道并且也不走MemoryTracker。
Mark数据缓存
2、Clickhouse会缓存表的mark信息在内存里, 使用LRU算法来控制。缓存大小通过配置文件中config.xml里面的mark_cache_size属性来控制。默认是5G。每个Shard上面占用的内存。
数据缓存
3、Clickhouse会缓存表的解压缩数据放到内存里面,使用LRU算法来控制。LRU的大小通过config.xml里面的uncompressed_cache_size属性来控制。默认是8G。每个Shard上面占用的内存。
Clickhouse 执行DDL DML锁机制
lockForShare
用于保证占有lock时table不会被drop.用于SELECT,后台的merge
lockForAlter
用于保证占有lock时同时刻只会处理一个ALTER Query
lockExclusively
用于保证占有lock时没有任何其他线程(如select,merge,alter)对表进行操作
两种锁:
alter_lock
进行alter操作的时候必须要抢占的锁以保证任何时刻只有一个alter线程处理table,drop等操作也需要调用lockExclusively抢占该锁以保证进行操作前所有alter操作已经结束.
drop_lock
所有select/merge相关的query需要调用lockForShare抢占该锁保证表没有被drop.
所有drop相关操作时需要调用lockExclusively抢占该锁,保证进行drop时所有其他任何select/merge操作都已经结束.