You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server特定视图统计未录入sys.dm_db_index_usage_stats问题咨询

问题1:特定视图未生成使用统计的原因

sys.dm_db_index_usage_stats 本身存储的是数据库中实体索引、基表的访问统计数据,不会直接记录普通视图的使用记录,你看到的部分视图有统计本质是以下两个前提同时满足:

  • 这些视图是索引视图(物化视图):创建了唯一聚集索引的视图会有实体化的物理存储结构,对应自己的索引元数据,访问时命中视图索引就会生成该视图object_id对应的统计记录
  • 你的查询关联逻辑存在疏漏:你当前仅用OBJECT_NAME(tst.object_id) = t.TABLE_NAME关联,没有匹配schema,很容易出现同表名不同schema的错误匹配,部分看起来匹配到的视图统计实际是同名称基表的统计

你提到的无统计的特定视图,核心原因是属于普通非索引视图:普通视图是虚拟表,执行查询时会被SQL Server展开为对基表的查询,访问统计只会落到依赖的基表、基表索引上,不会生成视图自身object_id对应的sys.dm_db_index_usage_stats记录。如果该视图是跨库视图,基表的统计还会存储在源库的动态视图中,当前库更不会生成相关记录。

问题2:统计获取方案

方案1:让视图统计写入sys.dm_db_index_usage_stats

给该视图创建唯一聚集索引转为索引视图即可,访问时如果命中视图的索引,就会生成对应统计记录。注意索引视图有严格的语法限制:

  • 视图定义必须使用SCHEMABINDING绑定 schema
  • 不能包含OUTER JOIN、UNION、子查询、非确定性函数等语法
  • 聚合类视图必须包含COUNT_BIG(*)字段

方案2:不改视图结构获取使用统计

用SQL Server自带的*查询存储(Query Store)*统计即可,SQL Server 2016及以上版本默认开启,可通过以下查询获取指定视图的访问记录:

SELECT 
    qt.query_sql_text,
    qs.last_execution_time,
    qs.count_executions,
    qs.total_duration / 1000 AS total_duration_ms
FROM sys.query_store_query q
JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats qs ON p.plan_id = qs.plan_id
WHERE qt.query_sql_text LIKE N'%你的视图名称%' -- 替换为实际视图名
ORDER BY qs.last_execution_time DESC

你也可以根据需要扩展字段,统计访问频率、读写开销等维度的数据。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:57:03