You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何统计Azure SQL Server及MI中用户的数据消耗/提取量?

解答Azure SQL数据消耗量相关问题

1. 如何衡量Azure SQL Server数据库中用户的数据消耗量?

要衡量用户的数据消耗量,核心是追踪用户执行的查询所读取、返回的数据量,通常可以从逻辑读取量、物理读取量、返回行数这几个关键维度评估:

  • 逻辑读取:反映从内存缓存或磁盘读取的数据页总数,能体现查询实际访问的数据规模
  • 物理读取:代表直接从磁盘读取的数据量,反映缓存未命中时的真实磁盘消耗
  • 返回行数:就是用户实际提取、获取到的数据条数,最直接体现用户的数据提取量
    这类数据主要靠SQL Server内置的动态管理视图(DMV)和监控工具来捕获统计。

2. 在Azure SQL Server MI环境下,单个用户的数据消耗/提取量查询方式

① 使用SSMS的查询语句或UI界面?

完全可以,SSMS是这类场景下的常用工具,分两种操作方式:

查询语句(更适合统计历史/批量数据)

通过组合sys.dm_exec_query_statssys.dm_exec_sessionssys.dm_exec_sql_text这些DMV,能关联用户会话与执行的查询,精准统计数据消耗。比如下面的脚本可以统计指定用户的总返回行数、逻辑读取量:

SELECT 
    s.login_name AS [用户名],
    SUM(qs.total_rows) AS [总返回行数],
    SUM(qs.total_logical_reads) AS [总逻辑读取量(数据页)],
    COUNT(DISTINCT qs.sql_handle) AS [执行查询总数]
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
JOIN sys.dm_exec_sessions s ON qs.session_id = s.session_id
WHERE s.login_name = '你的目标用户名' -- 替换为要查询的用户
GROUP BY s.login_name
ORDER BY SUM(qs.total_rows) DESC;

如果要实时追踪用户当前正在执行的查询消耗,用这个脚本:

SELECT 
    s.login_name,
    r.command AS [查询类型],
    r.total_elapsed_time AS [已执行时长(毫秒)],
    r.logical_reads AS [当前逻辑读取量],
    r.reads AS [当前物理读取量],
    st.text AS [执行的SQL语句]
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) st
WHERE s.login_name = '你的目标用户名';

SSMS UI界面(适合实时快速查看)

  • 右键你的Azure SQL MI服务器,打开活动监视器
  • 切换到「进程」标签,在筛选框中输入目标用户名,就能看到该用户当前会话的逻辑读取、物理读取、返回行数等实时数据
  • 也可以在「资源等待」标签,间接查看用户查询的资源消耗状态
    不过UI仅支持实时状态查看,历史数据统计还是得靠DMV查询。

② Azure门户?

Azure门户也能实现用户级的数据消耗监控,但需要提前配置好相关诊断设置:

  • Azure Monitor指标面板

    1. 进入你的Azure SQL托管实例资源页
    2. 左侧菜单选择「监控→指标」
    3. 在指标下拉框中选择Logical ReadsPhysical Reads等指标,添加筛选器选择Login Name维度,指定目标用户名,就能查看该用户的资源消耗趋势图表
  • Azure Monitor日志(Log Analytics)

    1. 先在托管实例的「安全性→审核」中开启审核,将日志发送到Log Analytics工作区;或者在「监控→诊断设置」中开启查询存储日志收集
    2. 进入对应的Log Analytics工作区,用Kusto查询语言统计用户数据消耗,比如:
      SQLAuditLogs
      where TimeGenerated > ago(7d) -- 查询近7天数据
      where login_name == '你的目标用户名'
      summarize 
          总逻辑读取量 = sum(logical_reads),
          总返回行数 = sum(row_count)
          by bin(TimeGenerated, 1h) -- 按小时聚合
      

内容的提问来源于stack exchange,提问作者Venkat

火山引擎 最新活动