2015-12-21 118 views
1

我的應用程序在Jboss 2.4上的EJB 1.1上運行並使用Sybase。最近我們看到一個問題,那就是某個表上有無限制的鎖,導致後續查詢等待鎖釋放,從而導致整個應用程序失敗。數據庫管理員聲稱,該應用程序沒有釋放任何鎖,並且我們沒有對處理該特定表的代碼進行任何更改。我的問題是,是否有任何常見問題與需要檢查的Jboss 2.4或任何特定領域尋找?在Sybase ASE中未釋放的鎖

我運行的查詢只是一個簡單的選擇/更新語句與read_committed事務隔離。我從jboss池中獲取連接並執行select或update,然後關閉連接,語句和結果集。

爲什麼問題是隨機發生的?

對不起,我無法提供任何代碼。

+1

只需添加到下面的答案,如果您不希望進行服務器範圍更改,也可以基於每個表配置鎖。啓用數據行時會有額外的開銷,所以如果您只有一些表有問題,您可能只想更改這些表。 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20021_1251/html/locking/X12029.htm –

+0

我會建議詢問數據庫管理員有關鎖定連接的所有信息。假設此RDBMS是Sybase ASE而不是ASA或其他,則可以在syslocks中查詢鎖,在鎖中可以獲取鎖定進程的連接標識(spid)。從spid中可以得到sysprocesses中的一些信息:開始時間,用戶和一些依賴於應用程序的信息。收集所有,也許這允許識別jboss交易並推斷結論。 – Corral

回答

2

對於Sybase ASE,我同時使用兩個事務同時使用兩個事務。

很難給出一個確切的答案,但沒有看到您的任何代碼,只能讀取有關症狀的信息,但調整您的鎖定方案應該可以做到。

修復建議:

默認情況下,爲Sybase ASE的鎖定方案是「所有頁」,我發現是容易死鎖。要解決死鎖,請使用更精細的鎖定機制(如「datarows」)。

配置lock scheme

sp_configure "lock scheme", 0, datarows 

參考文獻:

編輯:

在評論中Michael Gardner指出,這可以根據每個表格進行更改,這樣就可以控制無需更改整個服務器上的鎖定方案,並且如果您知道哪些表給你帶來問題。

alter table table_name lock datarows 
+1

我也建議通過'alter table'添加更改個別表上的鎖定方案到您的答案。使用數據行會產生額外的開銷,所以如果只有少數表有問題,那麼在整個服務器上更改方案可能並不理想。檢查我上面評論中的鏈接,獲取語法 –

+0

@MichaelGardner Thanks!我已經用你的建議更新了我的答案。 –

1

聽起來有可能不提交公開的交易?查詢master..syslogshold以獲得清晰度。

+0

你好,有可能你可以檢查這個問題嗎? http://stackoverflow.com/questions/34995600/sybase-alternative-way-for-error-to-catch-error – Moudiz