前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TiDB集群tikv节点内存占用较高问题排查

TiDB集群tikv节点内存占用较高问题排查

作者头像
SEian.G
发布于 2021-09-17 03:14:09
发布于 2021-09-17 03:14:09
3K00
代码可运行
举报
文章被收录于专栏:SEian.G学习记录SEian.G学习记录
运行总次数:0
代码可运行

TiDB集群上线运行一段时间,近期巡检的时候发现一个问题,集群中TiKV节点内存占用比较高,尤其在导入数据的时候,节点的内存会更高

下面我们就针对TiKV节点高的问题进行分析:

首先确认下TiKV节点配置如下:

问题排查:

1、登录到单个TiKV接节点,查看内存占用情况

2、确认节点的THP(内存大页)是否关闭

关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

从查看结果看,内存大页是关闭的

3、在 通过监控TiKV-Details RockDB面板确认是否是block size引起的,查看每一个TiKV节点的block size的内存占用都达到了最大设置10G

调整block size大小的配置,建议不超过机器内存的60%

调整参数,调整大小为7G,storage.block-cache.capacity: 7GB

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ tiup cluster edit-config tidb-prod001

调整完成之后,重启TiKV节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ tiup cluster reload tidb-prod001 -R tikv

重启完成后,查看内存占用情况

拓展:

TiKV的配置参数:

storage.block-cache 表示RocksDB 多个 CF 之间共享 block cache 的配置选项。当开启时,为每个 CF 单独配置的 block cache 将无效。

shared 是否开启共享 block cache。 默认值:true capacity 共享 block cache 的大小。 默认值:系统总内存大小的 45% 单位:KB|MB|GB

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

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

写入 RocksDB 中的数据会写入 MemTable,当一个 MemTable 的大小超过 128MB 时,会切换到一个新的 MemTable 来提供写入。TiKV 中一共有 2 个 RocksDB 实例,合计 4 个 ColumnFamily,每个 ColumnFamily 的单个 MemTable 大小限制是 128MB,最多允许 5 个 MemTable 存在,否则会阻塞前台写入,因此这部分占用的内存最多为 4 x 5 x 128MB = 2.5GB。这部分占用内存较少,不建议用户自行更改。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA的辛酸事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常见存储引擎_存储引擎
TiKV 是一个分布式事务型的键值数据库,提供了满足 ACID 约束的分布式事务接口,并且通过 Raft 协议 保证了多副本数据一致性以及高可用。TiKV 作为 TiDB 的存储层,为用户写入 TiDB 的数据提供了持久化以及读写服务,同时还存储了 TiDB 的统计信息数据。
全栈程序员站长
2022/11/09
1.9K0
常见存储引擎_存储引擎
tikv和tidb_tidb优缺点
TiKV 最底层使用的是 RocksDB 做为持久化存储,所以 TiKV 的很多性能相关的参数都是与 RocksDB 相关的。TiKV 使用了两个 RocksDB 实例,默认 RocksDB 实例存储 KV 数据,Raft RocksDB 实例(简称 RaftDB)存储 Raft 数据。
全栈程序员站长
2022/09/29
8950
TIDB TIKV数据存储到ROCKSDB探秘 与 ROCKSDB 本尊
为什么最近一直在看分布式数据库,因为第六感给我的指示是, 分布式数据库是国产数据库下一个要发力的点, 为什么. 如果作为一个产品经理, 首先一个产品要有用户的画像, 那么什么数据库是可以找到金主"爸爸"的, 分布式数据库,并且这些金主们, 应该都很有钱. 单体数据库能吸引大量资金的时代是要过去了. 一个维护费用低,稳定性强, 扩展能力强并且将之前数据库的"毛病" 都一一扫尽的数据库产品, 银行和金融机构应该是很欢喜的. 这也是一些银行自研分布式数据库,或者使用商用分布式数据库的原因吧.
AustinDatabases
2021/08/06
1.8K0
TIDB  TIKV数据存储到ROCKSDB探秘  与 ROCKSDB 本尊
生产环境TiDB 5.0集群部署
最近是沉迷于TiDB,无法自拔,从TiDB集群部署到集群压测、高可用测试、再到参数调优,最后到线上业务从MySQL迁移到TiDB,整个过程下来,感觉整个学习成本还是比较高,不管是TiDB还是分布式数据库,要学习的内容还是非常的多;本文主要分享生产环境部署TiDB v5.0.3版本集群过程,供大家参考学习;
SEian.G
2021/08/25
1.4K0
手把手教你搭建Tidb最新版4.0集群
TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP cluster 是 TiUP 提供的使用 Golang 编写的集群管理组件,通过 TiUP cluster 组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级 TiDB 集群、管理 TiDB 集群参数。
杨漆
2021/03/18
1K0
手把手教你搭建Tidb最新版4.0集群
一篇文章彻底搞懂TiDB集群各种容量计算方式
TiDB 集群的监控面板里面有两个非常重要、且非常常用的指标,相信用了 TiDB 的都见过:
HOHO
2024/01/12
2360
一篇文章彻底搞懂TiDB集群各种容量计算方式
Flink on RocksDB 参数调优指南
对于需要保存超大状态(远超于内存容量)的流计算场景来说,目前 RocksDB [1] 是 Flink 平台上官方实现的唯一选择。业界也有使用 Redis 等其他服务作为状态后端的方案,但终究不够成熟,且已被社区否决 [2].
KyleMeow
2020/02/29
17.5K0
Flink on RocksDB 参数调优指南
TiKV Raft Store 内存管理的原理与实现丨TiKV 源码解读(二十三)
内存管理是数据库系统不可忽视的核心问题之一,它直接影响系统的性能、稳定性和成本效率。
PingCAP
2024/11/27
1610
TiKV Raft Store 内存管理的原理与实现丨TiKV 源码解读(二十三)
​TiKV 新架构:Partitioned Raft KV 原理解析
TiKV 推出了名为“partitioned-raft-kv”的新实验性功能,该功能采用一种新的架构,不仅可以显著提高 TiDB 的可扩展性,还能提升 TiDB 的写吞吐量和性能稳定性。
PingCAP
2023/05/16
4440
TiDB OOM问题 学习笔记(纯干货)
1.1 客户端一般通过tidb来连接TiDB集群,一般OOM之后可能会出现Lost Connection to MySQL Server during query
AsiaYe
2022/01/25
1.3K0
干式电力变压器技术参数和要求_10kv变6kv变压器型号技术参数
写请求从TiDB传入到scheduler pool,scheduler pool负责协调并发写入的冲突;如果有多个写请求要写同一个KEY或者遇到锁的时候,scheduler pool通过latch来进行排队,成功获得latch的可以继续往下走传递给raftstore pool,其他写请求继续等待;
全栈程序员站长
2022/09/27
4920
干式电力变压器技术参数和要求_10kv变6kv变压器型号技术参数
Flink RocksDB托管内存机制的幕后—Cache & Write Buffer Manager
为了解决Flink作业使用RocksDB状态后端时的内存超用问题,Flink早在1.10版本就实现了RocksDB的托管内存(managed memory)机制。用户只需启用state.backend.rocksdb.memory.managed参数(默认即为true),再设定合适的TaskManager托管内存比例taskmanager.memory.managed.fraction,即可满足多数情况的需要。
大数据真好玩
2022/06/17
1.7K0
Flink RocksDB托管内存机制的幕后—Cache & Write Buffer Manager
【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree 日志结构合并树
LSM 树广泛用于数据存储,例如 RocksDB、Apache AsterixDB、Bigtable、HBase、LevelDB、Apache Accumulo、SQLite4、Tarantool、WiredTiger、Apache Cassandra、InfluxDB和ScyllaDB等。
一个会写诗的程序员
2022/11/30
3.5K0
【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree 日志结构合并树
The lifecycle of a SQL in TiDB
1. 当Sql进入TiDB时先获取Token,事务开始时获取Start TS (异步方式获取)
杨漆
2021/02/04
7200
The lifecycle of a SQL in TiDB
Flink状态后端和CheckPoint 调优
RocksDB 是嵌入式的 Key-Value 数据库,在 Flink 中被用作 RocksDBStateBackend 的底层存储。如下图所示,RocksDB 持久化的 SST文件在本地文件系统上通过多个层级进行组织,不同层级之间会通过异步Compaction 合并重复、过期和已删除的数据。在 RocksDB 的写入过程中,数据经过序列化后写入到WriteBuffer,WriteBuffer 写满后转换为 Immutable Memtable 结构,再通过 RocksDB 的flush 线程从内存 flush 到磁盘上;读取过程中,会先尝试从 WriteBuffer 和 Immutable Memtable 中读取数据,如果没有找到,则会查询 Block Cache,如果内存中都没有的话,则会按层级查找底层的 SST 文件,并将返回的结果所在的 Data Block 加载到 BlockCache,返回给上层应用。
zeekling
2023/01/02
1.6K0
Flink状态后端和CheckPoint 调优
tidb本周精选 2021年的第 31 周
将数据按照 key 的范围划分成大致相等的切片(下文统称为 Region),每一个切片会有多个副本(通常是 3 个),其中一个副本是 Leader,提供读写服务。
早起的鸟儿有虫吃
2021/08/13
8840
如何在Apache Flink中管理RocksDB内存大小
原文:https://www.ververica.com/blog/manage-rocksdb-memory-size-apache-flink 翻译:zhangjun,英语水平不太好,如有问题,请大家不吝赐教
大数据技术与应用实战
2020/09/15
2.1K0
如何在Apache Flink中管理RocksDB内存大小
RocksDB:高性能键值存储引擎初探
在TiDB中(TiDB是一个分布式SQL数据库,其存储引擎TiKV是一个分布式的key-value存储引擎),TiKV使用了RocksDB作为其底层存储引擎,利用RocksDB提供的键值存储与读写功能,以及LSM-tree架构来实现数据的持久化和高效读写。
公众号:码到三十五
2024/03/19
1.5K0
RocksDB:高性能键值存储引擎初探
TiDB 6.0 实战分享丨内存悲观锁原理浅析与实践
TiDB 6.0 版本针对悲观事务引入了内存悲观锁的优化,带来了明显的性能提升。本文将从最初的乐观事务到悲观事务入手;介绍 6.0 版本针对悲观锁进行优化的原理,并结合压测数据验证其带来的性能提升。
PingCAP
2022/06/15
6970
TiDB 6.0 实战分享丨内存悲观锁原理浅析与实践
AutoTiKV:基于机器学习的数据库调优
TiKV 底层使用了 RocksDB 作为存储引擎,然而 RocksDB 配置选项很多,很多情况下只能通过反复测试或者依靠经验来调优,甚至连 RocksDB 的开发者都自嘲,他们没办法弄清楚每个参数调整对性能的影响。如果有一个自动 tuning 的方案就可以大大减少调优的人力成本,同时也可能在调优的过程中,发现一些人工想不到的信息。我们从 AutoML 中得到启发,希望能用 Automated Hyper-parameter Tuning 中的一些方法来对数据库参数进行自动调优。
PingCAP
2019/10/10
7880
相关推荐
常见存储引擎_存储引擎
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验