# 实时查询数据库活动会话状态
# MySQL
show full processlist;
select * from information_schema.processlist where info is not null order by time desc;
# SQl Server
WITH t_proc AS (SELECT spid, count(*) proc_count, max(loginame) loginame FROM sys.sysprocesses GROUP BY spid),
exec_sql_tab AS (SELECT * FROM sys.dm_exec_requests),
h_lock AS (
SELECT
a.blocking_session_id AS blocked
FROM
exec_sql_tab a
WHERE
NOT EXISTS (SELECT 1 FROM exec_sql_tab WHERE blocking_session_id > 0 AND session_id = a.blocking_session_id)
AND blocking_session_id > 0
GROUP BY
a.blocking_session_id
) SELECT
(CASE WHEN h_lock.blocked IS NOT NULL THEN 1 ELSE 0 END) AS 'headlockflag',
'"' + (
CASE
WHEN substring(dest.TEXT, 1, 16) = 'FETCH API_CURSOR' THEN
(SELECT t.TEXT FROM sys.dm_exec_cursors (der.session_id) c CROSS APPLY sys.dm_exec_sql_text (c.sql_handle) t)
ELSE
dest.TEXT
END
) + '"' AS 'SQL语句',
(CASE WHEN substring(dest.TEXT, 1, 16) = 'FETCH API_CURSOR' THEN 1 ELSE 0 END) AS 'fetch_cursor状态',
(
CASE
WHEN charindex ('<ParameterList>', dest_plan.query_plan) > 0 THEN
'"' + substring(
dest_plan.query_plan,
charindex ('<ParameterList>', dest_plan.query_plan),
charindex ('</ParameterList>', dest_plan.query_plan) - charindex ('<ParameterList>', dest_plan.query_plan) + 16
) + '"'
ELSE
''
END
) AS 'SQL变量绑定参数',
der.cpu_time AS '运行时间',
der.session_id AS '会话ID',
t_proc.proc_count AS '运行线程数',
der.command AS '命令',
der.blocking_session_id AS '阻塞其会话的会话ID',
DB_NAME (der.database_id) AS '数据库名称',
der.request_id AS '请求ID',
der.start_time AS '开始时间',
der.STATUS AS '状态',
der.READS AS '物理读次数',
der.writes AS '写次数',
der.logical_reads AS '逻辑读次数',
der.row_count AS '返回结果行数',
der.wait_type AS '等待资源类型',
der.wait_time AS '等待时间',
der.total_elapsed_time,
der.wait_resource AS '等待的资源',
conn.client_net_address AS '客户端地址',
tmpdb.user_objects_alloc_page_count AS 'tempdb使用页',
t_proc.loginame AS '登录用户名',
der.query_hash AS 'SQL的HASH',
der.transaction_id,
der.open_transaction_count,
der.open_resultset_count,
CONVERT(CHAR(24), getdate (), 121) AS '采集时刻'
FROM
exec_sql_tab der
LEFT JOIN sys.dm_exec_connections conn ON (conn.session_id = der.session_id)
LEFT JOIN h_lock ON (h_lock.blocked = der.session_id)
LEFT JOIN t_proc ON (t_proc.spid = der.session_id)
LEFT JOIN sys.dm_db_session_space_usage tmpdb ON (tmpdb.session_id = der.session_id) CROSS APPLY sys.dm_exec_sql_text (der.sql_handle) AS dest CROSS APPLY sys.dm_exec_text_query_plan (der.plan_handle, DEFAULT, DEFAULT) AS dest_plan
WHERE
der.session_id <> @@spid
ORDER BY
'headlockflag' DESC,
blocking_session_id,
cpu_time DESC
# Oracle
# Postgres
# DM
# KingBase
编撰人:wangyxyf
← OA服务启动慢分析 如何检查升级是否正常 →