GreatSQL temp文件占用时长分析

GreatSQL temp文件占用时长分析

GreatSQL DBA在日常工作中可能会遇到这种情况,存在一个 InnoDB 引擎下的 temp_x.ibt 文件很大,但是却无法确定这个文件是什么时间由哪个连接建立的,难以支撑后续定位问题,今天这篇文章彻底讲明白这个问题。

现象:发现一个实例下面(4406端口对外提供服务的实例)temp文件很大,如下所示:

```Bash
-rw-r----- 1 greatsql greatsql       81920 Sep 26 23:56 temp_1.ibt
-rw-r----- 1 greatsql greatsql       81920 Sep 30 16:43 temp_10.ibt
-rw-r----- 1 greatsql greatsql       81920 Sep 26 23:56 temp_2.ibt
-rw-r----- 1 greatsql greatsql       81920 Sep 26 23:56 temp_3.ibt
-rw-r----- 1 greatsql greatsql       81920 Sep 26 23:56 temp_4.ibt
-rw-r----- 1 greatsql greatsql 18392023040 Oct  9 15:56 temp_5.ibt
-rw-r----- 1 greatsql greatsql 18417188864 Oct 11 14:51 temp_6.ibt
-rw-r----- 1 greatsql greatsql 18417188864 Oct 11 14:51 temp_7.ibt
-rw-r----- 1 greatsql greatsql 18392023040 Oct  9 15:54 temp_8.ibt
-rw-r----- 1 greatsql greatsql       81920 Sep 30 16:43 temp_9.ibt

$ cd /data/greatsql/dbdata/datanode4406/data/#innodb_temp
$ du -sm temp_6.ibt 
17565   temp_6.ibt
```

单个文件大小达到17G,而且还在持续增加。

那么,这个文件是由那个连接占用的呢?

```Bash
$ ps -ef|grep greatsql|grep 4406
greatsql   35049  33132 88 Sep26 ?        15-18:21:22 /data/greatsql/svr/greatsql/bin/greatsqld --defaults-file=/greatsql/conf/datanode4406.cnf --basedir=/greatsql/svr/greatsql --datadir=/greatsql/dbdata/datanode4406/data --plugin-dir=/greatsql/svr/greatsql/lib/plugin --log-error=/greatsql/logs/error4406.log --pid-file=/greatsql/dbdata/datanode4406/data/greatsql.pid --socket=/greatsql/dbdata/datanode4406/data/greatsql.sock --port=4406
```

通过上述命令可以得到GreatSQL的进程ID。

GreatSQL数据库的进程为35049接下来通过命令查看这个进程打开的这个连接的文件名,lsof -p pid|grep port或者lsof 目录名称,可以得到这个进程在在这个端口上的连接的文件编号:

```Bash
$ lsof /data/greatsql/dbdata/datanode4406/data/#innodb_temp/temp_6.ibt 
COMMAND    PID    USER   FD   TYPE DEVICE    SIZE/OFF        NODE NAME
greatsqld 35049 greatsql  282uW  REG   8,17 18417188864 16642999840 /data/greatsql/dbdata/datanode4406/data/#innodb_temp/temp_6.ibt
```

/proc/[pid]/fd 是一个目录,包含进程打开文件的情况,大家注意到 282uW 这个值,其中数字部分代表fdid,这个里面282就是代表fdid,然后执行下面的命令:

```Bash
$ ll /proc/35049/fd/282
lrwx------ 1 greatsql greatsql 64 Sep 26 23:57 /proc/35049/fd/282 -> /data/greatsql/dbdata/datanode4406/data/#innodb_temp/temp_6.ibt
```

这样就得到连接建立这个文件的时间了,通过这个方法判断是否为长期不释放的连接,然后通过数据库的information_schema.innodb_session_temp_tablespaces,找到连接会话ID,它与information_schema.processlistID是一一对应关系,从而进行下一步研判和深度分析处理,异常的长连接可以kill处理,如下图 KILL 907即可。

```SQL
greatsql> SELECT * FROM information_schema.innodb_session_temp_tablespaces ;
+---------+------------+----------------------------+-------------+----------+-----------+
| ID      | SPACE      | PATH                       | SIZE        | STATE    | PURPOSE   |
+---------+------------+----------------------------+-------------+----------+-----------+
|   29356 | 4243767288 | ./#innodb_temp/temp_8.ibt  | 18392023040 | ACTIVE   | INTRINSIC |
|     473 | 4243767285 | ./#innodb_temp/temp_5.ibt  | 18392023040 | ACTIVE   | INTRINSIC |
|     907 | 4243767286 | ./#innodb_temp/temp_6.ibt  | 18417188864 | ACTIVE   | INTRINSIC |
|     501 | 4243767287 | ./#innodb_temp/temp_7.ibt  | 18417188864 | ACTIVE   | INTRINSIC |
| 1798928 | 4243767284 | ./#innodb_temp/temp_4.ibt  |      245760 | ACTIVE   | INTRINSIC |
|       0 | 4243767281 | ./#innodb_temp/temp_1.ibt  |       81920 | INACTIVE | NONE      |
|       0 | 4243767282 | ./#innodb_temp/temp_2.ibt  |       81920 | INACTIVE | NONE      |
|       0 | 4243767290 | ./#innodb_temp/temp_10.ibt |       81920 | INACTIVE | NONE      |
|       0 | 4243767289 | ./#innodb_temp/temp_9.ibt  |       81920 | INACTIVE | NONE      |
|       0 | 4243767283 | ./#innodb_temp/temp_3.ibt  |       81920 | INACTIVE | NONE      |
+---------+------------+----------------------------+-------------+----------+-----------+
10 rows in set (0.00 sec)

greatsql>  KILL 907
Query OK, 0 rows affected (0.00 sec)
```

感谢大家观看,不足之处还请指正。


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

image-20221030163217640

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/5662.html

(0)
LomuLomu
上一篇 2025 年 1 月 10 日
下一篇 2025 年 1 月 10 日

相关推荐

  • 一文搞懂架构设计的衡量标准:功能性、可用性、性能、可扩展性、安全性、协作效率、复杂度、成本效益

    大家好,我是汤师爷~ 架构设计的首要目标是服务于业务需求。因此,我们不应该盲目追求所谓的”最厉害的”架构,而应该致力于寻找最适合当前业务环境和未来发展需求的架构方案。 衡量架构的合理性是一个复杂的过程,需要从多个角度进行全面评估。主要可以从以下视角进行分析: 功能需求视角:评估架构是否有效支撑当前业务需求,并具有充分的灵活性以适应未来业务发展。 非功能需求视…

    未分类 2025 年 1 月 15 日
    39700
  • 使用Docker部署的基于binlog实现Mysql8

    概念 MySQL 基于 Binlog 的主从复制(Master-Slave Replication)是 MySQL 数据库中实现数据复制的一种机制。在这种复制模式下,主库(Master)记录所有对数据库的修改操作(如 INSERT、UPDATE、DELETE 等)到 二进制日志(Binlog) ,从库(Slave)则读取这些日志并执行相同的操作,从而保持与主…

    未分类 2025 年 1 月 12 日
    41600
  • (2025自测有效!)全网最好的python配置教程【非常非常适合小白】

    前几天我的电脑刚刚重装,把python重新配置了一下。 1.Python环境部署Python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Python官网:https://www.python.org/ 进入官网在导航栏选择Dowmloads,选择所使用的系统(以Windows为例) 进入Windows下载页之后选择需要下载的版…

    2025 年 1 月 12 日
    35100
  • 《动态演进架构(第二版)》电子版获取指南

    书籍概要 这本专业著作系统阐述了架构适应性评估体系、智能化架构管理方案以及数据动态演进的前沿方法与实践经验。全书采用三模块结构:首模块着重解析动态架构的核心机制——详细说明开发团队如何运用技术手段构建适应性评估模型、自动化部署流程等现代化软件项目管理工具;次模块聚焦架构模式与设计准则,深入探讨组件耦合度、功能复用性等关键要素,为构建可持续优化的系统架构提供专…

    2025 年 5 月 14 日
    8300
  • Postman安装及汉化操作全解(含图文步骤)

    前言 Postman 是一款功能强大的 API 测试工具,深受开发者喜爱。然而,原版 Postman 是英文界面,对于习惯中文的用户可能不够友好。本教程详细介绍如何下载安装 Postman 并成功实现汉化,适合零基础用户。 一、下载安装包 首先,获取 Postman 的安装包及对应汉化包:👉 点击获取 Postman 安装及汉化包 ⚠️ 注意事项: 1. P…

    2025 年 1 月 6 日
    53500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信