61DH61DH
Home
Diary
English
Tools
Photography
Health
Tech
Home
Diary
English
Tools
Photography
Health
Tech
  • 日记

    • 前言
    • Scraper(爬虫)异常流量排查与处理记录
    • Windows MongoDB Restore 性能排查记录
    • pnpm 10 也可以管理项目指定的 pnpm 版本
    • Node.js、nvm、Corepack 与 pnpm 环境说明
    • 装修故事 3|厨房
    • 装修的故事二 · 卫生间
    • 装修的故事一 · 选柜子
    • 讨好 Google,不是一件容易的事
    • VS Code 中 Markdown 粘贴图片工作流(VuePress)
    • Best Buy 与我的电器店记忆:从 2001 到今天的一次“退货又下单”
    • 中国流量异常日记
    • 我的 iPhone 17 Pro 首日开箱记
    • Perplexity 是流氓软件吗?– 一个技术站长的实录与更正
    • 给 VuePress 添加评论系统:Waline 实战指南
    • 从“骨瘤?”到“脂肪瘤”:我的第一次手术日记
    • Coffee Sleeve 是什麼?
    • 一次 Maker 升级到 SKY 的实操:从 Coinbase 到 MetaMask,再谈钱包安全
    • Skyoo「脑力素」广告很火,但靠谱吗?
    • 回国礼物推荐:清单与避坑指南
    • 厨房装修小记:岛台移除后的地板方案
    • 苹果 2025 发布会小记
    • VuePress v2 index.scss 覆盖问题笔记
    • 康师傅酸梅汤:异乡小记
    • 升级笔记:VuePress 从 2.0.0-beta.51 到 ^2.0.0-rc.24
    • 旧日记
2026/08/29

Windows MongoDB Restore 性能排查记录

问题

Windows 每天自动 restore MongoDB 很慢。同一份约 4.8 GB、1.2 亿 documents 的 backup:

环境Restore 时间
Mac12–13 分钟
Ubuntu VPS约 47 分钟
Windows(初始)2 小时以上
Windows(最终自动任务)13–14 分钟

关键排查与结果

WSL 改为原生 PowerShell

最初经 WSL restore,怀疑 /mnt/... 访问 Windows 文件系统带来 I/O overhead。后来改为 Windows 原生 PowerShell,直接执行 scp、mongosh 和 mongorestore。

有改善,但仍然很慢;WSL 不是主要原因。

Windows Defender exclusion

为 MongoDB data、backup、log 目录添加 Defender exclusion。

效果不明显,不是主因。

MongoDB data 从 HDD 移到 NVMe

MongoDB 虽然安装在 C:,实际 dbPath 却在 H: 机械硬盘。restore 时 HDD disk utilization 接近 100%。将 data 移到 C: 的 NVMe SSD 后,restore 从 2 小时以上降至约 1 小时 40 分钟。

结论:MongoDB data 的写入位置是主要瓶颈。

Backup 不需要移到 SSD

Backup 仍在 H: HDD。曾考虑在 restore 前复制到 C: SSD,但手工运行同一 PowerShell script 后发现:backup 在 HDD、MongoDB data 在 NVMe 时,restore 只需约 12 分钟。

结论:无需移动 backup;关键是 MongoDB data 写入 NVMe。

Scheduled Task Priority

出现明显差异:

执行方式Restore 时间
直接运行 PowerShell script约 12 分钟
Task Scheduler 运行同一 script约 1 小时 40 分钟

检查 Task XML 后发现未明确设置 priority。将其设为:

<Priority>4</Priority>

并通过真实 Task Scheduler 环境测试:

Start-ScheduledTask -TaskName "..."

restore 降至 14:05。

结论:Task Scheduler 的 priority(也会影响 I/O priority)是另一个关键因素。

其他尝试

  • 检查 MongoDB Database Tools 版本、backup 文件大小、BSON 文件数量与完整性。
  • 用 mongosh --eval 做自动 verification,并比对 restore document count。
  • 尝试捕获 mongorestore 的 stderr/output。

PowerShell 处理 native command 的 quoting 与 stderr 较麻烦,且 mongorestore 的正常 progress 也会写 stderr,额外捕获容易造成误判。最后去除不必要的 verification,只以 mongorestore exit code 判断成功。

最终结果

2026-08-30 的真实 Scheduled Task 记录:

[2026-08-30 05:08:40] Dropping local swimdb...
[2026-08-30 05:08:42] swimdb dropped successfully.
[2026-08-30 05:08:42] Starting mongorestore...
[2026-08-30 05:22:10] MongoDB restore duration: 00:13:27
[2026-08-30 05:22:10] mongorestore completed successfully.
[2026-08-30 05:22:10] Restore completed successfully.
[2026-08-30 05:22:10] Total job duration: 00:22:07
  • mongorestore:13:27
  • 整个任务(含 SCP):22:07

最终方案:

  1. 将 MongoDB data 从 HDD 移到 NVMe SSD。
  2. 将 Task Scheduler priority 设为 4。
  3. Backup 继续放在 HDD。
  4. 使用原生 PowerShell,不再通过 WSL restore。

目前 Windows restore 性能已与 Mac 基本同一水平。

Last Updated: 8/30/26, 10:36 PM
Contributors: Adam C
Prev
Scraper(爬虫)异常流量排查与处理记录
Next
pnpm 10 也可以管理项目指定的 pnpm 版本