在多数据库服务器中迁移某个数据库时,为了省时间,我们可能会直接把某个数据库分离,然后直接使用mdf文件在另一台机上再附加此数据库。这么样做的结果会把所有缓存计划清除出缓冲区。导致CPU的使用率会在一段时间内一直剧高不下。

    除了分离会导致清除过程缓存,其它的操作像:把数据库设置为在线或离线后、对数据库进行重命名时、试图修改数据库的排序规则时(不管成功与否)、直接删除某个数据库时。其它的没有具体测试,可能还不只这些操作会引起此问题。

    为了能观察试验结果,在自己机器上可以对AdventureWorks运行下面的语句(测试环境SQLSERVER2005SP2):

 APPLY 
(SELECT * FROM sys.dm_exec_sql_text(ecp.plan_handle)) p 
WHERE p.Text LIKE '%Sales.Customer%' 
AND p.Text NOT LIKE '%sys.dm_exec_cached_plans%' 

接着可以对其它的任一数据库如Northwind执行上述的分离等任一操作,再查看sys.dm_exec_cached_plans发现刚才的缓存计划已经没有了。为什么SQLSERVER会选择这么做,我现在也没有搞清楚。

不过,通过上面的结果我们在高峰时段应该避免对数据库执行上述操作。

相关文章:

  • 2021-03-31
  • 2022-12-23
  • 2021-05-25
  • 2022-12-23
  • 2021-12-26
  • 2022-12-23
  • 2021-04-20
  • 2021-06-20
猜你喜欢
  • 2021-06-02
  • 2022-02-19
  • 2021-12-06
  • 2021-06-02
  • 2022-12-23
  • 2021-09-19
  • 2021-11-28
相关资源
相似解决方案