首页/数据/NoSQL 速查/跨库慢查询排查路径
选型与架构50 条

跨库慢查询排查路径

慢查询排查统一按四步走:找到慢操作(慢日志/分析器)、看清执行代价(扫描量与执行计划)、定位原因(缺索引、写法、数据倾斜)、验证修复(同数据对比前后)。各库都提供分析器与执行计划工具,先测量再改配置。

NoSQL 速查数据更新于 2026-10-12

各库的定位入口

各库的定位入口
# MongoDB:开启慢查询分析器(100ms 以上记录)
mongosh --eval "db.setProfilingLevel(1, { slowms: 100 })"
mongosh --eval "db.system.profile.find().sort({ millis: -1 }).limit(5).pretty()"

# Elasticsearch:慢查询日志阈值(索引级)
curl -X PUT "localhost:9200/my-index/_settings" -H 'Content-Type: application/json' \
  -d '{"index.search.slowlog.threshold.query.warn": "5s", "index.search.slowlog.threshold.fetch.warn": "2s"}'

# ClickHouse:查询日志
clickhouse-client -q "SELECT query_duration_ms, read_rows, query FROM system.query_log WHERE type = 'QueryFinish' ORDER BY query_duration_ms DESC LIMIT 5"

# Redis:慢命令与延迟诊断
redis-cli SLOWLOG GET 10
redis-cli --latency-history

执行计划示例

执行计划示例
// MongoDB:看扫描文档数与返回数之比
db.orders.find({ status: "open", city: "hz" }).explain("executionStats")
// 关键字段:totalDocsExamined / nReturned

-- ClickHouse:看读取行数与执行计划
-- EXPLAIN indexes = 1 SELECT ... FROM events WHERE ts >= now() - INTERVAL 1 DAY;
判断标准是扫描放大倍数:扫描远大于返回通常缺索引或索引选择不佳;扫描正常但耗时长则看排序、聚合与网络返回体积。

易错点

  • 只调大超时与缓存参数:慢的根因(扫描量、写法)没变,压力转移而非解决
  • 拿缓存热的第二次执行结果做基准:评估优化要对比冷热一致的条件

数据来源与参考

  • MongoDB Manual: Database profiler
  • Elasticsearch Guide: Slow log
  • ClickHouse Docs: system.query_log
  • Redis Docs: SLOWLOG
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌