您可以使用sys.dm_exec_sessions。这只会根据当前活动为您提供计数。如果你想对它进行趋势分析,你需要历史地存储它。请记住,50 或更少的会话 ID 是系统会话。
--By Database
select
db_name(database_id) DatabaseName
,count(session_id) as Session_count
from sys.dm_exec_sessions
where
session_id > 50
group by
database_id
--By Login
select
login_name
,count(session_id) as Session_count
from sys.dm_exec_sessions
where
session_id > 50
group by
login_name
SELECT DB_NAME(CAST(epa.value AS INT)) AS DatabaseName,
SUM(qs.execution_count) AS execution_count,
SUM(qs.total_worker_time) AS total_worker_time,
SUM(qs.total_physical_reads) AS total_physical_reads,
SUM(qs.total_logical_writes) AS total_logical_writes,
SUM(qs.total_logical_reads) AS total_logical_reads,
SUM(qs.total_clr_time) AS total_clr_time,
SUM(qs.total_elapsed_time) AS total_elapsed_time,
SUM(qs.total_rows) AS total_rows
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
WHERE epa.attribute = 'dbid'
GROUP BY epa.value
ORDER BY total_worker_time DESC
您可以使用sys.dm_exec_sessions。这只会根据当前活动为您提供计数。如果你想对它进行趋势分析,你需要历史地存储它。请记住,50 或更少的会话 ID 是系统会话。
我会为此使用扩展事件会话和直方图目标:
您将获得按 database_name 分组的查询(语句开始事件)的计数。让它运行很长时间,您将获得数据库使用情况的真实数据。
根据应用程序的行为,现有会话不足以说明数据库使用了多少:某些应用程序在每次交互后关闭与数据库的连接,而另一些应用程序则一直保持打开状态(连接池就是一个很好的例子). 因此,看到一个空闲的数据库会话并不能很好地指示正在进行的活动量。
您还可以查询计划缓存以了解不同数据库中的查询活动。