Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

अद्यतन + के साथ (रोलॉक) + सीटीई

NOLOCK क्वेरी के उस भाग पर लागू नहीं होता जो संशोधित की जाने वाली तालिका का संदर्भ देता है। SQL सर्वर अपडेट स्टेटमेंट में परीक्षण के दौरान प्रत्येक पंक्ति को संक्षेप में यू-लॉक करें। यह एक गतिरोध से बचाव तंत्र है। यह पढ़ने के लिए प्रत्येक एस-लॉक पंक्ति में एकाधिक अपडेट को रोकता है और फिर इसे एक्स-लॉक करने का प्रयास करता है।

आप यू-लॉक को AFAIK से दूर नहीं कर सकते। लेकिन आप स्वयं शामिल होकर यू-लॉक की गई पंक्तियों की मात्रा को न्यूनतम से कम कर सकते हैं:

update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)

यह थोड़ा ओवरहेड जोड़ता है लेकिन यह आपको NOLOCK . का उपयोग करने की अनुमति देता है पढ़ने के लिए।

पढ़ने के लिए स्नैपशॉट अलगाव का उपयोग करने पर विचार करें। NOLOCK कुछ समस्याएं हैं, जैसे कि प्रश्नों का बेतरतीब ढंग से निरस्त होना।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विभिन्न टाइमस्टैम्प के साथ डुप्लिकेट प्रविष्टियाँ

  2. एक टीएसक्यूएल 2008 संग्रहीत प्रक्रिया में एक सूची पास करना

  3. ऑड इनर जॉइन सिंटैक्स और एनकैप्सुलेशन

  4. SQL सर्वर में इस आउटपुट को कैसे क्वेरी करें

  5. SQL सर्वर ANSI_NULLS समझाया गया