線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2830
推到 Plurk!
推到 Facebook!

造成lock request time out period exceeded的原因,謝謝。

答題得分者是:show8514012
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-10 17:36:27 IP:219.87.xxx.xxx 訂閱
請問一下各位,我是使用mssql2000當db,然後我的軟體會使用下面的預儲程序(簡稱sp),請問我的軟體一次可能會有多個(目前最多為八個),在執行時都會執行到這個sp,並且在每一個軟體中都會做select的動作(我是有加上nolock,這個關鍵字),但是執行一段時間後就會出現 「lock request time out period exceeded」的訊息,但是我測試過完成一個sp的時間最多不超過五秒,而我設定了timeout為30000,所以應該不可能會沒處理完,請問一下,我下面這個sp還有什麼地方可能會造成錯誤嗎?我有找過google,有看到有人提議用「set   transaction   isolation   level   read   uncommitted」,請問加這一行會有幫助嗎?謝謝,請各位幫忙一下,或是指導一下小弟有關這方面的問題,謝謝你花時間閱讀,謝謝。

[code sql]
CREATE procedure dbo.execBulkInsert
( @path varchar(30),@KIND VARCHAR(10),@PARAM1 VARCHAR(128), @BoardSN varchar(30),@fdate varchar(20), @up varchar(2),
@VINT INT OUTPUT)
AS
BEGIN
DECLARE @vTestCount int,
@Var1 VARCHAR(30)
SET LOCK_TIMEOUT 30000

SET XACT_ABORT ON
IF @KIND='Insert'
BEGIN
SET XACT_ABORT ON
BEGIN TRAN
exec ('bulk insert board' @path ' from ''' @PARAM1 @path 'board.txt'' WITH (BATCHSIZE = 1000, FIELDTERMINATOR = '','', TABLOCK , MAXERRORS=0 )')
exec ('bulk insert component' @path ' from ''' @PARAM1 @path 'component.txt'' WITH ( BATCHSIZE = 1000, FIELDTERMINATOR = '','', TABLOCK , MAXERRORS=0 )')
exec ('bulk insert boardSFC from ''' @PARAM1 @path 'boardSFC.txt'' WITH (BATCHSIZE = 1000, FIELDTERMINATOR = '','', TABLOCK , MAXERRORS=0 )')
exec ('bulk insert componentSFC from ''' @PARAM1 @path 'componentSFC.txt'' WITH ( BATCHSIZE = 1000, FIELDTERMINATOR = '','', TABLOCK , MAXERRORS=0 )')
exec ('bulk insert OpenShort from ''' @PARAM1 @path 'Pin.txt'' WITH (BATCHSIZE = 1000, FIELDTERMINATOR = '','', TABLOCK , MAXERRORS=0 )')
COMMIT TRAN
RETURN
END
END
GO

[/code]
------
DELPHI初學者
show8514012
一般會員


發表:0
回覆:2
積分:5
註冊:2002-12-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-12 12:05:14 IP:59.120.xxx.xxx 訂閱
Dear..
我在書上查到這部份的資料
設定Database 的 屬性 TransIsolation 為 tiDirtyRead
是可改善被其他異動作業使用時. 無法讀出資料的問題
但. 若你的問題是在於lock 過久. 那設這個只是解了它造成其他作業無法讀取的問題.
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-12 13:34:04 IP:219.87.xxx.xxx 訂閱
嗯,非常謝謝你的回覆,我目前的問題應該是為何會lock住,我在想說會不會是因為我的client會同時連接到db然後同時call這個sp所以會造成這種現象,還是說有什麼方式可以查明是什麼原因導致的方法,之前有人提到說用profile的功能查詢每一句sql語法,所以我都有針對sql語法去做檢查,盡量用快速的方式得到結果,但不知為什麼還是會有lock,而且我的sp是只做bulkinsert的動作,而且只要是ok的流程,都不會超過一秒,並且我也有set time_out這個屬性,還是會lock,這就真的很怪了。
===================引 用 show8514012 文 章===================
Dear..
我在書上查到這部份的資料
設定Database 的 屬性 TransIsolation 為 tiDirtyRead
是可改善被其他異動作業使用時. 無法讀出資料的問題
但. 若你的問題是在於lock 過久. 那設這個只是解了它造成其他作業無法讀取的問題.
------
DELPHI初學者
系統時間:2024-04-20 17:31:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!