Azure SQL Database中并发类概念差异及监控方法技术咨询
Azure SQL Database并发相关概念区别及监控查询
一、并发相关概念区别
- Concurrent sessions(并发会话):指同时处于连接状态的数据库会话,不管会话是否在执行任务,只要连接没断开就算数。比如客户端打开连接后处于 idle 状态,依然会被计入并发会话。
- Concurrent workers(并发工作线程):指正在执行实际任务(如查询执行、事务处理、索引维护)的数据库工作线程,是真正消耗计算资源的单元。一个会话可能在某一时刻占用多个worker,也可能暂时不占用。
- External concurrent connections(外部并发连接):特指从Azure SQL Database外部发起的并发连接,比如应用服务器、本地客户端等外部来源的连接,和数据库内部的连接(如跨库查询的内部连接)区分开。
- Concurrent logins(并发登录):指同一时间窗口内成功完成身份验证的登录操作次数,核心是“登录动作”而非持续的连接。比如同一用户短时间内多次登录,每次都算一个并发登录,可能对应新会话或复用会话。
二、监控活跃会话、工作线程的SQL查询
1. 监控活跃用户会话(含执行状态)
SELECT s.session_id, s.login_name, s.status, s.host_name, s.program_name, r.command, r.start_time, r.percent_complete FROM sys.dm_exec_sessions s LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id WHERE s.is_user_process = 1 -- 过滤系统进程,只看用户会话 ORDER BY s.session_id;
这个查询能看到每个用户会话的基本信息,以及正在执行的请求详情,比如命令类型、执行时长和完成进度。
2. 监控正在运行的并发工作线程
SELECT COUNT(DISTINCT r.session_id) AS active_sessions_using_workers, COUNT(*) AS total_running_workers, MAX(worker_count) AS max_workers_per_single_session FROM sys.dm_os_workers w JOIN sys.dm_exec_requests r ON w.task_address = r.task_address WHERE w.state = 'RUNNING';
可以统计当前活跃工作线程总数、占用工作线程的会话数,以及单个会话占用的最大工作线程数,帮助判断资源负载情况。
3. 统计外部并发连接数
SELECT COUNT(*) AS external_concurrent_connections FROM sys.dm_exec_sessions s WHERE s.host_name IS NOT NULL -- 外部连接通常会携带主机名,内部连接可能为空 AND s.is_user_process = 1;
如果需要更精准的过滤,可以结合program_name字段,比如只统计特定应用的外部连接。
4. 查看近期并发登录趋势
SELECT login_name, COUNT(*) AS login_count, MIN(login_time) AS first_login, MAX(login_time) AS last_login FROM sys.dm_exec_sessions WHERE login_time >= DATEADD(HOUR, -1, GETUTCDATE()) -- 查看最近1小时的登录情况 GROUP BY login_name ORDER BY login_count DESC;
通过调整DATEADD的参数,可以查看不同时间窗口内的登录次数,了解并发登录的峰值和分布。
内容的提问来源于stack exchange,提问作者user20263228
相关产品推荐
相关产品推荐

