前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TiDB OOM问题 学习笔记(纯干货)

TiDB OOM问题 学习笔记(纯干货)

作者头像
AsiaYe
发布2022-01-25 18:47:01
1.2K0
发布2022-01-25 18:47:01
举报
文章被收录于专栏:DBA随笔DBA随笔

TiDB OOM问题 学习笔记

TiDB使用过程中,OOM最常发生在tidb组件和tikv组件。

(这里我用大写TiDB代表TiDB数据库,小写的tidb代表tidb组件。下同)

今天分别来看这两个组件发生OOM的整个排查思路。

01

tidb组件OOM问题

1、如何诊断OOM?

1.1 客户端一般通过tidb来连接TiDB集群,一般OOM之后可能会出现Lost Connection to MySQL Server during query

1.2 通过日志分析

  1. dmesg -T | grep tidb-server 查看系统日志,在日志中可以发现OOM-Killer日志;
  2. tidb.log中,故障时间点存在Welcome to TiDB字样的日志,代表TiDB重启过;
  3. tidb_stderr.log通过grep可以看到runtime:out of memory或者cannot allocate memory字样

1.3 查看grafana监控

TiDB--Server---Memory Usage面板明显增高;

TiDB--Server---Uptime确认最新的tidb运行时间;

2、tidb组件OOM原因?

2.1 SQL语句的执行

2.2 Golang内存释放机制

3、OOM解决办法

3.1 处理慢SQL

慢SQL定位方法

  1. 定位内存大的SQL,并进行优化
  2. TiDB Dashboard SQL分析
  3. TiDB Server日志中的expensive Query

慢SQL优化方法

  1. SQL优化,减少非必要返回的数据量(创建索引,强制使用索引等)
  2. 减少大事务,将大事务拆分成小事务
  3. 调整tidb server的相关参数,从而限制单条SQL 内存的使用(包含 限制单条内存 mem-quota-query参数、oom-action参数;临时磁盘参数oom-use-tmp-storage、tmp-storage-path、tmp-storage-quota等)

3.2 调整Go 内存释放策略

Go语言有两种内核的内存释放策略,分别是MADV_DONTNEED和MADV_FREE,后者是前者的改版,后者释放的内存更多,但是释放的慢(惰性释放),前者释放的内存较少,但是释放的很快(积极释放)

3.3 滚动重启TiDB Server回收内存。

02

tikv组件OOM问题

1、tikv OOM对业务的影响?

1.1 tikv上请求失败造成异常退出

1.2 region leader 重新选举,影响性能

1.3 region cache重新更新,PD将最新的region leader信息更新给tidb server的region cache

2、tikv OOM诊断方法?

2.1 日志

dmesg -T | grep tikv-server 系统日志中的OOM-killer日志

tikv.log 宕机前后时间的Welcome to TIKV日志,也就意味着tikv重启了

2.2 grafana监控

tikv--Detail--Cluster--Memory查看内存使用情况(一般是先到峰值,然后迅速到0,意味着重启)

3.tikv OOM的原因?

3.1 block-cache配置不当导致OOM

3.2 Coprocessor接受大量大查询,返回的数据量很大,gRPC的发送速度跟不上Coprocessor往外输出的速度,导致数据堆积在tikv里面,内存溢出(具体是查看tikv--Detail--Coprocessor Overview --Total Response Size 监控图,是否已经大于Node_exporter--Network--Network In/Out Traffic监控图的值,如果大于,说明是这个原因)

3.3 其他进程占用太多内存

4、OOM优化方法?

4.1 storage.block-cache.capacity,这个值大概配置成总内存的45%~60%左右,tidb-4.0.13版本之后可以支持动态调整

4.2 SQL优化,根据业务逻辑和执行计划来优化SQL,尽量少查询数据,避免gRPC的发送速度跟不上Coprocessor往外输出的速度

4.3 网卡配置升级(千兆升级万兆等等)

4.4 避免其他组件和当前组件混部

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

本文分享自 DBA随笔 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档