Skip to content
阅读进度

如何理解线程状态区间统计 SQL? ​

返回 构建与质量门禁 目录

标准回答 ​

先用process和thread表确认目标线程的utid,查看PRAGMA table_info(thread_state)核查字段。将下例utid和纳秒起止时间替换为Trace中的实际值,结束时间要晚于开始。

查询只统计有效已结束状态片段,把跨边界的片段裁剪到选定窗口,结果除以1e6转换为毫秒。Running与R或R+是不同状态;不要用匹配所有R开头字符串的规则,把Running也算成调度等待。

各类状态时间之和若没有覆盖全部窗口,先查线程生命周期、未结束片段或数据缺失。不能默认空缺时间是空闲,也不要给缺失数据强行补成零。

追问与回答 ​

用slice总和算CPU时间可以吗 ​

不行。slice包含等待且可能嵌套重叠。CPU运行时间应由对应调度信息或明确的线程CPU时间得到。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。