慕哥9229398
2019-08-17 14:47:21
是NOLOCK(Sql Server提示)不好的做法嗎?我的業(yè)務(wù)是制作非關(guān)鍵任務(wù)的網(wǎng)站和應(yīng)用程序- 例如。銀行軟件,太空飛行,重癥監(jiān)護(hù)應(yīng)用等。你明白了。那么,有了這個(gè)龐大的免責(zé)聲明,在一些Sql語(yǔ)句中使用NOLOCK提示是不是很糟糕?幾年前,一位Sql管理員建議我應(yīng)該使用NOLOCK,如果我對(duì)“臟讀”感到滿(mǎn)意,這會(huì)讓我的系統(tǒng)性能提高一些,因?yàn)槊看巫x取都沒(méi)有鎖定表/行/不管。我還被告知,如果我遇到死鎖,這是一個(gè)很好的解決方案。所以,我開(kāi)始關(guān)注這個(gè)想法幾年,直到一個(gè)Sql大師幫我一些隨機(jī)代碼并注意到我的sql代碼中的所有NOLOCKS。我被禮貌地罵了,他試圖向我解釋?zhuān)槭裁催@不是一件好事)而且我迷路了。我覺(jué)得他的解釋的本質(zhì)是'它是一個(gè)解決更嚴(yán)重問(wèn)題的創(chuàng)可貼解決方案......特別是如果你遇到了死鎖。因此,修復(fù)問(wèn)題的根源。我最近做了一些谷歌搜索,并發(fā)現(xiàn)了這篇文章。那么,有些sql db guru sensei的請(qǐng)賜教嗎?
3 回答

尚方寶劍之說(shuō)
TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您不關(guān)心臟讀(即主要處于READ狀態(tài)),那么NOLOCK
就可以了。
但是,請(qǐng)注意,大多數(shù)鎖定問(wèn)題是由于沒(méi)有查詢(xún)工作負(fù)載的“正確”索引(假設(shè)硬件完成任務(wù))。
大師的解釋是正確的。它通常是解決更嚴(yán)重問(wèn)題的創(chuàng)可貼解決方案。
編輯:我絕對(duì)不建議使用NOLOCK。我想我應(yīng)該明白這一點(diǎn)。(我只會(huì)在極端情況下使用它,我已經(jīng)分析過(guò)它可以)。作為一個(gè)例子,前一段時(shí)間我在一些TSQL上工作,這些TSQL上撒有NOLOCK以試圖緩解鎖定問(wèn)題。我刪除了所有,實(shí)現(xiàn)了正確的索引,所有的死鎖都消失了。
添加回答
舉報(bào)
0/150
提交
取消