2

我正在开发一个以 SQL Server 2008 作为后端的应用程序。每天结束时,我都会备份数据库并将其恢复到笔记本电脑上,这样我就可以在家继续开发。在这两种设置中一切正常,除了在我的本地机器上运行的查询比我在工作中查询远程服务器时花费的时间要长得多(几秒 vs 亚秒)。

我按名称指定服务器并使用“。” 连接到我的本地实例。该应用程序是使用集成安全性通过 ADO 连接的 Excel VBA。

我不知道工作服务器的规格,但我想它们比我的笔记本电脑好,所以这可能是其中一些差异的原因。但是,我的开发笔记本电脑很不错(Windows 7、2.4GHz Core i5、64 位、8GB RAM),此时数据库非常小。

为什么性能会有如此显着的不同?我应该在笔记本电脑上查看哪些内容以提高性能?

编辑:事实证明,查询没有错。在我的笔记本电脑上往返服务器以获取数据需要更长的时间,我错误地认为它是查询,而实际上它是连接。当我通过 SSMS 连接到数据库引擎时,在任一环境中所需的时间大致相同,但是当我使用 ADO 连接时,连接在本地花费的时间更长。知道什么会导致这种延迟吗?

我将 Mitch 的回复标记为答案(有助于解决查询时间和环境中的差异),并将创建一个有关连接延迟的新问题。

更新:这是我关于 SE.DBA 的问题的链接,该问题涉及本地主机上连接的可怕性能:https ://dba.stackexchange.com/q/18231/2848

4

1 回答 1

7

有问题的查询在两种环境中是否具有相同的查询计划?

是不是第一次跑本地慢,第二次跑又快?(如果是这样,很可能是物理 I/O 速度将页面加载到内存中的差异)

作为第一步,我将在两个环境中重建所有索引并更新列统计信息,然后重新比较查询计划:

use myDb
go

exec sp_msforeachtable "dbcc dbreindex('?')" 
go

exec sp_msforeachtable "update statistics ? with fullscan, columns" 
go

With the usual caveats regarding production (you state your DB is small, so it shouldn't take long to run these commands).

于 2012-05-06T03:41:52.537 回答