所以我的数据库冻结了,甚至在重启后它也不能平滑(它平滑了几秒钟,然后又停滞了)。
iotop报告高写入( 300~ 500mb/s的峰值),我已经跟踪到写入/tmp/的系统调用。现在有一些以#sql_386a_0.MAI格式写入的临时表,但我感兴趣的是以/tmp/MY*格式从未完成写入的其他文件,例如:
这是一个从子线程"write(248,"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\00022"...,32768)“(以32或64 kb块编写)的系统调用
这些文件本身并不存在于我所能收集到的文件夹中,但是在夜间导入数据之后,系统会挂起一两个小时,并且具有极高的写入,甚至不重新启动服务器也有帮助
所以我的问题是这些文件是什么
发布于 2021-10-14 17:54:35
我发现它们是filesort文件;如果sort_buffer_size增加,这些文件就会停止。
File filesort文件是mariadb在执行ORDER BY查询时创建的文件,该查询占用的内存量大于sort_buffer_size设置的内存量。如果你不更改mariadb配置中的默认tmpdir设置,通常是/tmp目录(在不同的linux发行版上可能会有所不同,我运行debian)。
有3种文件,一种是以#开头的临时表,一种是filesort文件,另一种是以"ib“开头的文件。不过,我不知道它们是什么。
如果你的查询(像我的一样)是数百万行的大集合,需要复杂的连接和多顺序排序,那么这些文件写入可能会失控,问题是不是每个调试工具都能看到你正在写入大量数据,因为这些文件是使用unix的技巧编写的:
文件被创建,然后立即解除链接(类似于删除),但是进程(在本例中是mariadb)仍然有一个描述符/文件句柄,并且可以对其进行读/写
我的服务器上的问题是,ssd速度足够快,一开始没有引起关注,但当vm开始因为吞吐量而对ssd进行硬性节流时,服务器几乎陷入停顿,所以是的……
https://stackoverflow.com/questions/69571388
复制相似问题