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

क्या अवरुद्ध कर रहा है तालिका नाम से शीर्ष 1 * का चयन करें (नोलॉक) परिणाम लौटने से?

SELECT NOLOCK . के साथ क्वेरीज़ वास्तव में कोई ताला नहीं है, उन्हें अभी भी एक SCH-S . की आवश्यकता है (स्कीमा स्थिरता) टेबल पर लॉक (और जैसा कि यह एक है ढेर यह एक hobt भी लेगा ताला )

इसके अतिरिक्त SELECT . से पहले SQL सर्वर को स्टेटमेंट के लिए एक योजना संकलित करनी चाहिए, जिसके लिए इसे SCH-S लेने की भी आवश्यकता होती है। मेज पर ताला लगाओ।

चूंकि आपका लंबे समय तक चलने वाला लेन-देन SELECT ... INTO . के माध्यम से तालिका बनाता है इसमें एक असंगत SCH-M है स्टेटमेंट पूरा होने तक इसे लॉक करें।

आप इसे sys.dm_os_waiting_tasks . में देख कर सत्यापित कर सकते हैं <स्ट्राइक>जबकि <स्ट्राइक>जबकि अवरुद्ध करने की अवधि के दौरान।

जब मैंने एक कनेक्शन में निम्नलिखित की कोशिश की

BEGIN TRAN

SELECT *
INTO NewT
FROM master..spt_values

/*Remember to rollback/commit this later*/

और फिर क्रियान्वित करना (या केवल अनुमानित निष्पादन योजना को देखने का प्रयास करना)

SELECT *
FROM NewT
WITH (NOLOCK)

एक सेकंड में रीडिंग क्वेरी ब्लॉक कर दी गई।

SELECT wait_type,
       resource_description
FROM sys.dm_os_waiting_tasks
WHERE session_id = <spid_of_waiting_task>

दिखाता है कि प्रतीक्षा प्रकार वास्तव में है SCH_S और अवरुद्ध संसाधन SCH-M

wait_type        resource_description
---------------- -------------------------------------------------------------------------------------------------------------------------------
LCK_M_SCH_S      objectlock lockPartition=0 objid=461960722 subresource=FULL dbid=1 id=lock4a8a540 mode=Sch-M associatedObjectId=461960722


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे दो SQL प्रश्नों से ये भिन्न परिणाम क्यों मिलते हैं?

  2. इकाई डेटा ढांचे से ट्रिगर के बजाय तालिका में डालने पर त्रुटि

  3. HH:MM:SS प्रारूप में DatedIFF

  4. Vbscript का उपयोग करके SQL सर्वर पर एक बड़े csv (500k रिकॉर्ड) को संसाधित करने और आयात करने का सबसे अच्छा तरीका क्या है?

  5. क्या वास्तविक समय में 2 SQL सर्वर डेटाबेस को सिंक्रनाइज़ करना संभव है