10 2011 檔案
摘要:在上一篇中忘記了一個細(xì)節(jié)。Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔離級別中,為了保護(hù)范圍內(nèi)的數(shù)據(jù)不被并發(fā)的事務(wù)影響而使用的一類鎖模式(避免幻讀)。它由兩個部分構(gòu)成:第一個部分代表了他鎖定了一個索引范圍,在這個范圍內(nèi),所有索引使用 T 鎖進(jìn)行鎖定;第二個部分是而這個范圍內(nèi)已經(jīng)命中的Key,這些 Key 將使用 K 鎖進(jìn)行鎖定。合并在一起我們說在這個范圍內(nèi),索引范圍和特定的row的鎖定模式為 Range T-K。舉上一篇的一個例子吧:SELECT [data] FROM [MyTable] WHERE [index_column]&g
閱讀全文
摘要:在這篇隨筆中,我們的主要關(guān)注點(diǎn)在 Key-Range Lock。Key-Range Lock有 S-S、S-U、I-N、X-X幾種情況。我們一個一個來說,力求明白。遺憾的是,這里可能會比較冗長,那么死鎖分析只好依次順延了。Range S-S鎖的獲取規(guī)則MSDN 對 Range 鎖的規(guī)則有部分描述,但是言簡意賅,以下我們會將各種情況分解開來,理清MSDN中涉及的或者未涉及的規(guī)則,這些規(guī)則適用于SQL Server 2000/2005/2008/2008 R2。關(guān)于MSDN的描述,請參見:http://technet.microsoft.com/zh-cn/library/ms191272(en-
閱讀全文
摘要:最近在項(xiàng)目中進(jìn)行壓力測試遇到了數(shù)據(jù)庫的死鎖問題,簡言之,如下的代碼在 SERIALIZABLE 隔離級別造成了死鎖:SELECT @findCount=COUNT(id) FROM MyTableWHERE [fk_related_id]=@ArgumentIF (@findCount > 0)BEGIN ROLLBACK TRANSACTION RETURN ERROR_CODEENDINSERT INTO MyTable ([fk_related_id],…)VALUES (@Argument,…)COMMIT TRANSACTIONRETURN SUCCESS_CODE在搞清楚這個
閱讀全文
浙公網(wǎng)安備 33010602011771號