撤消 SQL Server 数据库调整所做的更改

问题描述 投票:0回答:3

我不确定这个问题是否可以在这里问或服务器故障。我想知道...除了从备份恢复之外,是否有一种方法可以快速撤消 SQL Server 2005 Tuning Advsor 所做的更改?

sql-server-2005 database-tuning
3个回答
4
投票

有一种方法,只要您没有重命名它们,通常 Database Tuning Advisor 生成的对象都以

_dta

为前缀

enter image description here

因此您可以通过运行此查询来查看它们

FOR 索引

SELECT        
*
FROM            
sys.indexes where name like '_dta%'

来自统计数据

SELECT
*
FROM 
sys.stats where name like '_dta%'

从那里我想你会知道要丢弃哪些物品


2
投票

没有“官方”提及撤消此操作,就像不会有“官方”建议从 DROP DATABASE 中恢复一样。一个负责任的 DBA 不会做这些事情。 如果您刚刚完成此操作并且很高兴,您很可能将这些名称保留为默认值 - 这很有帮助。雷蒙德的答案已经差不多了。但如果您已经完成了一段时间,那么您就不会希望撤消所有良好的统计数据和索引。第二个难题是检查索引上次更新的时间。如果您在几分钟前刚刚完成此操作,这是一个很好的撤消时间范围,请检查此查询以获取刚刚重建的索引和统计信息。 SELECT object_name(object_id) tablename, name indexname, nullif(name,name) statsname, STATS_DATE(object_id, index_id) lastupdated from sys.indexes where STATS_DATE(object_id, index_id) >= dateadd(hh,-1,getdate()) -- and name like '_dta%' union all SELECT object_name(object_id) tablename, nullif(name,name) indexname, name statsname, STATS_DATE(object_id, stats_id) lastupdated from sys.stats where STATS_DATE(object_id, stats_id) >= dateadd(hh,-1,getdate()) -- and name like '_dta%' order by lastupdated desc

这会将列表过滤为仅在过去一小时内“更新”的索引。但是,自动统计信息通常默认处于打开状态,并且偶尔会重建统计信息,因此您不会希望删除“所有”显示的索引。取消注释

and name like '_dta%'
 将是一个开始,除非你重命名它们 - 在这种情况下你肯定能记得你给它们命名的内容吗?

我经常使用伪动态 SQL 来生成我需要的 SQL 语句。 这将删除所有以前缀 _dta 开头的索引。 选择

'删除索引' + OBJECT_NAME(object_id) + '.[' + 名称 + ']'
来自
系统索引 其中名称如“_dta%”


2
投票

同样,你可以做同样的事情来删除统计数据

选择
'删除统计信息' + OBJECT_NAME(object_id) + '.[' + name + ']' 来自
系统统计信息 其中名称如“_dta%”

© www.soinside.com 2019 - 2024. All rights reserved.