【发布时间】:2019-01-21 18:15:58
【问题描述】:
我正在使用 Dapper 从我的 Web 应用程序运行存储过程。我首先从 SSMS 运行了相同的存储过程,以确保一切正常。它从 SSMS 运行 1-5 秒。
然后我将我的脚本复制/粘贴到我的应用程序中以通过 Dapper 运行。当我运行我的应用程序并逐步调试我的代码时,存储过程运行了 2 分钟以上并超时。这是相同的确切代码。什么可能导致差异?
这是我从 SSMS 运行的代码:
DECLARE @RC int
DECLARE @ownerId varchar(50)
DECLARE @type varchar(50)
DECLARE @dateFrom datetime
DECLARE @dateTo datetime
DECLARE @offset int
DECLARE @perPage int
SET @ownerId = '990042064'
SET @type = 'voice'
SET @dateFrom = '2018-05-16 00:00:00.000' --'YYYY-MM-DD hh:mm:ss[.nnn]'
SET @dateTo = '2018-08-14 23:59:59.000' --'YYYY-MM-DD hh:mm:ss[.nnn]'
SET @offset = 0
SET @perPage = 50
EXECUTE @RC = dbo.IndexSearch @ownerId
,@type
,@dateFrom
,@dateTo
,@offset
,@perPage
GO
这是从我的应用程序运行的代码:
using (IDbConnection db = new SqlConnection(ConnectionStringHelper.ConnectionString))
{
dbRecs = db.Query<IndexRec>(@"
DECLARE @RC int
DECLARE @ownerId varchar(50)
DECLARE @type varchar(50)
DECLARE @dateFrom datetime
DECLARE @dateTo datetime
DECLARE @offset int
DECLARE @perPage int
SET @ownerId = '990042064'
SET @type = 'voice'
SET @dateFrom = '2018-05-16 00:00:00.000'--'YYYY-MM-DD hh:mm:ss[.nnn]'
SET @dateTo = '2018-08-14 23:59:59.000'--'YYYY-MM-DD hh:mm:ss[.nnn]'
SET @offset = 0
SET @perPage = 50
EXECUTE @RC = dbo.IndexSearch @ownerId
, @type
, @dateFrom
, @dateTo
, @offset
, @perPage
", commandTimeout: 120);
}
我什至尝试在几台不同的机器上运行 SSMS,我总是在 1-5 秒内完成它。而且我已经从应用程序运行了多次相同的查询,但它总是超时。
脚本本身是否有任何东西导致执行计划不同?我也在使用来自 SSMS 和我的应用的相同登录信息。
【问题讨论】:
-
最有可能的参数嗅探。 Slow in the Application, Fast in SSMS?
-
但如果是这样的话,它不会从 SSMS 开始运行缓慢吗?
-
Matt,对 Lukasz 所链接的优秀资源的最简短的阅读表明,您的问题的答案是“否”。假设你自己看看。
-
是的,我现在确实看到了...
-
两分钟后超时。对我来说听起来像是网络问题。你确定它甚至可以连接到 SQL 服务器?
标签: c# sql sql-server