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

SQL Server 2008 में एक अस्थायी तालिका पर नोलॉक करें

आप अपने लिए निकाले गए ताले को देखने के लिए ट्रेस फ़्लैग 1200 (एक विकास मशीन पर जैसा कि मुझे लगता है कि यह वैश्विक है) का उपयोग कर सकते हैं

SET NOCOUNT ON;

CREATE TABLE ##T
(
X INT
)

INSERT INTO ##T 
SELECT number
FROM master..spt_values

CREATE TABLE #T
(
X INT
)
INSERT INTO #T
SELECT *
FROM ##T

/*Run the commands first with the trace flag off so the locking
info is less full of irrelevant stuff about plan compilation 
*/
GO

PRINT '##T Read Committed'
SELECT COUNT(*) FROM ##T
PRINT '##T NOLOCK'
SELECT COUNT(*) FROM ##T WITH (NOLOCK)
PRINT '##T Finished'

GO

PRINT '#T Read Committed'
SELECT COUNT(*) FROM #T
PRINT '#T NOLOCK'
SELECT COUNT(*) FROM #T WITH (NOLOCK)
PRINT '#T Finished'

GO

DBCC TRACEON(-1,3604)
DBCC TRACEON(-1,1200)

GO

PRINT '##T Read Committed'
SELECT COUNT(*) FROM ##T
PRINT '##T NOLOCK'
SELECT COUNT(*) FROM ##T WITH (NOLOCK)
PRINT '##T Finished'

GO

PRINT '#T Read Committed'
SELECT COUNT(*) FROM #T
PRINT '#T NOLOCK'
SELECT COUNT(*) FROM #T WITH (NOLOCK)
PRINT '#T Finished'

GO

DBCC TRACEOFF(-1,3604)
DBCC TRACEOFF(-1,1200)

DROP TABLE ##T
DROP TABLE #T

एक वैश्विक अस्थायी तालिका के लिए यह आश्चर्यजनक रूप से अधिक अंतर डालता है।

स्थानीय #temp . के लिए लॉक के प्रकार में अभी भी एक छोटा सा अंतर है हालांकि टेबल। मैं नीचे दिए गए आउटपुट के उस हिस्से को पुन:पेश करता हूं

#T Read Committed
Process 56 acquiring IS lock on OBJECT: 2:301244128:0  (class bit0 ref1) result: OK

Process 56 acquiring S lock on OBJECT: 2:301244128:0  (class bit0 ref1) result: OK

Process 56 releasing lock on OBJECT: 2:301244128:0 

#T NOLOCK
Process 56 acquiring Sch-S lock on OBJECT: 2:301244128:0  (class bit0 ref1) result: OK

Process 56 acquiring S lock on HOBT: 2:9079256880114171904 [BULK_OPERATION] (class bit0 ref1) result: OK

Process 56 releasing lock on OBJECT: 2:301244128:0 

संपादित करें: उपरोक्त परिणाम ढेर के लिए हैं। संकुल अनुक्रमणिका वाली अस्थायी तालिकाओं के लिए परिणाम नीचे दिए गए हैं।

#T Read Committed
Process 55 acquiring IS lock on OBJECT: 2:1790629422:0  (class bit0 ref1) result: OK

Process 55 acquiring S lock on OBJECT: 2:1790629422:0  (class bit0 ref1) result: OK

Process 55 releasing lock on OBJECT: 2:1790629422:0 

#T NOLOCK
Process 55 acquiring Sch-S lock on OBJECT: 2:1790629422:0  (class bit0 ref1) result: OK

Process 55 releasing lock on OBJECT: 2:1790629422:0 

#T Finished

BULK_OPERATION . का कारण हीप संस्करण पर ताला यहां समझाया गया है . लेकिन यह देखा जा सकता है कि लॉकिंग ओवरहेड बहुत कम है।



  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. मैं अल्पविराम से अलग किए गए मान स्ट्रिंग के रूप में SQL तालिका से आईडी की सूची कैसे खींच सकता हूं?

  3. SQL सर्वर में एक स्ट्रिंग से HTML टैग्स को कैसे स्ट्रिप करें?

  4. AMD EPYC 7002 सीरीज प्रोसेसर और SQL सर्वर

  5. मैं उनकी विदेशी कुंजी के आधार पर दो या दो से अधिक पंक्तियों को कैसे मर्ज करूं?