【发布时间】:2016-09-11 21:39:33
【问题描述】:
我有两个DataBases(DB1 & DB2:两个 DB 相同,DB2 是从 DB1 的备份创建的)。当我在两个 DBs 上运行存储过程 SP1 时,大约需要 2 秒才能在两个 DBs 上给我一个输出(select 语句)。
现在的问题是,当我从 service 指向这些 DBs 并尝试使用 DataAdapter.Fill 方法时,它给了我不同的时间(54 - 63 秒 DB1 和在DB2 上42 - 44 秒)在DBs 上始终如一。注意到我使用相同的服务指向DBs,所以它不能是服务行为/性能。现在我的问题是:
这可能是什么原因?欢迎任何建议我应该调查什么?
帮助信息:
两个数据库位于不同的
servers(相同配置)上,但由于在SQL Server Management Studio上执行SP需要相同的时间 在DBs上,所以我排除了DBserver性能的可能性。 网络延迟可能是一个因素但极不可能因为servers位于同一网络上,实际上位于同一物理位置。这是我的 最后一个检查选项。其他一些服务正在使用
SQLDependencyONDB1。一直填充DataAdapter(s),这可能是我的原因吗DataAdapterfill减速的方法? (我猜不太可能)
根据下面 cmets 的要求,是填充 DataSet 的代码:
PS:上面提到的时间是上图中高亮代码行的执行时间。
【问题讨论】:
-
如果
DB2是DB1的恢复备份,那么DB1是否只是有更多的过程返回的数据?我在想DB1可能是一个生产数据库,而DB2是一个测试数据库。所以第一个可能会以更快的速度填充新数据...... -
您的
select查询是否包含带有参数的where? -
通常当你听到 SSMS 里面快,外面慢,这闻起来像是参数嗅探问题。 stackoverflow.com/search?q=parameter+sniffing
-
@KyloRen 仅用于测试目的,以帮助确定问题是在数据库查询执行(第一部分 -
ExecuteReader)还是物化中。如果大部分时间都在第一部分,那么您应该查看查询计划、参数嗅探等。 -
当您 1. 交换两台服务器时会发生什么?从 server2 运行 DB1 并从 server1 运行 DB2 2. 缩小数据库 3. 删除/重新创建所有索引 附加问题:当您从 SQL Profiler 检查查询文本、计划和时间(cpu 读取、持续时间等)时,它们之间有什么区别吗?
标签: c# sql-server ado.net