作者回复: 目前依然是8G,阿里提的PR就是文中说的使用hashmap来管理boltdb freelist, 它解决了boltdb文件特别大(>20G)场景下的freelist管理瓶颈。除了boltdb本身瓶颈,文中我给出了很多其他影响面,比如etcd启动耗时,一个14G,100万的key就启动接近2分钟,还有expensive request对大数据量etcd集群影响特别大, 因为etcd存储的key-value数据都是在一个bucket里面,目前etcd没有任何QoS机制,一旦不小心发起一个遍历大量key的查询就容易出现各种稳定性问题了。
作者回复: 一般我们都是通过prometheus采集etcd metrics,配置grafana视图查看的,db 大小的metrics是这个etcd_debugging_mvcc_db_total_size_in_bytes
作者回复: 是这样的,我举个例子,没这个优化之前,如果你有1百万的key,你查询个limit 1,treeIndex也会返回上百万的key给上层,如果把这个limit参数下推到treeIndex模块后,找到满足条件的limt数就直接返回了。
作者回复: 1. treeIndex在启动时和运行过程中,可能存在多个goroutine并发访问的情况下,比如还有compaction异步任务也会操作它。我这里说的阻塞在锁上,实际上是我之前尝试将构建treeIndex改成并行,因为默认只有1个goroutine串行构建的,发现效果依然不佳,我完善下描述。 2. 下面写了会执行一系列这样的命令,value也有变化,直到压测到14Gdb大小左右,key 1.2M个。
作者回复: 嗯,是的,是申请连续的若干个空闲page