SQL Server 2008 Query 生产速度慢,但开发速度快
Posted
技术标签:
【中文标题】SQL Server 2008 Query 生产速度慢,但开发速度快【英文标题】:SQL Server 2008 Query is slow in production but fast in development 【发布时间】:2009-04-09 04:37:15 【问题描述】:我有一个查询在生产中运行大约 2-4 分钟,但在开发中运行几秒钟。这两个数据库都在同一台服务器上。 (没有关于开发和生产的讲座,生产实际上仍在开发中)。
我的意思是,我可以只打开两个查询窗口并一致地获得两个不同的结果。我已经运行 RedGate SQLCompare 并且没有架构差异(索引等)差异。我已禁用连接到数据库的站点,因此除了我的 Management Studio 会话之外应该没有其他连接。
这可能是什么原因造成的?我通过复制生产数据库来创建开发数据库(在 Management Studio 中,右键单击数据库并单击“复制数据库”)
这真的很奇怪。我不想进行任何索引更改,因为奇怪的是副本速度非常快,但生产速度非常非常慢,但基本上应该是精确的副本。
【问题讨论】:
【参考方案1】:我不知道 SQLServer 的细节,但通常这种事情是由于两个数据库中的表统计信息不同。查看查询计划以查看它们是否不同。 运行 SQLServer 版本的“分析表”或“分析模式”命令。
如果这些方法没有帮助,请检查数据库的设置方式。是否有可能数据相同,但服务器配置不同,例如,生产版本的可用内存阈值要低得多?
还有什么要检查的——这只是我的无知——但是“复制数据库”实际上是复制数据,还是只是复制对象定义?
【讨论】:
是的,首先要查看统计数据。您可以将 EXEC sp_updatestats 作为一种火焰喷射器运行,以查看它是否有任何初步改进。否则,SquareCog 是正确的:查找配置问题(尤其是驱动器/磁盘)。 非常感谢您对EXEC sp_updatestats
的评论——这完全解决了我的问题。我怀疑索引没有被使用,因为它们已经过时了,尽管重新创建了它们!【参考方案2】:
您没有提供有关数据库结构或 SQL 查询的任何详细信息,但如果您确信两种环境的设置相同,那么它可能只是您的生产数据库中突出显示的大量数据一个低效的查询。
【讨论】:
【参考方案3】:好的,谢谢大家。我认为问题与索引碎片有关。我认为复制数据库基本上只是复制了文件。我在每张桌子上都做了一个 DBCC DBREINDEX,现在效果很好。谢谢大家!
【讨论】:
【参考方案4】:在我的情况下,原来是因为生产数据库不在现场(不同的城市),而开发数据库在建筑物内。呃。该查询返回了大量数据,当然这些数据量在外部网络上花费的时间更长。我只是没有连接这些点,因为生产数据库比旧的开发盒快得多,而且我们的大多数查询都没有返回足够的数据让网络成为速度因素。相反,但生产盒的速度要快得多,即使网络连接速度较慢,大多数查询的返回速度仍然比开发盒快。
【讨论】:
【参考方案5】:尝试运行 SQL 分析器以查看生产环境中运行的内容。
【讨论】:
【参考方案6】:默认情况下,红色门会忽略统计信息和填充因子等内容。
【讨论】:
什么?你愿意详细说明吗? 编辑项目,最后一个选项卡(选项?),请参阅“忽略”列表。还有“红门默认”按钮。以上是关于SQL Server 2008 Query 生产速度慢,但开发速度快的主要内容,如果未能解决你的问题,请参考以下文章
Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效
SQL Query (SQL Server 2008) 从两个表中检索数据并对结果进行分组
Excel 2007 MS Query 中的多部分标识符错误,但 SQL Server 2008 中没有