• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 博客园
  • 订阅
  • 管理

View Post

分离数据库后导致CPU使用率增加

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

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

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

Code
USE AdventureWorks; 
GO 
DECLARE @dbid int 
SELECT @dbid=DB_ID() 
DBCC FLUSHPROCINDB(@dbid) 
GO 
SELECT * FROM Sales.Customer WHERE CustomerID=1 
GO 
SELECT ecp.objtype,usecounts,p.Text 
FROM sys.dm_exec_cached_plans AS ecp 
CROSS 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会选择这么做,我现在也没有搞清楚。

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

posted on 2008-10-13 12:27  凉面  阅读(2197)  评论(5)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3