背景

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

 

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

存儲(chǔ)過程

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

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

 

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

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

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

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

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

 

網(wǎng)友評論