跟踪会话 / 查询(启用 trace / profiling)
Oracle
-- For a specific session (10046 event tracing):
BEGIN
DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 123, serial_num => 4567, waits => TRUE, binds => TRUE);
END;
/
-- To disable: DBMS_MONITOR.SESSION_TRACE_DISABLE(123, 4567);DBMS_MONITOR.SESSION_TRACE_ENABLE 为会话生成 10046 跟踪文件;完成后务必关闭(跟踪会增加开销和磁盘占用)。
PostgreSQL
LOAD 'auto_explain';
SET auto_explain.log_min_duration = 0;
SET auto_explain.log_analyze = true;
-- Simple alternative: SET log_min_duration_statement = 0;auto_explain 将查询计划写入日志文件,log_min_duration_statement 将慢查询/所有查询写入日志文件;值为 0 时记录每条查询,需注意日志量。
MySQL
-- performance_schema approach (recommended):
UPDATE performance_schema.setup_consumers SET ENABLED='YES' WHERE NAME LIKE 'events_statements%';
-- Legacy/simple method (being deprecated):
SET profiling = 1;
-- run the query, then:
SHOW PROFILES;查询跟踪通过 performance_schema events_statements 实现;SET profiling 方法较旧(已弃用),但可快速进行会话级测量。
SQL Server
CREATE EVENT SESSION [trace_slow] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
WHERE duration > 1000000)
ADD TARGET package0.event_file(SET filename=N'trace_slow.xel');
GO
ALTER EVENT SESSION [trace_slow] ON SERVER STATE = START;Extended Events(XEvents)是现代的跟踪方法;创建会话后用 START 启动,完成后用 STOP/DROP 停止。
MongoDB
db.setProfilingLevel(2)
// 1 = slow operations only (slowms threshold), 0 = off
// Results: db.system.profile.find().sort({ ts: -1 }).limit(10)setProfilingLevel(2) 会将所有操作记录到 system.profile 集合;生产环境优先使用 1(仅慢操作),因为级别 2 会增加开销。
Redis
MONITOR
# Streams all commands arriving at the server in real time. Exit: Ctrl-CMONITOR 实时显示所有命令,但会导致严重的性能下降;在生产环境中应谨慎短时使用。替代方案:SLOWLOG GET。
Elasticsearch
GET my-index/_search
{
"profile": true,
"query": { "match": { "title": "elastic" } }
}
// Persistent slow query tracing: the index.search.slowlog.threshold.query.warn setting"profile": true 给出单次搜索的查询/聚合耗时明细;持续监控请配置 slowlog 阈值。