PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   資料庫問題請教 (https://www.pcdvd.com.tw/showthread.php?t=1066870)

2011新的世紀 2014-12-29 11:15 AM

引用:
作者comics
如果再去用 SELECT 統計總數,在同時大量購買的狀況下反而造成DATA LOCK...

我在想是否可以用 TRIGGER 自動去加總異動人數統計..


主因應該是LR2001所講得,有uncommit的transactions。
現在SQL server預設的isolate transaction level是read commit。所以未commit會造成read lock的情況。
如果可以有辦法不要使用交易,就可以簡單化這個情況。
或是更改transaction isolate level
(參考SET TRANSACTION ISOLATION LEVEL (Transact-SQL) 。如read uncommit就不會因交易作業而鎖住read動作。

使用trigger通常會慢一點,因主要原因是在transaction這裡鎖住了。

ycli6921兄是最好的解法。但是若是server cluster的環境下比較難實現。
其實在大部份情況下是可以不用動到交易的。

micall.lee 2014-12-29 11:20 AM

引用:
作者comics
我們的狀況就是類似您舉出的狀況,

依shinRong的建議
目前的確也是有建一個欄位在物件主檔...
我會試著去把這個欄位拉出來...

因為大量同時INSERT 購買的紀錄...
如果再去用 SELECT 統計總數,在同時大量購買的狀況下反而造成DATA LOCK...

我在想是否可以用 TRIGGER 自動去加總異動人數統計..

恩,那我的方案是沒有考慮你們的狀況,請參考就好

comics 2014-12-29 03:12 PM

引用:
作者2011新的世紀
主因應該是LR2001所講得,有uncommit的transactions。
現在SQL server預設的isolate transaction level是read commit。所以未commit會造成read lock的情況。
如果可以有辦法不要使用交易,就可以簡單化這個情況。
或是更改transaction isolate level
(參考SET TRANSACTION ISOLATION LEVEL (Transact-SQL) (http://msdn.microsoft.com/zh-tw/library/ms173763.aspx) 。如read uncommit就不會因交易作業而鎖住read動作。

使用trigger通常會慢一點,因主要原因是在transaction這裡鎖住了。

ycli6921兄是最好的解法。但是若是server cluster的環境下比較難實現。
其實在大部份情況下是可以不用動到交易的。


後來我也有查到 TRIGGER 會變慢.../_\

糟糕就是 不能不用交易...

comics 2014-12-29 03:58 PM

引用:
作者comics
後來我也有查到 TRIGGER 會變慢.../_\

糟糕就是 不能不用交易...


剛才問了其他同事

都是說 把 UPDATE 獨立出 交易...

若後續的交易失敗 ,就將原來那筆資料 -1...

stylus 2014-12-29 04:49 PM

引用:
作者ycli6921
累計購買數量放在記憶體裡,每次訂單進來做對應的遞增。


是指在SQL Server裡面設全區變數嗎?


所有的時間均為GMT +8。 現在的時間是02:12 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。