首页 > 数据库 >GreatSQL temp文件占用时长分析

GreatSQL temp文件占用时长分析

时间:2025-01-03 10:10:26浏览次数:1  
标签:temp data 占用 GreatSQL greatsql innodb ibt

GreatSQL temp文件占用时长分析

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

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

-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,而且还在持续增加。

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

$ 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 目录名称,可以得到这个进程在在这个端口上的连接的文件编号:

$ 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,然后执行下面的命令:

$ 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即可。

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

标签:temp,data,占用,GreatSQL,greatsql,innodb,ibt
From: https://www.cnblogs.com/greatsql/p/18649449

相关文章

  • DefaultSqlSession 和 SqlSessionTemplate 的线程安全问题
    总结自:DefaultSqlSession和SqlSessionTemplate的线程安全问题、MyBatis与Spring整合时是如何解决SqlSession线程不安全的问题的DefaultSqlSession原因1:Connection本身是线程不安全的。如果多个线程获取到同一个Connection进行数据库操作,一个线程正在更新数据,而另......
  • 记 Redisson 报错 attempt to unlock lock, not locked by current thread
    原文:记一次Redisson线上问题→你怎么能释放别人的锁错误信息:attempttounlocklock,notlockedbycurrentthreadbynodeid:b9df1975-5595-42eb-beae-bdc5d67bce49thread-id:52查看日志,找到对应的堆栈信息:Exceptioninthread"thread0"java.lang.IllegalMoni......
  • 使用few-shot Prompt template让大模型更懂你
    在本教程中,我们将学习如何创建一个使用少量示例的提示模板(Prompttemplate)。少量示例的提示模板可以从一组示例(examples)或一个示例选择器(Exampleselector)对象构建。 使用示例集首先,创建一个少量示例的列表。每个示例应该是一个字典,键是输入变量,值是这些输入变量的值。......
  • 服务器如何查找并清理占用大量空间的文件?
    问题描述:用户在使用虚拟主机时发现磁盘空间已接近或超过限额,导致网站运行出现问题。通过FTP工具登录后,发现某些目录下的文件数量众多且占用大量存储空间。如何高效地定位这些大文件,并采取有效措施进行清理以恢复正常的网站运作?解决方案:当遇到虚拟主机磁盘空间不足的问题时,可以......
  • nice du更好的du分析文件占用工具ncdu
    服务器文件满了,之前都是用du-sh/*一层一层分析的 今天找更好的可视化的发现了这个ncdu(NCursesDiskUsage)是一个基于文本的磁盘使用分析工具,提供了更友好的用户界面。你可以通过以下命令安装它:在Debian/Ubuntu上:bashsudoaptinstallncdu在CentOS/RHEL上:bash......
  • WPF ComboBox multiselect via ControlTemplate of ComboxItem
    <Windowx:Class="WpfApp99.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • WPF DatagridRow style with ControlTemplate
    <Windowx:Class="WpfApp100.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • 【GreatSQL优化器-08】statistics和index dives
    【GreatSQL优化器-08】statistics和indexdives一、statistics和index_dives介绍GreatSQL的优化器对于查询条件带有范围的情况,需要根据mmtree来估计该范围内大概有多少行,然后以此来计算cost。对于等号条件,给出了两种方法来估计对应行数--Statistics和indexdives,前者不精确后......
  • 端口占用处理
    端口占用处理项目启动报端口正在使用09:25:12.866[restartedMain]ERRORorg.springframework.boot.diagnostics.LoggingFailureAnalysisReporter:***************************APPLICATIONFAILEDTOSTART***************************Description:Webserverfaile......
  • 国标GB28181软件LiteGBS解码器关联输出口,提示“被占用/已被关联”怎么办?
    在视频监控管理领域,尤其是采用国标GB28181协议的系统中,LiteGBS软件以其卓越的性能和兼容性受到广泛青睐。然而,用户在使用LiteGBS软件进行解码器关联输出口配置时,可能会遇到提示“被占用/已被关联”的问题。这种情况不仅影响了监控系统的效能,也可能对安全管理造成隐患。为了确保视......