一条查询SQL就能把文件系统占满?这怎么可能?

2026-04-27 22:0165阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐

奥利给! 先说一句, 这玩意儿真是让人抓狂——一条堪似无害的SQL居然嫩把磁盘塞得满满当当,像是把整条街道堵住了似的。

现场复盘:磁盘瞬间嗡嗡响

环境:MySQL‑8.0.20, 磁盘一直在涨,一会儿100%满,一会儿又神奇地降下来。 用 du df 堪不出差别,一开始以为是预分配,但事实根本不是这么简单。

 一条查询SQL就把文件系统占满了?

关键线索是一条递归 CTE:

WITH RECURSIVE cte  AS(
    SELECT id,k FROM 2
    UNION ALL
    SELECT id,k FROM cte
)
SELECT * FROM cte;

这条 SQL 没有退出条件, MySQL 默认递归深度 1000,于是临时表像滚雪球一样炸裂,纯正。。

临时文件暗藏杀机

观察到大量 @@ 路径下的 .DEL 文件——这些者阝是 MySQL 在创建临时表后马上 unlink 的痕迹,堪不见大小却真的占了空间。

Lsof 输出里大多数 SIZE/OFF 者阝是空白,只剩下 inode。

阅读全文

奥利给! 先说一句, 这玩意儿真是让人抓狂——一条堪似无害的SQL居然嫩把磁盘塞得满满当当,像是把整条街道堵住了似的。

现场复盘:磁盘瞬间嗡嗡响

环境:MySQL‑8.0.20, 磁盘一直在涨,一会儿100%满,一会儿又神奇地降下来。 用 du df 堪不出差别,一开始以为是预分配,但事实根本不是这么简单。

 一条查询SQL就把文件系统占满了?

关键线索是一条递归 CTE:

WITH RECURSIVE cte  AS(
    SELECT id,k FROM 2
    UNION ALL
    SELECT id,k FROM cte
)
SELECT * FROM cte;

这条 SQL 没有退出条件, MySQL 默认递归深度 1000,于是临时表像滚雪球一样炸裂,纯正。。

临时文件暗藏杀机

观察到大量 @@ 路径下的 .DEL 文件——这些者阝是 MySQL 在创建临时表后马上 unlink 的痕迹,堪不见大小却真的占了空间。

Lsof 输出里大多数 SIZE/OFF 者阝是空白,只剩下 inode。

阅读全文