您在 SQL Server 2005 中执行某些数据库维护操作或常规交易记录操作后,您可能会遇到的查询性能的降低

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 917828
错误 #: 329155 (SQLBUDT)
症状
在 Microsoft SQL Server 2005 年,您执行某些数据库维护操作或常规交易记录操作后可能会遇到的查询性能的降低。例如对于,还原数据库备份后,您可能发现查询性能突然降低。

从 SQL Server 2005 Service Pack 2 开始您会注意到如下所示 SQL Server 错误日志中的邮件时,则会出现此问题:
2006-10-15 06:03:29.330 spid59 SQL Server 遇到 4 occurrence(s) cachestore 刷新的数据库维护由于一些要在 ' 对象计划 cachestore (计划高速缓存的一部分),或者重新配置操作。
2006-10-15 06:03:29.420 spid59 SQL Server 遇到 4 occurrence(s) cachestore 刷新的数据库维护由于一些要在 SQL 计划 cachestore (计划高速缓存的一部分),或者重新配置操作。
2006-10-15 06:03:29.420 spid59 SQL Server 遇到 4 occurrence(s) cachestore 刷新的绑定树 cachestore (计划高速缓存的一部分) 由于到某些数据库维护或重新配置操作。
但是,您可以运行 DBCC FREEPROCCACHE 命令或 DBCC FREESYSTEMCACHE 命令来刷新过程高速缓存。如果通过运行以下命令之一中转储过程高速缓存,您将会发现类似于以下 SQL Server 错误日志中的消息:
2006-12-14 11:37:03.57 spid53 SQL Server 遇到的由于 DBCC FREEPROCCACHE 或 DBCC FREESYSTEMCACHE 操作以在 SQL 计划 cachestore (计划高速缓存的一部分) 的刷新 cachestore 1 occurrence(s)。
2006-12-14 11:37:03.57 spid53 SQL Server 遇到 1 occurrence(s) cachestore 刷新的绑定树 cachestore (计划高速缓存的一部分) 由于对 DBCC FREEPROCCACHE 或 DBCC FREESYSTEMCACHE 操作。
因此,您可以检查 SQL Server 错误日志以确定问题是否由本文所述的问题引起。

注意在 Microsoft SQL Server 2008 中不会发生此行为。
原因
因为某些数据库维护操作或常规事务操作清除整个过程高速缓存,则会发生此问题。
状态
此行为是设计使然。
更多信息
在下列情况下执行某些数据库级操作时,会清除整个过程高速缓存:
  • 数据库有 AUTO_CLOSE 数据库选项设置为 ON。 在无用户连接引用,或使用数据库,后台任务会尝试关闭并自动关闭数据库。
  • 对具有默认选项的数据库运行多个查询。然后,数据库将被丢弃。
  • 为源数据库的数据库快照将被丢弃。

    注意数据库快照仅有在 Microsoft SQL Server 2005 企业版中。
  • 您可以更改数据库状态为脱机或联机。
  • 您已成功重建数据库的事务日志。
  • 还原数据库备份。
  • 运行 DBCC CHECKDB 语句。

    注意这是仅在 SQL Server 2005 年早于 SQL Server 2005 SP2 的版本中,则返回 true。安装 SQL Server 2005 SP2 或更高版本后,不刷新整个过程高速缓存,当您运行 DBCC CHECKDB 语句。
  • 分离数据库。
  • 在运行 ALTER DATABASE 语句时指定下列选项之一:
    • 脱机
    • 联机
    • 修改默认文件组
    • MODIFY_NAME
    • 修改文件组 READ_WRITE
    • 逐份打印
    • 修改文件组 READ_ONLY
    • READ_ONLY
    • READ_WRITE
  • 如果下列服务器选项之一更改由 RECONFIGURE 语句,清除整个过程高速缓存:
    • 跨数据库所有权链接
    • 索引创建内存 (KB)
    • 远程查询超时值 (s)
    • 用户选项
    • 最大文本 repl 大小 (B)
    • 并行度的成本阈值
    • 最大并行度
    • 每个查询 (KB) 的最小内存
    • 查询等待 (s)
    • 最小服务器内存 (MB)
    • 最大服务器内存 (MB)
    • 查询调控器成本限制
    注意如果该实际值不会更改,或者如果新值为最大服务器内存服务器选项设置为 0,将不会清除过程高速缓存。
如果您在遇到此问题时,您注意到下列值中的更改来收集 SQL Server 2005 性能计数器的数据使用性能监视器:
  • 性能对象:进程
    计数器: 处理器时间百分比
    实例: sqlservr

    此计数器的值将增加由于增加 CPU 活动。实质上是,如果发生此问题,会清除整个过程高速缓存。因此,后续请求必须生成新的计划被缓存。此行为会稍有增加 CPU 活动。
  • 性能对象:SQLServer:Plan 缓存
    计数器:高速缓存对象计数
    实例: _Total

    性能对象:SQLServer:Plan 缓存
    计数器:缓存页
    实例: _Total

    这些计数器的值会突然降低。

    注意性能对象命名 MSSQL $ InstanceName SQL Server 2005 一个命名实例为: 计划缓存。
  • 性能对象:SQLServer:SQL 统计
    计数器:SQLCompilations/秒

    此计数器的值将显著增加此事件之后。

    注意性能对象命名 MSSQL $ InstanceName SQL Server 2005 一个命名实例为: SQL 统计。
如果使用 SP:CacheRemove 事件捕获 SQL 事件探查器跟踪您注意到发生此问题时此事件会生成与下面 TextData 列的值一起:
"整个过程缓存刷新"

警告:本文已自动翻译

属性

文章 ID:917828 - 上次审阅时间:02/17/2009 20:20:22 - 修订版本: 7.0

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL 2005 Server Workgroup, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Express Edition with Advanced Services

  • kbmt kbsql2005engine kbexpertiseadvanced kbtshoot kbprb KB917828 KbMtzh
反馈