【问题标题】:SQL Server slow down after duplicating databaseSQL Server 复制数据库后速度变慢
【发布时间】:2009-06-18 15:30:49
【问题描述】:

由于数据库变得相当大,我最近将一堆表从现有数据库移到了新数据库中。这样做之后,我注意到在针对新数据库运行时,我的查询性能急剧下降。

我重新创建新数据库的过程是这样的:

  1. 使用 sql server 自动脚本生成表 CREATE 脚本
    发电机。
  2. 运行创建表脚本
  3. 将所有数据插入新数据库 将 INSERT INTO 与 select from 一起使用 现有数据库。
  4. 运行所有更改脚本以创建 外键和任何索引

是否有人对我的流程可能存在的问题有任何想法,或者我缺少导致此性能问题的某些关键步骤?

谢谢。

【问题讨论】:

  • 您还可以将文件组添加到数据库并将表移动到这些文件组中。这样你仍然有 1 个数据库,但你可以单独备份文件组
  • 其他数据库的硬件是否相似?它在同一类型的存储上吗?是否使用相同版本的 SQL Server?这些东西肯定会影响速度。
  • 查询计划是否相同?

标签: sql sql-server database performance


【解决方案1】:

首先我要确保自动创建统计信息已启用,您还可以将自动更新统计信息设置为true

之后我会通过运行来更新统计数据

sp_updatestats

UPDATE STATISTICS

还要意识到,第一次点击查询时它会变慢,因为 RAM 中不会缓存任何内容。第二次命中应该更快

【讨论】:

  • 我确保启用了自动创建统计信息,并且还运行了 UPDATE STATISTICS。我没有注意到重大改进。不过谢谢
【解决方案2】:

您是否从原始数据库中的表中编写了索引?缺少索引肯定会导致性能不佳。

【讨论】:

  • 有一些缺失的索引未能被结转。谢谢。
【解决方案3】:

您是否尝试过在运行这些查询时查看每台服务器上的执行计划 - 这应该可以让您轻松查看它们是否在执行不同的操作,例如由于缺少索引、统计数据不佳等原因导致的表扫描。

两个 DB 是否位于同一个盒子上,它们的数据文件位于同一个驱动器阵列上?

【讨论】:

  • 最后 - 建议实际收集和评估证据,而不是猜测。
【解决方案4】:

你能告诉什么这些查询变慢了吗?新的访问计划?相同的计划,但执行速度较慢?他们是执行更慢还是暂停更多? 所有查询变慢了还是只有一些?最后但并非最不重要的一点是,你怎么知道,即。您具体测量了什么以及如何测量?

一些常见的嫌疑人可能是:

  • 新的存储速度要慢得多(慢速磁盘上的 .mdf 或繁忙的磁盘上)
  • 您在移动期间更改了数据结构(即,某些索引未移植)
  • 您更改了数据大小(即压缩选项),导致相同数据的页面更多
  • 是否同时发生了其他任何变化,新的应用代码或类似内容?
  • 通过扩展数据大小(您没有提及删除旧表),您现在正在破坏缓冲池(性能计数器中的页面寿命预期是否降低了?)

【讨论】:

  • +1 还要检查碎片;如果您在复制文件时扩展了数据库并且您不在干净的磁盘上,您可能会遇到碎片问题。
【解决方案5】:

查看您如何设置初始大小和增长选项。如果您一开始就没有给它足够的空间,或者您一次增长了 1MB,这可能会导致性能问题。

【讨论】:

  • 这是否也会影响查询,或者只是在创建、更新和删除数据时?
  • @leaf - 如果这是一个只读数据库,或者如果您主要进行读取,那么增长不会成为问题,很可能您缺少索引或过时的统计数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
相关资源
最近更新 更多