我正在尝试构建一个报告,该报告将在使用特定的 SSAS 表格 in-mem 模型时显示每个用户会话的实际内存使用情况。模型本身比较大(大约 100GB 在内存中)并且测试查询比较重:没有过滤器、最低粒度级别、几个 SUM 度量 + 将 30k 行导出到 CSV。
首先,我尝试查询以下 DMV:
select SESSION_SPID
,SESSION_CONNECTION_ID
,SESSION_USER_NAME
,SESSION_CURRENT_DATABASE
,SESSION_USED_MEMORY
,SESSION_WRITES
,SESSION_WRITE_KB
,SESSION_READS
,SESSION_READ_KB
from $system.discover_sessions
where SESSION_USER_NAME='username'
and SESSION_SPID=29445
并得到以下结果: $system.discover_sessions 结果
我期待 SESSION_USED_MEMORY 至少显示数百 MB,但我得到的最大值是 11 KB(此 DMV 的MS 官方文档表明 SESSION_USED_MEMORY 以千字节为单位)。
我还尝试查询另外 2 个 DMV:
SELECT SESSION_SPID
,SESSION_COMMAND_COUNT
,COMMAND_READS
,COMMAND_READ_KB
,COMMAND_WRITES
,COMMAND_WRITE_KB
,COMMAND_TEXT FROM $system.discover_commands
where SESSION_SPID=29445
和
select CONNECTION_ID
,CONNECTION_USER_NAME
,CONNECTION_BYTES_SENT
,CONNECTION_DATA_BYTES_SENT
,CONNECTION_BYTES_RECEIVED
,CONNECTION_DATA_BYTES_RECEIVED from $system.discover_connections
where CONNECTION_USER_NAME='username'
and CONNECTION_ID=2047
但也得到了相当令人失望的结果:$system.discover_commands 中的 0 已使用内存和$system.discover_connections中的4.8 MB用于 CONNECTION_DATA_BYTES_SENT,这似乎仍然小于实际会话所需的内存。
这些结果似乎与一个非常直接的测试不对应,用户将通过 PowerBI 发送类似的查询,我们会观察到每 4 个用户在 SSAS 服务器上的 RAM 分配峰值约为 40GB(因此每个用户会话大约为 10GB)。
有没有人使用这些(或任何其他 DMV 或方法)来获取实际的用户会话内存消耗?使用 SQL 跟踪器转储将是最后的手段,因为它需要解析并将结果加载到数据库中,而我的目标是获得显示活动用户会话的实时报告。