我試圖從我的C#web應用程序中運行插入查詢。當我從SQL Server Management Studio運行查詢時,插入查詢大約需要五分鐘才能完成。當從應用程序運行時,它會在三十分鐘後超時(是分鐘而不是秒)。在C#web應用程序中插入查詢超時,從SQL Server Management Studio運行正常
我已經從VS調試器中抓取了實際的SQL語句,並從Mgmt Studio中運行它,它工作正常。
所有這些都是從我的開發環境運行,而不是生產環境。查詢過程中沒有其他SQL Server活動。我正在使用SQL Server 2008 R2進行開發。 MS VS 2010 Express,Asp.Net 4.0。 SQL Server的管理工作室10
也有同樣的問題,這是從來沒有回答:SQL server timeout 2000 from C# .NET
這裏的SET選項從:DBCC USEROPTIONS
Option MgtStudio Application
----------------------- -------------- --------------
textsize 2147483647 -1
language us_english us_english
dateformat mdy mdy
datefirst 7 7
lock_timeout -1 -1
quoted_identifier SET SET
arithabort SET NOT SET
ansi_null_dflt_on SET SET
ansi_warnings SET SET
ansi_padding SET SET
ansi_nulls SET SET
concat_null_yields_null SET SET
isolation level read committed read committed
只有TEXTSIZE和ARITHABORT是不同的。
任何想法,爲什麼在查詢執行時間有這樣的差異,我可以做些什麼來縮小差異?
我不確定包括查詢在內會有多大用處,特別是因爲包含模式太多了。無論如何,那就是:
INSERT INTO GeocacherPoints
(CacherID,
RegionID,
Board,
Control,
Points)
SELECT z.CacherID,
z.RegionID,
z.Board,
21,
z.Points
FROM (SELECT CacherID,
gp.RegionID,
Board=gp.Board + 10,
(CASE
WHEN (SELECT COUNT(*)
FROM Geocache g
JOIN GeocacheRegions r
ON (r.CacheID = g.ID)
WHERE r.RegionID = gp.RegionID
AND g.FinderPoints >= 5) < 20 THEN NULL
ELSE (SELECT SUM(y.FinderPoints)/20
FROM (SELECT x.FinderPoints,
ROW_NUMBER() OVER (ORDER BY x.FinderPoints DESC, x.ID) AS Row
FROM (SELECT g.FinderPoints,
g.ID
FROM Geocache g
JOIN Log l
ON (l.CacheID = g.ID)
JOIN Geocacher c
ON (c.ID = l.CacherID)
JOIN GeocacheRegions r
ON (r.CacheID = g.ID)
WHERE YEAR(l.LogDate) = @Year
AND g.FinderPoints >= 5
AND c.ID = gp.CacherID
AND r.RegionID = gp.RegionID) x) y
WHERE y.Row <= 20)
END) Points
FROM GeocacherPoints gp
JOIN Region r
ON r.RegionID = gp.RegionID
WHERE gp.Control = 21
AND r.RegionType IN ('All', 'State')
AND gp.Board = @Board - 10) z
WHERE z.Points IS NOT NULL
AND z.Points >= 1
我剛剛回答,但我意識到你說過30分鐘後超時,而不是秒;這是正確的數字還是它是一個錯字(即30秒後超時而不是分鐘)? –
嘗試指定插入記錄時在表中聲明的參數的確切類型。 – Sunny
是的,30分鐘! – Russ