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/5950.html

(0)
LomuLomu
上一篇 2025 年 1 月 12 日 上午5:46
下一篇 2025 年 1 月 12 日 上午6:46

相关推荐

  • 新版 Cursor 把其他 AI 编程工具按在地上摩擦了!

    大家好,我是汤师爷~ AI编程助手Cursor背后的Anysphere公司刚刚完成了1亿美元的B轮融资,估值直接飙升至26亿美元。 四个月前,这家公司刚拿下6000万美元,估值还只有4亿美元。如今,增长6.5倍,这速度,简直让人怀疑开挂了。 Anysphere不仅融资拿到手软,收入增长更是逆天。 公司从4月的年收入400万美元,短短六个月后,10月的月收入竟…

    2025 年 1 月 16 日
    59100
  • JDK、IDEA安装教程 IDEA安装2023年10月 最新最详细!免费、亲测成功!!!

    系列文章目录(Intellij IDEA2023年10月 最新教程) Java学习之IDEA的安装教程和使用 以下是第一章的内容:IntelliJ IDEA安装教程 文章目录 前言 准备工作 步骤(敲详细!!!) 前言 IDEA的安装是Java课程的入门,本人台式机于2023年7月份进行了系统重装,恰巧最近需要重新安装IDEA进行使用,借此机会给同学们分享我…

    未分类 2025 年 5 月 13 日
    46300
  • 【GreatSQL优化器-10】find_best_ref

    【GreatSQL优化器-10】find_best_ref 一、find_best_ref介绍 GreatSQL的优化器对于join的表需要根据行数和cost来确定最后哪张表先执行哪张表后执行,这里面就涉及到预估满足条件的表数据,在keyuse_array数组有值的情况下,会用find_best_ref函数来通过索引进行cost和rows的估计,并且会找出最…

    2025 年 1 月 13 日
    53700
  • 微软开源!Office 文档轻松转 Markdown!

    大家好,我是 Java陈序员。 今天,给大家介绍一款微软开源的文档转 Markdown 工具。 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 MarkItDown —— 微软开源的 Python 工具,能够将多种常见的文件格式(如 PDF、PowerPoint、Word、Excel、图像、音频…

    2025 年 1 月 10 日
    57400
  • 2025新春源码免费送

    我们常常在日常生活中感到时间过得异常缓慢,仿佛未来遥不可及。然而,当我们回过头去审视过去,才发现时间早已悄然溜走,许多曾经等待的日子已经过去。时间总是在不经意间流逝,让人意识到它的宝贵和不可逆转。 尽管如此,我们依然应对未来保持从容的态度。生活充满了无数的可能性,未来依然充满了希望与机会。无论眼前的路看似如何曲折,抑或我们面临的挑战有多大,始终相信自己能够把…

    2025 年 1 月 10 日
    46800

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信