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

时间:2010-08-30 15:58:00

标签: sql-server-2005 database-tuning

我不确定这里是否可以提出这个问题或者是否是serverfault。我在想...除了从备份中恢复之外,有没有办法快速撤消SQL Server 2005 Tuning Advsor所做的更改?

3 个答案:

答案 0 :(得分:5)

只要你没有重命名它们就有办法通常数据库调优顾问生成的对象以_dta为前缀

enter image description here

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

FOR索引

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

FROM Stats

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

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

答案 1 :(得分:2)

UNDO此操作没有官方引用,就像没有官方建议从DROP DATABASE中恢复一样。负责任的DBA不会做这些事情。

如果你刚刚完成它并且触发快乐,你很可能将这些名称作为默认值 - 这有很大帮助。 Raymund的答案几乎就在那里。但如果你已经做了一段时间,那么你就不会想要取得所有优秀的统计数据和索引。第二部分是检查索引上次更新的时间。如果你刚刚在几分钟前完成了这个,这是UNDO内部的一个很好的时间框架,请检查此查询以获取刚刚重建的索引和统计信息。

  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%'将是一个开始,除非你重命名它们 - 在这种情况下你肯定可以回想起你的名字吗?

答案 2 :(得分:1)

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

选择
'drop index'+ OBJECT_NAME(object_id)+'。['+ name +']' 从
SYS.INDEXES 其中名称如'_dta%'

将结果粘贴到一个新窗口中,然后在删除之前手动仔细检查每个索引。

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

选择
'drop index'+ OBJECT_NAME(object_id)+'。['+ name +']' 从
sys.stats 其中名称如'_dta%'