前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TiDB数据写满/tmp目录?你遇到过吗

TiDB数据写满/tmp目录?你遇到过吗

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

TiDB数据写满磁盘?你遇到过吗

今天在线上运维过程中,遇到了一个TiDB写满操作系统磁盘的问题,最终通过查阅官方文档解决,这里记录一下。

01

背景

背景介绍

早晨发现一例磁盘报警,登录到对应服务器上,看到如下的信息:

[root@ /data1]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        30G  1.6G   27G   6% /
devtmpfs         32G     0   32G   0% /dev
tmpfs            32G   12K   32G   1% /dev/shm
tmpfs            32G  3.5M   32G   1% /run
tmpfs            32G     0   32G   0% /sys/fs/cgroup
/dev/sda2        30G  8.3G   20G  30% /usr
/dev/sdb1       3.9T  343G  3.4T  10% /data1
/dev/sda5        30G   28G     0 100% /tmp

可以看到,/tmp目录被写满了。进入tmp目录,发现有这么一个文件,占用磁盘大小28G,具体信息如下:

[root@ /tmp]# ll

drwxr-xr-x  3 tidb tidb  4096 Mar 16 10:16 1092_tidb

看到这个文件名字,包含1092和tidb字样,首先确定是tidb相关的,而且生成时间也是今天,说明是刚刚还有过写入。那么1092是什么意思呢?我们稍后解答

进入这个目录最底层,发现如下文件:

[root@ /tmp/1092_tidb/MC4wLjAuMDo0MDA1LzAuMC4wLjA6MTAwODE=/tmp-storage]# ll
-rw------- 1 tidb tidb 1202978816 Mar 16 10:44 chunk.ListInDisk793242424
-rw------- 1 tidb tidb 1202716672 Mar 16 10:17 chunk.ListInDisk799449690
-rw------- 1 tidb tidb 1202978816 Mar 16 10:52 chunk.ListInDisk944002028
-rw------- 1 tidb tidb 1202978816 Mar 16 10:23 chunk.ListInDisk952535883
-rw------- 1 tidb tidb 1202978816 Mar 16 10:31 chunk.ListInDisk955718575
.....

看起来像是一些数据块文件。

以上是遇到的问题现象。现在我们要解决两个问题:

1、为什么/tmp磁盘会满?

2、这个1092_tidb是什么意思?

02

排查思路

本身对这个tmp目录比较敏感,就看了下TiDB的参数配置,查了查有没有对应的临时文件目录,结果还真查到了。

官网链接如下:https://docs.pingcap.com/zh/tidb/v4.0/tidb-configuration-file

可以看到如下内容:

oom-use-tmp-storage

  • 设置是否在单条 SQL 语句的内存使用超出 mem-quota-query 限制时为某些算子启用临时磁盘。
  • 默认值:true

tmp-storage-path

  • 单条 SQL 语句的内存使用超出 mem-quota-query 限制时,某些算子的临时磁盘存储位置。
  • 默认值:<操作系统临时文件夹>/<操作系统用户ID>_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage。
  • 其中 MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA= 是对 <host>:<port>/<statusHost>:<statusPort> 进行 Base64 编码的输出结果。
  • 此配置仅在 oom-use-tmp-storage 为 true 时有效。

通过上面2个参数的描述,我们知道了问题的答案。

为什么/tmp磁盘会满?

TiDB在内存不足以支撑某些查询的时候,会使用操作系统的临时目录,也就是/tmp目录,作为某些查询OOM之后的临时磁盘存储位置,/tmp目录下,紧跟着是操作系统用户id和"_tidb"的组合,而最后的一长串字符则是base64编码结果。

1092_tidb是什么意思?

由于我们的路径是1092_tidb,那我们现在看下tidb用户的用户id:

[root@ ]# cat /etc/passwd|grep tidb
tidb:x:1092:1093::/usr/home/tidb:/bin/bash
.....

这里可以看到,tidb的用户id确实是1092,结合上面的描述,我们知道1092_tidb就是这个临时文件的目录,而1092是tidb用户的id值。

同时,由于这个参数tmp-storage-path配置的路径,只有在oom-use-tmp-storage参数为true的时候,才生效。而我们线上的环境没有配置过这个参数,自然采用的是默认值,所以就写入了/tmp目录,造成磁盘写满。

03

解决办法

这个问题的解决方案,大概分为下面几个步骤吧:

1、编辑配置文件

利用tiup cluster edit-config cluster_name命令,动态编辑集群的配置文件,在server_configs.tidb这个组增加如下配置即可

server_configs:

tidb:

binlog.enable: false

binlog.ignore-error: false

enable-telemetry: false

log.slow-threshold: 300

tmp-storage-path: /data1/tidb-data

可以看到,临时目录我们改为了挂载盘/data1/tidb-data目录,保存退出之后,TiDB给出了后续的提示命令,如下:

Applied successfully, please use `tiup cluster reload tidb1-comment [-N <nodes>] [-R <roles>]` to reload config.

2、执行提示的命令

tiup cluster reload cluster_name -R tidb

tiup工具会自动帮我们滚动升级所有的tidb组件,滚动升级的过程中,可以看到如下更新字样:

Upgrading component tidb

Restarting instance 10.xx.xx.69:4005

Restart instance 10.xx.xx.69:4005 success

Restarting instance 10.xx.xx.62:4005

Restart instance 10.xx.xx.62:4005 success

Restarting instance 10.xx.xx.145:4005

Restart instance 10.xx.xx.145:4005 success

Reloaded cluster `cluster-name` successfully

3、检查新目录下的文件

可以看到,进入/data1/tidb-data目录之后,新的临时文件已经在当前目录生成。

[root@ /data1/tidb-data]# du -sh *
12K     1092_tidb
.....

总结:

1、问题的发生都是有原因的,有些默认参数的配置其实并不是最合理的,需要结合具体场景去配置;

2、遇到问题,先查官方文档,官方文档上可能解决80%的问题,如果不能,可以去向论坛求救。

类似的临时文件参数问题,MySQL也有一个案例,有兴趣可以看看:

线上MySQL复制错误排查一例

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

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

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

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

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