首页 > 解决方案 > 识别 Microsoft SQL APS / PDW 中的孤立表

问题描述

我们在 Microsoft APS / PDW 环境中面临严重的性能问题。除了维护 CCI 和统计信息等其他任务外,还建议检查孤立表。在 Google 上搜索会产生一个查询,这应该有助于用 DMV 识别这些表sys.dm_db_index_usage_stats。这个想法是识别自上次重新启动以来没有任何索引扫描的所有表,可以通过sys.dm_os_sys_info. 但是,APS 似乎不支持这些 DMV - 还有其他识别孤儿表的可能性吗?

标签: sql-serverparallel-data-warehouse

解决方案


你的商业周期有多长?

如果您每批次都触摸大部分表格,我会使用这样的查询:

select  s.name,t.name
from    sys.tables t
        join sys.schemas s on s.schema_id = t.schema_id
where not exists (
        select  1
        from    sys.dm_pdw_exec_requests r
        where   r.command like ('%' + s.name + '.' + t.name + '%')
    )
order by s.name,t.name

它在以下情况下不起作用:

  • 您的查询长度超过 4000 个字符,您可能会错过查询的较长形式的表名。
  • 您习惯于省略模式名称而只使用表名。在这种情况下,我从子查询中省略了“s.name”。
  • 您运行大量查询,而您的 DMV 没有存储足够的工作负载。在这种情况下,定期将您的 DMV 行扫描并聚合到一个新表中,不包括已经存在的 REQUEST_ID。

我会看看我是否可以获得更好(更可靠)的答案,但这是我过去的做法。


推荐阅读