Sql server 重置SQL Server之前的查询超时

Sql server 重置SQL Server之前的查询超时,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,复制步骤(SQL Server 2008R2): 我们还原一个.bak文件 我们运行查询(没有其他活动) 它超时了 我们重新启动sql server 我们运行查询 它跑得真快 繁殖率100% 我试过两种方法的组合 DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS DBCC FREESESSIONCACHE DBCC FREESYSTEMCACHE ('ALL') DBCC UPDATEUSAGE (dbname) EXEC sp_u

复制步骤(SQL Server 2008R2):

  • 我们还原一个.bak文件
  • 我们运行查询(没有其他活动)
  • 它超时了
  • 我们重新启动sql server
  • 我们运行查询
  • 它跑得真快
繁殖率100%

我试过两种方法的组合

  DBCC FREEPROCCACHE
  DBCC DROPCLEANBUFFERS 
  DBCC FREESESSIONCACHE 
  DBCC FREESYSTEMCACHE ('ALL')
  DBCC UPDATEUSAGE (dbname)
  EXEC sp_updatestats  
  select * from master..sysprocesses where blocked <> 0
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
DBCC自由会话缓存
DBCC FREESYSTEMCACHE('ALL'))
DBCC UPDATEUSAGE(dbname)
执行sp_updatestats
从阻止0的主..系统进程中选择*
什么都不起作用,只是重新启动SQL Server

我认为这只是一个糟糕的计划,但我希望
FREEPROCCACHE
能够在不重新启动SQL Server的情况下修复它。是否有其他缓存需要清除

该查询不是事务/阻塞/锁定样式,主要是选择已创建的临时表,而不是服务器上的其他活动

我认为这一定是一个糟糕的计划,但DBCC FREEPROCCACHE没有做到这一点


有人有线索吗?

在我看来,你与数据库的连接是开放的,你可能是在“自立”。当你恢复一个数据库时,你需要独占访问权,所以删除数据库中的谁,并回滚正在进行的任何事务(你恢复的是什么类型的任何事情,不管怎样)。然后您可以恢复您的数据库

现在,重新启动SQL server将关闭所有活动连接,但有一种更简单的方法;-)

使用MASTER; 去

ALTER DATABASE[YourDbName]-->将其更改为您的数据库名称

设置立即回滚的单用户

之后,您可以运行恢复

祝你今天愉快


Walter

您是否尝试在其上粘贴
选项(重新编译)
?主要问题是此SQL是动态生成的(临时),它不是存储过程。用户可以通过勾选UI中的复选框来更改查询。所以我们不知道什么时候应该重新编译。也许我们可以检测超时,然后强制重新编译(仅一次)。我会试试看这个有没有腿。谢谢有一件事我忘了提到,重新启动必须在查询执行时发生,或者在查询超时后发生,而不是在之前。查询是否每次都超时,或者仅在选择UI上的特定项时才会超时?您说过use可以选择他们想要的任何项目,那么这是否意味着只有在选择特定项目时才会出现问题?如果捕获SQL语句并在SQL management studio中运行它,您是否也会遇到同样的问题?您提到没有其他活动,您的意思是,除了用于生成反查询的UI之外,或者您检查了活动监视器并确保没有其他活动在运行?@SaUce是的,我们有自己的“查询设计器UI”,当我们生成使用CTE填充临时(#)表的SQL时,它似乎只选择了一个错误的计划。如果我们更改设计器,使查询略有不同,或者使用永久工作表,问题就会消失。如果我们重置服务器(如上所述),它也会消失。