我知道(nolock)
優化器提示允許「髒讀」,但在特定情況下這是一個壞主意?我從未在組織中看到如此廣泛的使用(nolock)
,這讓我感到緊張。我想用用戶故事來解釋。 「保羅做A,彼得做B,X發生而不是Y」。在SQL Server的每個SELECT中使用(nolock)會導致什麼情況?
回答
轉貼this答案:
NOLOCK
意味着將沒有鎖的。
您的查詢可能會返回UPDATE
之前的部分數據,以及UPDATE
之後的部分在單個查詢中。
像,沒有信用和這些東西的借方。
舉例來說,我只是跑了一大桌此查詢:
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18874367
所有name
的有1
長度。
然後我重新它,並在查詢中更新的表的中間:
UPDATE master
SET name = 'tt'
WHERE id <= 10000
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18874944
我們可以看到,這個查詢發現577
行作爲更新(長度2
),不更新所有其他行(長度1
)。
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18884367
而這個查詢,在前一個完成後運行,看到所有更新。
我最近花了很多時間找出數據倉庫構建過程的一些時間並阻止了問題。事實證明,由於用於加載倉庫的數據的只讀屬性,我在etl的源數據查詢中添加了nolock提示,以減少sql服務器上鎖升級的需求並保持etl負載不發生故障。對於這一個我很少控制SQL服務器和應用程序。再次,這是一個有針對性的解決方案,我不推薦廣泛使用任何查詢提示作爲一般規則。像所有的性能測試和評估一樣,有一些關鍵的方面需要考慮來確定問題的出在哪裏,以及什麼可能是最好的攻擊方式。
如果源數據是隻讀的,爲什麼它的問題,如果一個共享讀鎖放在它?也許我誤解了你寫的內容? – 2012-11-27 20:55:43
這不是我的問題的答案,它是倡導NOLOCK作爲一種策略。與我正在尋找的東西相反。 -1。 – 2012-11-28 15:46:37
- 1. 什麼情況會導致NetworkStream.Write阻塞?
- 2. 什麼情況會導致在Firefox中觸發nsiWebProgressListener.STATE_START?
- 3. 在SQL Server 2008中使用表(NOLOCK)
- 4. 如何使用的情況下用select語句在SQL Server 2000
- 5. 哪些情況會導致select返回不同的訂單
- 6. 你會在什麼情況下使用Select from without?
- 7. SQL SERVER 2008 SELECT語句的情況下
- 8. 訂購情況導致SQL
- 9. 什麼情況會導致定時器中斷衝突/遺漏?
- 10. 在SELECT語句中使用NOLOCK的目的是什麼?
- 11. 什麼情況會導致Web應用程序及時編譯?
- 12. 什麼情況導致設計註銷?
- 13. 如果有的話,什麼情況會導致TextView.setText(「」)阻塞?
- 14. 在Android中爲JNI調用NewObjectArray時會導致SIGSEGV的什麼情況?
- 15. 什麼情況會導致間歇性的JAXBExceptions?
- 16. SQL Server視圖導致不同的SELECT
- 17. 導致阻塞的SQL Server SELECT語句
- 18. SQL Server中的內存使用情況?
- 19. 什麼情況會導致Java線程意外返回?
- 20. 什麼情況會導致clock()返回-1(即失敗)?
- 21. 什麼情況會導致IE8偶爾不加載腳本?
- 22. 什麼情況會導致iVar改變其類型?
- 23. SQL Server遞歸CTE - 爲什麼會出現這種情況?
- 24. 在什麼情況下,setState()不會導致React Component中的重新渲染?
- 25. 爲什麼熊貓在一種情況下會導致「ZeroDivisionError」,但在另一種情況下卻不會呢?
- 26. 使用select情況
- 27. 這個SELECT語句爲什麼會鎖定在SQL Server上?
- 28. NOLOCK是SQL Server 2005中SELECT語句的默認值嗎?
- 29. SQL 2008 - 我是否在簡單的select語句中使用NOLOCK?
- 30. 情況下,導致在同一個查詢中使用
不重新發布答案意味着問題重複? – AnthonyWJones 2009-11-05 17:49:04
編號'42'對於許多問題是一個很好的答案:) – Quassnoi 2009-11-05 18:09:52
你也可以提到這種行爲並不是唯一的'READ UNCOMMITTED' - 它可以發生在'READ COMMITTED'和'REPEATABLE READ'。它在更低的隔離級別上更可能。 – 2012-01-25 19:15:22