navicat 不支持内置资源优先级调控,需通过系统命令启动时降权:windows 用 start /low,macos/linux 用 nice -n 19 ionice -c 2 -n 7;禁用 mysqldump/pg_dump 默认压缩,错峰调度任务,并监控进程避免僵死。
navicat 自身不提供 cpu、内存或 io 优先级控制界面,所有备份任务默认以系统默认优先级启动,高负载时必然抢资源。必须绕过 gui,用系统级命令在进程启动瞬间强制降权。
Windows 下用 start /low 启动备份任务
Navicat 内置计划任务调起的 navicat.exe 进程无法被事后降权,必须在启动时指定。直接在任务计划程序中新建任务,程序填 cmd.exe,参数写:
/c start /low "" "C:\Program Files\PremiumSoft\Navicat Premium 16\navicat.exe" --run-task "D:\navicat\tasks\daily_backup.ntb"
-
start /low作用于整个进程树,包括它调用的mysqldump子进程 - 双引号空字符串
""是窗口标题占位符,缺了会导致命令解析失败 -
--run-task后必须是已导出的.ntb文件路径,不是 GUI 里显示的任务名称 - 别用
start /min—— 最小化不等于低优先级,CPU 占用照旧
macOS/Linux 下组合 nice 和 ionice 控制双维度资源
仅 nice -n 19 只压 CPU,磁盘 IO 仍可能打满,尤其在机械盘或 NFS 上拖慢其他服务。必须叠加 ionice:
nice -n 19 ionice -c 2 -n 7 /Applications/Navicat\ Premium.app/Contents/MacOS/Navicat\ Premium --run-task "/Users/me/Backups/daily.ncx"
-
-c 2表示 best-effort 类别,-n 7是该类别下最低调度等级(0 最高,7 最低) - Linux 用户确认内核支持
ionice:ionice -c 3 -n 0 true不报错即 OK;macOS 无ionice,改用renice+launchctl limit - 如果备份路径挂载自网络存储,
ionice效果有限,此时应优先考虑分时段错峰
禁用 mysqldump/pg_dump 默认压缩,把压缩逻辑剥离到独立阶段
Navicat 调用 mysqldump 时若启用 --compress(MySQL 默认开),或 pg_dump -Z 9(PostgreSQL 默认),压缩会吃光单核 CPU,且无法中断。这不是 Navicat 的错,是底层工具行为。
- 手动执行时加
--skip-compress(MySQL)或-Z 1(PostgreSQL),或直接去掉压缩参数 - 后续用
gzip -1 backup.sql单独跑,可随时kill,CPU 占用可控 - Navicat GUI 里找不到这个开关,必须弃用图形界面,改用脚本调用原生命令
- 大表导出前先测扫描速度:
SELECT COUNT(*) FROM huge_table响应 >2s,说明 I/O 或索引已成瓶颈,此时强行压缩只会雪上加霜
多个备份任务必须错开触发时间,不能只靠降优先级
两个 start /low 进程在同一秒启动,照样会同时争抢磁盘队列和 CPU 时间片。降优 ≠ 隔离。
- 避免整点触发:日志库设为
02:13,报表库设为02:27,避开其他系统任务高峰 - PowerShell 调度脚本中加检查:
Get-Process -Name navicat* | Where-Object {$_.StartTime -gt (Get-Date).AddMinutes(-5)},发现已有运行中实例则跳过本次 - Linux cron 中每个任务加随机延迟:
(sleep $((RANDOM % 120)); mysqldump db1 > /bk/db1.sql) & - 注意:Navicat 批处理作业是严格串行的,5 个库排在同一个批处理里,总耗时 = 各库备份时间之和,无法通过“升级 Premium”变成并行
真正难控的不是 CPU 数值,而是 IO 抢占和进程僵死——比如 mysqldump 因锁表卡住,navicat.exe 进程还在,但子进程已挂,系统级降权完全失效。这时候得看数据库侧负载,而不是调 Navicat 设置。











