慢查詢日誌是資料庫效能調優的「聽診器」。本文提供 MongoDB(配置文件啟動模式)與 MySQL 5.6 兩大主流資料庫的慢查詢開啟標準配置,含關鍵參數解析與生產環境建議值。
/usr/local/mongodb/etc/mongodb.conf# 數據與日誌路徑 dbpath = /var/mongodb/data logpath = /var/mongodb/logs/log.log pidfilepath = /usr/local/mongodb/mongodb.pid # 慢查詢核心參數 profile = 2 # 0=關閉, 1=只記錄慢查詢, 2=記錄所有操作 slowms = 100 # 慢查詢閾值(毫秒),超過 100ms 記錄 # 運行模式 fork = true # 後台守護進程 noauth = true # 關閉認證(生產必須開啟) # port = 27017 # maxConns = 1024 # 可選優化 # directoryperdb = true # logappend = true # cpu = true
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
成功輸出:
about to fork child process, waiting until server is ready for connections. forked process: 389 child process started successfully, parent exiting
profile=2:開發/測試環境建議,全量記錄便於分析;生產環境建議 profile=1 避免日誌爆炸。slowms=100:根據業務 SLA 調整,核心交易建議 50~100ms,報表查詢可放寬到 500~1000ms。mongolog、mtools、MongoDB Profiler (UI)。my.cnf [mysqld] 區塊# 錯誤日誌 log-error=/var/log/mysql-error.log # 慢查詢日誌 slow_query_log = 1 slow_query_log_file = /www/web_logs/mysql/mysql-slow.log long_query_time = 1 # 超過 1 秒記錄(可設 0.05 秒微秒級) log_queries_not_using_indexes = 1 # 記錄未用索引查詢 min_examined_row_limit = 100 # 忽略掃描行數 < 100 的查詢
| 參數 | 建議值 | 說明 |
|---|---|---|
| long_query_time | 0.05 ~ 1 | 核心業務 0.05s,綜合 1s。5.1+ 支援微秒。 |
| log_queries_not_using_indexes | ON | 發現全表掃描,但會產生大量噪音,定期清理。 |
| min_examined_row_limit | 100 | 過濾小表全掃描噪音。 |
| slow_query_log_file | 獨立磁碟/目錄 | 避免與數據目錄爭搶 I/O。 |
mysqldumpslow:官方內建,按查詢時間/次數/掃描行排序。pt-query-digest (Percona Toolkit):專業級分析,生成報告、EXPLAIN、索引建議。mysqlsla、Anemometer (Web UI)。雙資料庫慢查詢全開啟,效能調優有據可依。