如何基于Process ID值关联查询Process Working Set的RawValue
解决思路与SQL实现
嘿,你的需求本质是要关联同一条InstanceName下的两条监控记录——先找到对应进程ID的那条记录,再拉取它的内存工作集数据。这里给你两种靠谱的实现方式:
方法一:使用子查询定位InstanceName
这种方式逻辑直观,先通过子查询找到目标进程对应的InstanceName,再用它过滤出工作集数据:
SELECT RawValue AS ProcessWorkingSet FROM [dbo].[LoadTest] WHERE LoadTestRunId = '11180' AND CategoryName = 'Process' AND CounterName = 'Process Working Set' AND InstanceName = ( SELECT InstanceName FROM [dbo].[LoadTest] WHERE LoadTestRunId = '11180' AND CategoryName = 'Process' AND CounterName = 'ID Process' AND RawValue = '2068' );
注意:如果
ID Process+RawValue的组合可能返回多个InstanceName(比如同一运行ID下有多个相同进程ID的实例),可以把子查询改成IN而不是=,或者根据实际情况加上TOP 1确保唯一性。
方法二:使用自连接(更适合复杂关联场景)
因为所有数据都在同一张表里,我们可以把表自己和自己做连接,直接关联两条记录的关系:
SELECT t2.RawValue AS ProcessWorkingSet FROM [dbo].[LoadTest] t1 JOIN [dbo].[LoadTest] t2 ON t1.LoadTestRunId = t2.LoadTestRunId AND t1.CategoryName = t2.CategoryName AND t1.InstanceName = t2.InstanceName WHERE t1.LoadTestRunId = '11180' AND t1.CategoryName = 'Process' AND t1.CounterName = 'ID Process' AND t1.RawValue = '2068' AND t2.CounterName = 'Process Working Set';
这种方式的优势是如果后续需要扩展查询更多关联指标(比如CPU使用率),只需要继续添加JOIN条件即可,扩展性更强。
另外,你的原始查询只过滤了运行ID、类别和实例前缀,缺少了对CounterName的精准过滤以及关键的关联逻辑,上面两种方法都帮你补上了这些部分,直接运行就能得到你要的9310208啦~
内容的提问来源于stack exchange,提问作者Rotan075
相关产品推荐
相关产品推荐

