TIDB插数据很占内存为什么?

感谢,那我还有一个疑问 不设置block-cache tikv占20G内存,假设设置了block-cache 为15G内存,强行限制他上限是15G,会有影响吗,那之前多出去得5G怎么办呢,设置上限得话会使TIKV不能正常工作吗?

不会有大的影响,缩小它只是减小了缓存的大小而已。

BlockCache 是一个存储层的缓存,是 TiKV 为了提高读取性能以及减少对磁盘的读取而设置的。
RocksDB 将存储在磁盘上的文件都按照一定大小切分成 block(默认是 64KB),读取 block 时先去内存中的 Block Cache 中查看该块数据是否存在,存在的话则可以直接从内存中读取而不必访问磁盘。

BlockCache 按照 LRU 算法淘汰低频访问的数据,默认大小是系统总内存大小的 45%,用户也可以自行修改 storage.block-cache.capacity 的值,但不建议超过总内存的 60%。

https://docs.pingcap.com/zh/tidb/stable/rocksdb-overview#rocksdb-的内存占用

好的,我看配置文件那里 单机部署是有三个tikv同时部署到一个IP,那么block-cache设置是限制得一个,还是这三个总和呢

在配置文件的server_configs层级下,有个tikv层级配置,这个是对所有tikv实例节点都生效的,可以在这里配置。在这里配置后,就不需要到每个节点上配该参数了。

比如:

server_configs:
  tidb:
    log.slow-threshold: 300
  tikv:
    storage.block-cache.capacity: "<The value refers to the calculation formula result of the multi-instance 
  pd: 

https://docs.pingcap.com/zh/tidb/stable/hybrid-deployment-topology

好的感谢,我就是在这里配的,看了公式是
storage.block-cache.capacity = (MEM_TOTAL * 0.5 / TiKV 实例数量)

我总共是30G内存,我在 storage.block-cache.capacity改成了15G,后来再插数据内存确实没之前上涨那样了,但是看这个公式我应该还得改一下吧,因我我三个TiKV 实例部署在都部署了同一个单机上,按理说应该还要除以3,storage.block-cache.capacity 应该写5G而不是 15G吧

没错,还需要平均分配给不同的tikv 节点

单个模拟集群,什么东西都是倍用的

单机肯定啊,首先mysql是单进程多线程,tidb本身就把server层,存储引擎层,pd也就相当于mysql的主线程都拆开来了,多进程交互内存本来就大。

也就是本身这些组件的交互运行成本是超出mysql的,所以单机的话还不如去做个mysql

都部署到一台啊

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。