快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → TiDB数据写满/tmp目录?你遇到过吗

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

时间:2022-09-20 07:20:38人气:作者:快盘下载我要评论

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也有一个案例,有兴趣可以看看:

相关文章

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。