Navicat 无独立“执行日志”功能,仅支持调用数据库原生分析工具:MySQL 用 EXPLAIN+SHOW PROFILES(需先 SET profiling=1),PostgreSQL 用 EXPLAIN(ANALYZE, BUFFERS);慢日志须配置数据库侧参数,Navicat 不提供持久化存储或内置查看器。
Navicat 里根本没“执行日志”这个独立功能
navicat 本身不保存或展示 sql 执行过程中的详细日志(比如每条语句耗时、扫描行数、临时表使用等)。它只记录操作历史(history)和查询结果,而真正的执行分析依赖数据库自身的日志与诊断能力。所谓“查看分析任务执行日志”,其实是把 navicat 当作一个入口,去调用 mysql / postgresql 等后端的原生分析工具。
MySQL 场景:用 EXPLAIN + SHOW PROFILES 快速定位慢点
Navicat 的查询窗口支持直接运行 MySQL 原生命令,这是最常用也最有效的组合。注意:SHOW PROFILES 默认关闭,且只对当前会话有效。
-
SET profiling = 1;必须先执行,否则后续SHOW PROFILES返回空 - 执行你想分析的 SQL(比如
SELECT * FROM orders WHERE status = 'pending';) - 再运行
SHOW PROFILES;查看各语句耗时排名 - 挑出 Query_ID 后用
SHOW PROFILE FOR QUERY N;看 CPU、block io、context switch 等细分开销 -
EXPLAIN FORMAT=TREE(MySQL 8.0+)比传统EXPLAIN更直观,Navicat 能正常渲染树形结构
容易踩的坑:profiling 在 MySQL 8.0.22+ 已被标记为 deprecated,生产环境建议改用 performance_schema 配合 sys schema 视图,但 Navicat 中查 sys.statement_analysis 需手动开启相关 consumers。
PostgreSQL 场景:靠 EXPLAIN (ANALYZE, BUFFERS) 一眼看穿真实开销
Navicat 对 PostgreSQL 的 EXPLAIN 支持良好,关键在参数组合。只写 EXPLAIN 不会真正执行,加 ANALYZE 才跑一遍并返回实际耗时与行数。
-
EXPLAIN (ANALYZE):看执行时间、实际行数 vs 预估行数偏差 -
EXPLAIN (ANALYZE, BUFFERS):额外显示 shared hit/read、local/dirty 缓冲区使用,判断是否频繁刷盘 -
EXPLAIN (ANALYZE, BUFFERS, TIMING OFF):关掉 timing 减少干扰,适合高并发下快速抓特征
注意:如果语句修改数据(UPDATE/DELETE),ANALYZE 仍会真实执行——别在生产库直接跑未测试的 EXPLAIN (ANALYZE)。
日志持久化?别指望 Navicat,得配数据库侧
想长期追踪慢查询,必须配置数据库自身日志。Navicat 只能“看”,不能“存”。
- MySQL:打开
slow_query_log = ON,设long_query_time = 1,日志路径由slow_query_log_file指定——Navicat 无法直接读这个文件,需用mysqldumpslow或第三方工具解析 - PostgreSQL:设置
log_min_duration_statement = 1000(毫秒),日志输出到log_directory下的文件,Navicat 无内置查看器,得靠外部命令或日志平台 - Navicat 的
Server Monitoring功能仅支持基础指标(连接数、QPS),不采集语句级日志
真正麻烦的是权限——多数运维不会给开发账号 FILE 权限或访问 performance_schema 的权限,这时候连 SHOW PROFILES 都会报错。别怪 Navicat 不行,先确认账号有没有 PROCESS、SELECT on performance_schema 这类底层权限。

















