网易首页 > 网易号 > 正文 申请入驻

Laravel Telescope清数据慢?作者实测7400倍提速方案

0
分享至

一位开发者为了清理日志数据库,亲手往MySQL里灌了100万条记录,然后发现官方命令慢得离谱。他写了个替代方案,现在被下载了1000次——这个数字背后藏着一个关于"删除"的经典陷阱。

从个人痛点到千次安装


事情始于作者对Laravel Telescope的不满。这个官方调试工具会吞下海量日志,而清理命令telescope:clear执行起来像蜗牛爬。他先写了个小工具包laravel-telescope-flusher扔到Packagist上,最近安装量破了1000。

但作者觉得光说"快"不够,得拿数据说话。于是他搭了个干净环境:MySQL 8.0跑在Docker里,默认配置,零调优。种子数据精确到100万条telescope_entries,每条塞了约2KB的JSON内容;300万条telescope_entries_tags,外键带级联删除;再加50条监控记录。

初始状态完全一致:

• telescope_entries:100万行,逻辑大小2.33 GB,.ibd文件2.4 GB
• telescope_entries_tags:300万行,逻辑大小672 MB,.ibd文件688 MB
• telescope_monitoring:50行,忽略不计
• 总计:约400万行数据,3.1 GB物理文件

测试对象三个:官方telescope:cleartelescope:prune --hours=24,以及他的telescope:flush

官方命令的致命循环

作者扒了源码,找到性能杀手的第一层——一个朴素的do-while循环:

public function clear()do {$deleted = $this->table('telescope_entries')->take($this->chunkSize)->delete();} while ($deleted !== 0);// 对telescope_monitoring重复同样操作

chunkSize硬编码为1000。100万行数据,意味着1000次往返数据库的DELETE语句。每次删除都要写redo log、undo log、double-write buffer,InnoDB的事务开销被放大千倍。

更隐蔽的是第二层杀手,作者承认第一次写文章时完全漏掉了:telescope_entries_tags表的外键约束。

这张表在entry_uuid上有外键,且声明了ON DELETE CASCADE。平均每条entry带3个tag,所以每删1条父记录,MySQL默默追加3条子记录删除。100万次父删除,触发300万次额外的级联删除——而那个循环对此一无所知,继续按部就班地 chunk、chunk、chunk。

telescope:prune --hours=24本质是同个循环加了WHERE时间过滤。作者没跑完测试,因为"形状已经清楚了":有WHERE还是循环,有循环就有千次往返,有外键就有级联爆炸。

磁盘空间的幻觉

执行完telescope:clear后,information_schema.tables显示数据长度接近零。看起来清干净了?作者用ls -lah戳穿真相:

.ibd文件纹丝不动,还是2.4 GB和688 MB。

这是InnoDB的古老行为:DELETE只标记页为可复用,不会把空间还给操作系统。要真正缩文件,得跑OPTIMIZE TABLE(重建表)或者ALTER TABLE ... ENGINE=InnoDBtelescope:clear两个都不做,于是开发者的硬盘持续肿胀。

作者把测试脚本开源在bench/目录,"你自己跑一遍"。

数字说话:7400倍的差距

结果对比触目惊心。作者没给具体秒数,但留下了关键比例:约7400倍更快,且3 GB磁盘空间真正归还

两边跑完,information_schema报告的大小都一样——这就是陷阱。只有直接看.ibd文件才能知道谁真的释放了空间。

作者顺带提了一句:prune --hours=0clear几乎 identical,他没跑完。言下之意,想靠prune清光数据的人,踩的是同一个坑。

技术选择的缩影

这个案例像一面镜子,照出框架工具的设计取舍。Telescope的清理命令优先考虑"安全":小批量删除避免锁表、级联外键保证引用完整、不碰表结构以防意外。这些选择在生产环境有其道理,但在开发环境就成了负担——尤其是当开发者只想快速重置状态、回收磁盘时。

作者的替代方案telescope:flush走了另一条路:直接操作表结构,用TRUNCATE或DROP+重建绕过循环删除,自然也就没有级联删除的开销,同时让InnoDB真正释放文件空间。代价是更激进的锁和短暂不可用,但对开发环境完全可接受。

1000次安装说明这不是一个人的怪癖。Laravel生态里大量开发者被Telescope的日志膨胀困扰过,而官方命令的"慢"和"假清理"足够反直觉,以至于需要一个社区方案来填补。

更深层的问题是:为什么框架不内置两种模式?--force--dev开关并不复杂。或许Telescope团队认为日志清理属于边缘场景,不值得增加复杂度;或许他们低估了开发环境下数据量的膨胀速度。无论哪种,社区用1000次下载投了票。

MySQL的InnoDB存储引擎在这里也扮演了沉默的共谋者。它的空间回收机制对新手足够晦涩——DELETE后表"看起来"空了,文件却占着地盘。作者特意强调ls -lahinformation_schema的落差,就是在戳这个认知黑洞。很多开发者可能跑了无数次telescope:clear,从未发现硬盘被悄悄吃空。

这个测试的严谨性也值得注意:Docker环境保证可复现,百万级数据量贴近真实压力场景,外键级联还原了生产表结构。作者甚至开源了bench脚本,把验证权交给读者。在技术写作普遍靠"感觉"和"应该"的行业里,这种用数字和代码说话的风格本身就在建立信任。

7400倍不是魔法,是算法复杂度的胜利:O(n)的循环删除对O(1)的表级操作,加上对存储引擎行为的准确理解。这个差距在数据量小时不明显,百万级开始狰狞,千万级将彻底不可用。Telescope的设计或许从未预期单表百万条调试日志,但现代应用的观测数据膨胀速度,显然跑在了框架前面。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
斯基拉:比萨决定700万买断阿金桑米罗,但国米准备800万回购

斯基拉:比萨决定700万买断阿金桑米罗,但国米准备800万回购

懂球帝
2026-05-03 17:42:22
他的黑料又被韩国网友翻出来了!

他的黑料又被韩国网友翻出来了!

奋斗在韩国
2026-05-03 16:48:33
河南三门峡足疗店起火6人死亡!负责人被扒,知情者暗示事发原因

河南三门峡足疗店起火6人死亡!负责人被扒,知情者暗示事发原因

老猫观点
2026-05-03 08:46:08
下手真狠,里夫斯次轮出战成迷!东契奇次轮G4复出

下手真狠,里夫斯次轮出战成迷!东契奇次轮G4复出

体育新角度
2026-05-03 16:46:08
罗翔:如果一个人突然努力工作,业余时间开始学习,不再参加社交活动,那么,身边的人可能不仅不会帮他,还会拉他下来,原因就一个!

罗翔:如果一个人突然努力工作,业余时间开始学习,不再参加社交活动,那么,身边的人可能不仅不会帮他,还会拉他下来,原因就一个!

谭老师地理大课堂
2026-04-22 00:03:57
8胜1负魔咒被破!陈雨菲0-2崩盘,国羽尤伯杯决赛1-2 陷绝境

8胜1负魔咒被破!陈雨菲0-2崩盘,国羽尤伯杯决赛1-2 陷绝境

小兰看体育
2026-05-03 19:13:31
警察绝对不能插手的5件事,真不能管,否则违法!

警察绝对不能插手的5件事,真不能管,否则违法!

细说职场
2026-04-20 15:52:21
终于,一位接地气的专家说了大实话:中国老百姓的负担太重了

终于,一位接地气的专家说了大实话:中国老百姓的负担太重了

巢客HOME
2026-04-28 05:25:03
日本高层抵华后傻眼了!中方没安排一位要员!高市只能亲自搬救兵

日本高层抵华后傻眼了!中方没安排一位要员!高市只能亲自搬救兵

基斯默默
2026-05-03 13:34:27
赖清德今窜访斯威士兰,黄国昌不装了,国民党献媚,大陆回应亮了

赖清德今窜访斯威士兰,黄国昌不装了,国民党献媚,大陆回应亮了

共工之锚
2026-05-03 00:12:33
富豪“不老药”不能打了?最严细胞监管落地

富豪“不老药”不能打了?最严细胞监管落地

经济观察报
2026-05-02 10:32:44
西班牙25岁芭蕾舞演员赴日旅游,摸完奈良鹿后发烧呕吐半年,确诊莱姆病,曾前往多个国家求医,如今几乎无法下床

西班牙25岁芭蕾舞演员赴日旅游,摸完奈良鹿后发烧呕吐半年,确诊莱姆病,曾前往多个国家求医,如今几乎无法下床

大象新闻
2026-05-03 14:46:04
樊振东为什么决绝续约,小胖给出8个字回应,德甲冠军抢人失败

樊振东为什么决绝续约,小胖给出8个字回应,德甲冠军抢人失败

以茶带书
2026-03-17 20:52:47
赵睿、曾凡博出战!北京季后赛12人大名单确定,终于等到最强阵容

赵睿、曾凡博出战!北京季后赛12人大名单确定,终于等到最强阵容

篮球大陆
2026-05-03 18:40:30
以色列终究没要那些血粮!参联会主席承认:俄罗斯帮伊朗对抗美军

以色列终究没要那些血粮!参联会主席承认:俄罗斯帮伊朗对抗美军

鹰眼Defence
2026-05-01 16:43:31
我的命,自己救!从中年“一身病”到74岁无“三高”,他坚持了这3件事

我的命,自己救!从中年“一身病”到74岁无“三高”,他坚持了这3件事

人民日报健康客户端
2026-04-27 20:51:18
事实证明,61岁重获新生的广东主持人陈维聪,已经走入另一条道路

事实证明,61岁重获新生的广东主持人陈维聪,已经走入另一条道路

小噎论事
2026-05-03 13:44:43
前湖人中锋炮轰詹姆斯:难进历史前十,国王错失三大巨星!

前湖人中锋炮轰詹姆斯:难进历史前十,国王错失三大巨星!

舞指如飞
2026-05-03 19:02:14
广东老汉囚禁50名女子于鱼塘,6年后才被发现,结局如何

广东老汉囚禁50名女子于鱼塘,6年后才被发现,结局如何

莫地方
2026-04-28 01:40:03
我勒个去!一个全明星中锋,拿着2000万年薪,季后赛看管饮水机

我勒个去!一个全明星中锋,拿着2000万年薪,季后赛看管饮水机

球毛鬼胎
2026-05-03 15:56:20
2026-05-03 19:39:00
硅屿手记
硅屿手记
有态度网友ytd
3391文章数 17关注度
往期回顾 全部

科技要闻

库克罕见"拒答"!苹果正被AI供应链卡脖子

头条要闻

课堂上弹唱《无地自容》走红的副教授病逝 年仅44岁

头条要闻

课堂上弹唱《无地自容》走红的副教授病逝 年仅44岁

体育要闻

裁判准备下班,结果吴宜泽进了决赛

娱乐要闻

蔡卓妍婚后首现身 戴结婚戒指笑容不断

财经要闻

后巴菲特时代,首场股东会透露了啥

汽车要闻

同比大涨190% 方程豹4月销量29138台

态度原创

健康
数码
手机
亲子
公开课

干细胞治烧烫伤面临这些“瓶颈”

数码要闻

华为5A最新支持设备清单公布,含Pura X Max、畅享90系列等

手机要闻

小米最强自研芯片来了!核心规格已清晰,不止手机还要上多终端

亲子要闻

曝光毒绘本:萨琪想要个小宝宝,明显教唆儿童学坏,家长朋友避坑

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版