实时监控正在运行/最近的 SQL
Oracle
SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 250 PAGESIZE 0
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id=>'&sql_id', type=>'TEXT') AS report FROM dual;
-- or: SELECT sql_id, status, elapsed_time FROM v$sql_monitor WHERE status='EXECUTING';Real-Time SQL Monitoring 实时显示长时间/并行查询(Tuning Pack)。
PostgreSQL
SELECT pid, now()-query_start AS dur, state, wait_event, query
FROM pg_stat_activity WHERE state='active' ORDER BY query_start;借助 auto_explain,可自动记录慢查询的执行计划。
MySQL
SELECT thread_id, event_name, timer_wait/1e9 AS ms, sql_text
FROM performance_schema.events_statements_current;events_statements_current 显示当前正在运行的语句。
SQL Server
SELECT r.session_id, r.status, r.wait_type, r.percent_complete, t.text
FROM sys.dm_exec_requests r JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE s.is_user_process = 1;SSMS 中的“实时查询统计信息”实时显示计划执行进度。
MongoDB
db.currentOp({ active: true, secs_running: { $gt: 1 } })实时显示长时间运行的操作;可用 killOp 终止。
Redis
MONITOR实时输出所有命令——在生产环境中会影响性能,只能短时使用。优先使用 SLOWLOG。
Elasticsearch
GET _tasks?detailed=true&group_by=parents实时显示正在运行的任务;长任务可通过 POST _tasks/<id>/_cancel 取消。