我有一個簡單的過程,從表中選擇1000行。爲了清楚起見,這裏的存儲過程是什麼樣子:爲什麼SQL Server在選擇語句期間返回一些行之後會停止運行?
alter procedure dbo.GetDomainForIndexing
@Amount int=1,
@LastID bigint,
@LastFetchDate datetime
as
begin
select top (@Amount) *
from DomainName with(readuncommitted)
where LastUpdated > @LastFetchDate
and ID > @LastID
and ContainsAdultWords is not null
order by ID
end
我一直有問題,它會運行此特定程序細一堆倍,唯一的區別在於不同的@LastID
值每次都通過。一旦我得到一個特定的ID,程序會立即返回前880行(管理工作室發生這種情況),然後坐在那裏,在接下來的6分鐘內停下來,然後返回剩餘的120行。
究竟是什麼會導致這樣的行爲?沒有與連接關聯的事務,並且沒有連接池問題。 (readuncommitted)位不影響該問題。這個問題既出現在我的應用程序中,也出現在我將命令文本複製到SQL Management Studio進行測試的時候;事實上,我發現了這種奇怪的拖延行爲。最初我只是想弄清楚爲什麼這個程序能夠很好地工作,然後突然開始拖延,沒有明顯的原因。
任何想法?
UPDATE
要求883行時,但不是要求882行時的問題也會發生(拖延已返回880行後)。
UPDATE 2
從sys.sysprocesses
和sys.dm_exec_requests
選擇指示的PAGEIOLATCH_SH
一個lastwaittype。我該怎麼辦?
已嘗試將參數嗅探作爲解決方案,但沒有幫助。關於lastwaittype,你是什麼意思?我沒有數據庫管理員:D – 2010-03-10 21:03:31
基本上,客戶端窒息數據和填充SQL Server網絡緩衝區...更新後,你有沒有屏蔽*所有*參數 – gbn 2010-03-10 21:15:04
我開除了程序,然後一次880行已經返回,我運行了'select * from sys.dm_exec_requests',它返回了一行,狀態爲'RUNNING',last_wait_type爲'MISCELLANEOUS'。所以我猜這不是'ASYNCH_NETWORK_IO' ... – 2010-03-10 21:23:02