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

टी-एसक्यूएल कंपाउंड स्टेटमेंट डेडलॉक का कारण बनता है, कोई विचार क्यों?

आपको या तो अधिक या कम ताले रखने की आवश्यकता है।

सबसे आसान जवाब है या तो NOLOCK . पर जाएं (सर्वश्रेष्ठ प्रदर्शन) या TABLOCKX (सोचने के बिना संगति)।

यदि आप with (nolock) . का उपयोग नहीं कर सकते हैं संगतता आवश्यकताओं के कारण, आप with (tablockx) जोड़ सकते हैं .इसका प्रभावी अर्थ यह होगा कि एक समय में केवल एक थ्रेड समान कथनों को निष्पादित कर सकता है - कोई समरूपता नहीं होगी।

विकल्प यह है कि आप अपनी आवश्यकताओं का अधिक विस्तार से विश्लेषण करें, जो यह समझे बिना नहीं किया जा सकता है कि आप तालिका को अपडेट क्यों कर रहे हैं, डेटा किस लिए है आदि।

उदाहरण के लिए, क्या यह कथन वास्तव में लेन-देन में होना चाहिए? इसमें हाउसकीपिंग जैसी महक आती है:

  DELETE FROM [dbo].[t_Log_2] 
  WHERE [idtm]<'2011-03-12 08:41:57';

यदि आप इसे लेन-देन से निकाल लेते हैं, और इसे एक अलग बैच में रखते हैं, तो आप पाएंगे कि समस्याएं दूर हो गई हैं।




  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. SQL सर्वर 2008 में उपयोगकर्ता नाम और पासवर्ड के बिना `sqlcmd` कमांड का उपयोग कैसे करें?

  4. लेन-देनस्कोप अपवाद फेंक रहा है, यह प्लेटफॉर्म कनेक्शन ऑब्जेक्ट खोलते समय वितरित लेनदेन का समर्थन नहीं करता है

  5. SQL सर्वर त्रुटि - HRESULT E_FAIL को कॉल से COM घटक में वापस कर दिया गया है