背景

最近給客戶做優(yōu)化時,有幾個客戶都存在.SLEEPING 會話中開啟了事務(wù),導(dǎo)致的大量阻塞,從而產(chǎn)生嚴重的性能問題。雖然在之前的文章我分享了Sleeping會話導(dǎo)致阻塞原理(上) 。說明了什么是Sleeping會話,以及他可能導(dǎo)致的問題。但是對如何解決問題,給出的方案,還是太簡單了,沒有給出解決的細節(jié)。本文將對這些細節(jié)進行說明。希望大家面對類似問題時更容易下手

 

下面分享2個案例,分別針對針對問題來著存儲過程 和 程序 中的情況。

存儲過程

以下是某醫(yī)藥公司的案例截圖:

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設(shè)計培訓,網(wǎng)站建設(shè)培訓

 

從圖中可以看到,230 處于SLEEPING 狀態(tài)并且產(chǎn)生了大量的阻塞。查看子語句可以知道230運行的是一個存儲過程。

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設(shè)計培訓,網(wǎng)站建設(shè)培訓

問題就在于:在這個存儲過程中,開啟事務(wù)(如下圖所示),并且運行到后面某個語句時出錯了(可能是超時,或者其他錯誤)。但是開啟的事務(wù)并沒有回滾.

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設(shè)計培訓,網(wǎng)站建設(shè)培訓

有的同學,可能知道,在存儲過程中 加入tray catch ,出錯時回滾事務(wù)。這個解決辦法并不徹底。對應(yīng)有些錯誤是無法捕捉,對應(yīng)這種情況,,我們可以在存儲過程中直接加上:SET XACT_ABORT ON 。當存儲過程執(zhí)行時發(fā)生問題時,會自動回滾所有事務(wù),從而避免了阻塞。

 

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設(shè)計培訓,網(wǎng)站建設(shè)培訓學習是年輕人改變自己的最好方式