You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 大量Telescope entries占空间,常规清理命令超时如何解决?

Laravel Telescope超大数据量清理方案

1. 数据库层面分批删除(最高效,适合千万级数据量)

这是处理千万级Telescope数据最快的方式,避免Eloquent批量操作带来的性能开销和锁表风险:

  • 优先选择分批增量删除,不影响业务运行:
    先确定需要保留的时间边界,比如保留最近7天的记录,之后每次删除固定条数,重复执行直到超期数据清理完成,MySQL示例如下:
    -- 计算清理截止时间
    SELECT DATE_SUB(NOW(), INTERVAL 7 DAY) AS cutoff_time;
    -- 每次删除10000条超期数据,可根据数据库性能调整单次删除条数
    DELETE FROM telescope_entries WHERE created_at < '替换为上面查到的截止时间' LIMIT 10000;
    
    清理完成主表后,记得清理关联表的冗余数据:
    DELETE FROM telescope_entries_tags WHERE entry_id NOT IN (SELECT id FROM telescope_entries);
    
  • 如果不需要保留任何历史Telescope数据,直接执行 truncate 操作,秒级完成清理:
    TRUNCATE TABLE telescope_entries;
    TRUNCATE TABLE telescope_entries_tags;
    TRUNCATE TABLE telescope_monitoring;
    

注意:所有删除操作尽量在业务低峰期执行,避免锁表影响正常业务请求。

2. 调整Artisan命令参数适配大数据量

如果不方便直接操作数据库,可以通过调整PHP运行参数避免命令超时:

  • 执行裁剪命令时关闭CLI超时限制,同时调高内存上限:
    php -d max_execution_time=0 -d memory_limit=-1 artisan telescope:prune
    
  • 如果需要清空所有数据,执行调整参数后的clear命令:
    php -d max_execution_time=0 -d memory_limit=-1 artisan telescope:clear
    

3. 后续避免数据再次堆积

  • 打开config/telescope.php配置文件,设置自动裁剪保留时长,比如仅保留2天的记录:
    'prune' => [
        'hours' => 48,
    ],
    
  • 在Laravel调度任务app/Console/Kernel.php中注册定时裁剪任务,每日自动执行:
    $schedule->command('telescope:prune')->daily();
    
  • 生产环境可按需配置Telescope采样率,仅记录部分请求数据,从源头减少数据生成量。

内容的提问来源于stack exchange,提问作者P7rck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:45:09