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

द्वारा और के साथ आदेश (रोलॉक, अपडेटलॉक, रीडपास्ट)

उम्मीद के मुताबिक

  • ORDER BY के साथ चयन करें, बिना ROWLOCK के, बिना अनुक्रमणिका के, TOP 2 पर काम करने के लिए स्कैन/मध्यवर्ती प्रकार के कारण टेबल लॉक होगा। इसलिए दूसरा सत्र रीडपास्ट के कारण पूरी तालिका को छोड़ देता है

  • ऑर्डर के बिना चयन केवल 2 पंक्तियों को चुन रहा है, जो सम्मिलित होने के क्रम में होता है (शुद्ध संयोग, कोई निहित आदेश नहीं है)। तथ्य यह है कि ये 2 पंक्तियाँ लॉक हैं, दूसरे सत्र को अगली गैर-लॉक की गई पंक्तियों पर छोड़ देता है।

SQL सर्वर ताले को यथासंभव दानेदार रखने का प्रयास करता है लेकिन स्कैन का अर्थ है एक टेबल लॉक। अब, इससे आम तौर पर कोई फर्क नहीं पड़ेगा (यह एक साझा पठन लॉक होगा) लेकिन आपके पास UPDLOCK भी है जिसका अर्थ है एक विशेष रूप से लॉक की गई तालिका

तो, आपको इन दोनों की ज़रूरत है

  • विवरण, अलगाव और समवर्तीता को नियंत्रित करने के लिए SELECT क्वेरीज़ (ROWLOCK, UPDLOCK, READPAST) में 3 संकेत।
    केवल ROWLOCK का उपयोग करने से अभी भी प्रत्येक पंक्ति पर स्कैन/सॉर्ट करने के लिए एक विशेष लॉक हो जाएगा।
  • Value पर एक अनुक्रमणिका TestID शामिल करें चयन को कुशल बनाने के लिए। एक अनुक्रमणिका केवल संगामिति को ठीक करेगी लेकिन इसकी गारंटी नहीं होगी।

आपके पिछले प्रश्नों में से एक में मैंने अपने उत्तर (एक टिप्पणी में) को एसक्यूएल सर्वर प्रोसेस क्यू रेस कंडीशन जहां मेरे पास सभी 3 लॉक संकेत हैं




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NHibernate + डिफ़ॉल्ट getdate () कॉलम

  2. एएसपीनेट में सूची मानों के आधार पर जहां शर्त के साथ क्वेरी का चयन करें

  3. SQL सर्वर त्रुटि 109:INSERT कथन में VALUES खंड में निर्दिष्ट मानों की तुलना में अधिक स्तंभ हैं

  4. वर्चर (ddmmyyyy) को दिनांक प्रारूप में बदलें

  5. SQL सर्वर 2008 में संग्रहीत कार्यविधि को डिक्रिप्ट कैसे करें