sql-server - 识别 Microsoft SQL APS / PDW 中的孤立表
问题描述
我们在 Microsoft APS / PDW 环境中面临严重的性能问题。除了维护 CCI 和统计信息等其他任务外,还建议检查孤立表。在 Google 上搜索会产生一个查询,这应该有助于用 DMV 识别这些表sys.dm_db_index_usage_stats
。这个想法是识别自上次重新启动以来没有任何索引扫描的所有表,可以通过sys.dm_os_sys_info
. 但是,APS 似乎不支持这些 DMV - 还有其他识别孤儿表的可能性吗?
解决方案
你的商业周期有多长?
如果您每批次都触摸大部分表格,我会使用这样的查询:
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。
我会看看我是否可以获得更好(更可靠)的答案,但这是我过去的做法。
推荐阅读
- node.js - 如何突破 eachRow 方法?
- c++ - 将 QCoordinate 列表从 C++ 发送到 QML
- matlab - matlab中的函数实现
- python - 如何在 Google App Engine 上为 postgresql 设置 flask-admin 和 flask-sqlalchemy?
- javascript - Express.js:发送响应并执行后台任务
- docker - 带有 Gunicorn 的 Docker:正在使用的连接:('0.0.0.0',8000)
- guidewire - 无法从 PC 到 BC 检索策略 - Guidewire
- php - 对数组和键进行排序和排序
- java - 方法实现后泛型方法的接口
- java - 当我尝试使用 Freemarker Spring Boot 删除元素时出现异常 505