मेरे पास मेरे आवेदन से एक SQL कथन है। मैं जानना चाहता हूं कि कौन सा तालाब बयान प्राप्त करता है; मैं SQL सर्वर के साथ ऐसा कैसे कर सकता हूं? कथन एक डेडलॉक में शामिल किया गया है, जिसे मैं विश्लेषण करने की कोशिश कर रहा हूं; मैं डेडलॉक को पुन: उत्पन्न नहीं कर सकता। मैं एमएस एसक्यूएल सर्वर 2005 पर चल रहा हूं।एसक्यूएल सर्वर पर एक प्रश्न में अधिग्रहण किए गए कौन से ताले ढूंढ रहे हैं?
उत्तर
मैं सुझाव दूंगा कि आप प्रोफेसर ट्रेस को अनिश्चित काल तक चलाने के बजाय पहले उदाहरण में डेडलॉक डिटेक्शन ट्रेस ध्वज चालू करें।
इस तरह, ईवेंट विवरण SQL सर्वर त्रुटि लॉग में लॉग किया जाएगा।
विभिन्न ट्रेस ध्वज के विवरण के लिए निम्नलिखित पुस्तकें ऑनलाइन संदर्भ की समीक्षा करें। आप 1204 और/या 1222
http://msdn.microsoft.com/en-us/library/ms188396(SQL.90).aspx
उपयोग करने के लिए सर्वर गुंजाइश के साथ ट्रेस ध्वज सक्षम करना सुनिश्चित करें और न सिर्फ मौजूदा सत्र की जरूरत है। उदाहरण के उपयोग के लिए:
DBCC TRACEON(1222,-1)
प्रोफाइलर में एक निशान चलाएं (खाली टेम्पलेट चुनें), डेडलॉक ग्राफ़ ईवेंट का चयन करें, और दिखाई देने वाले नए टैब पर (ईवेंट एक्सट्रैक्शन सेटिंग्स), प्रत्येक को सहेजें (अपनी फ़ाइल में अलग से डेडलॉक एक्सएमएल घटनाओं को बचाने के लिए जांचें)। इस फ़ाइल को एक एक्सएमएल व्यूअर में खोलें और यह बताना आसान होगा कि क्या हो रहा है। प्रत्येक प्रक्रिया निहित है, प्रक्रिया कॉल के ढेर के साथ, आदि और सभी ताले भी वहां हैं।
इस ट्रेस को तब तक चलने दें जब तक कि डेडलॉक फिर से न हो जाए, जानकारी केवल तभी दर्ज की जाती है जब डेडलॉक होता है, इसलिए ज्यादा ओवरहेड नहीं होता है। यदि यह फिर कभी नहीं होता है, तो अच्छा हल हो जाता है, अगर आपने सभी जानकारी पर कब्जा नहीं किया है।
लेकिन कर रही है कि मैं परिदृश्य से बनाना होगा ट्रेस चलाते समय के लिए? मैं परिदृश्य को पुन: उत्पन्न नहीं कर सकता। – Tomas
उस ट्रेस को चलाने का ओवरहेड क्या है? – Tomas
इस ट्रेस को उत्पादन में चलाएं, या जहां भी यह हो रहा है। यदि आप फिर से डेडलॉक कभी नहीं देखते हैं, तो कुछ भी अच्छा नहीं है। यदि आप इसे देखते हैं, तो यह रिकॉर्ड होगा कि क्या हुआ और फिर आप यह पता लगा सकते हैं कि क्या हो रहा है। –
आप किसी लेनदेन में बयान चला सकते हैं, लेकिन लेन-देन के लिए प्रतिबद्ध नहीं। चूंकि लेन-देन पूरा होने तक ताले लगाए जाएंगे, यह आपको ताले का निरीक्षण करने का समय देता है। (नहीं अनिश्चित काल के लिए है, लेकिन जैसे 5 मिनट डिफ़ॉल्ट रूप से।)
तरह:
BEGIN TRANSACTION
select * from table
तो ताले जाँच प्रबंधन स्टूडियो खोलने के लिए और। वे प्रबंधन में हैं -> गतिविधि मॉनिटर -> प्रक्रिया द्वारा ऑब्जेक्ट या ताले द्वारा ताले। पूरा करने के बाद, चलाएं:
COMMIT TRANSACTION
ताले मुक्त करने के लिए।
आप प्रश्नों के लिए अपने देव बॉक्स पर एक प्रोफाइलर ट्रेस चला सकते हैं और देख सकते हैं कि ताले क्या हैं। यह आमतौर पर डेटा की एक बड़ी मात्रा है, लेकिन इसमें से अधिकतर पैटर्न होंगे जिन पर आप स्किम कर सकते हैं। जैसे पढ़ने के अलगाव के लिए, आप लॉक का उत्तराधिकार प्राप्त करेंगे और एक टेबल या इंडेक्स स्कैन करते समय जारी किए जाएंगे (प्रत्येक पंक्ति को पढ़ने से पहले लॉक किया जाना चाहिए, और इसे पढ़ने के तुरंत बाद इसे जारी किया जाना चाहिए)।
आप किस अलगाव के तहत चलते हैं? किस प्रकार के प्रश्न डेडलॉकिंग कर रहे हैं? क्या आप स्पष्ट लेनदेन का उपयोग कर रहे हैं जिसमें एकाधिक अपडेट शामिल हैं, या वे एकल कथन डेडलॉकिंग हैं?
डेडलॉक के लिए सबसे आम मामला अनुक्रम (अद्यतन तालिका एक्स, अद्यतन तालिका वाई) के साथ एक लेनदेन है, और अनुक्रम (अद्यतन तालिका वाई, अद्यतन तालिका एक्स) के साथ एक दूसरा लेनदेन है। सामान्य समाधान यह सुनिश्चित करना है कि आप क्वेरी में एक ही अद्यतन अनुक्रम का उपयोग करें।
हमें बताएं कि वे किस तरह के प्रश्न हैं, विभिन्न प्रकार के लेनदेन के लिए विभिन्न आम मुद्दे हैं।
यहां एक प्रश्न है जो आपको सभी सक्रिय ताले दिखाएगा, उन्हें कौन मिला है, और वे किस वस्तु पर हैं। मैंने इसे एक तकनीकी लेख या कुछ साल और साल पहले खींच लिया था। यह एसक्यूएल 2000 और 2005 (2005 के लिए sys.objects में sysobjects को बदलें) पर काम करता है। यदि आप इसे केवल इस डेटाबेस तक सीमित करना चाहते हैं, और केवल "विशिष्ट" ताले को WHERE खंड को अनमोलमेंट करें।
select 'Locks' as Locks,
spid, nt_username, name, hostname, loginame, waittime, open_tran,
convert(varchar ,getdate() - last_batch, 114) as TimeSinceLastCommand,
case req_mode
when 0 then 'Not granted'
when 1 then 'Schema stability'
when 2 then 'Schema modification'
when 3 then 'Intent shared'
when 4 then 'Shared intent update'
when 5 then 'Intent shared shared'
when 6 then 'Intent exclusive'
when 7 then 'Shared Intent Exclusive'
when 8 then 'Shared'
when 9 then 'Update'
when 10 then 'Intent insert NULL'
when 11 then 'Intent shared exclusive'
when 12 then 'Intent update'
when 13 then 'Intent shared-update'
when 14 then 'Exclusive'
when 15 then 'Bulk operation'
else str(req_mode) end as LockMode
from master..syslockinfo
left join sysobjects so on so.id = rsc_objid
left join master..sysprocesses sp on sp.spid = req_spid
--where rsc_dbid = (select db_id()) and ltrim(req_mode) in (6,7,11,14)
छोटी टिप्पणी: SQL 2012 के लिए संख्याएं थोड़ी अलग हैं: http://technet.microsoft.com/en-us/library/ms189497.aspx – n0rd
- 1. एसक्यूएल सर्वर ताले समझा
- 2. साझा किए गए ताले लॉक कब जारी किए जाते हैं?
- 3. तालिका में कौन से ताले लगाए जाते हैं
- 4. एसक्यूएल किसी लिंक किए गए सर्वर
- 5. एसक्यूएल सर्वर फ़िल्टर किए गए इंडेक्स
- 6. दो कंप्यूटर इंटरनेट पर एक-दूसरे को ढूंढ रहे हैं
- 7. एसक्यूएल सर्वर एक कॉलम पर डुप्लिकेट ढूंढ रहा है लेकिन
- 8. रेंज-ताले क्या हैं?
- 9. एक लिंक किए गए SQL सर्वर
- 10. एसक्यूएल सर्वर इकाइयां प्रश्न
- 11. एसक्यूएल सर्वर स्थानिक और लिंक किए गए सर्वर
- 12. एसक्यूएल सर्वर, एक पंक्ति ताले भरें पूरी तालिका
- 13. पीडीओ अनबफर किए गए प्रश्न
- 14. एक लिंक किए गए एसक्यूएल सर्वर की क्वेरी
- 15. एसक्यूएल सर्वर रेस स्थिति प्रश्न
- 16. @@ किसी अन्य सर्वर (लिंक किए गए सर्वर) से पहचान
- 17. ताले अलग वस्तुओं पर क्यों प्रदर्शन किए जाते हैं?
- 18. सर्वर पर होस्ट किए गए SQL सर्वर से SQL सर्वर में बदलना
- 19. SQL सर्वर (2008) में किसी निश्चित तालिका का उपयोग करने वाले कौन से विचार ढूंढ रहे हैं?
- 20. लिंक किए गए सर्वर पर टेबल बनाएं?
- 21. कैसे पता लगाएं कि कौन से वर्ग लोड किए गए हैं, जिनमें से जेएआरएस?
- 22. iPhone विकास: UIWebView पर चयनित/हाइलाइट किए गए पाठ किए जा रहे हैं
- 23. SQL सर्वर डेटाबेस नाम में कौन से वर्ण मान्य हैं?
- 24. लिंक किए गए सर्वर पर पहचान डालने में
- 25. सीएलआर 4.0 में कौन से ऑपकोड पेश किए गए थे?
- 26. SQL सर्वर में लिंक किए गए सर्वर का उपयोग न करने का कारण?
- 27. mysql - ताले प्रतिकृति पर प्रचार करते हैं?
- 28. कम से कम लोड किए गए सर्वर को ढूंढना
- 29. डिस्जिइंट सेट पर कौन से ऑपरेशन किए जा सकते हैं?
- 30. लिंक किए गए सर्वर क्वेरीज़
दिलचस्प, मैं झंडे कैसे सेट कर सकता हूं? एक प्रश्न विश्लेषक में? कोई ओवरहेड यहां शामिल है? – Tomas
मैं दोनों "डीबीसीसी ट्रेसीन (1222, -1)" और "डीबीसीसी ट्रेसीन (1204, -1)" चलाया और एक डेडलॉक ग्राफ़ ट्रेस (एसक्यूएल सर्वर 2005 पर) शुरू किया। जब मैंने डेडलॉक को मजबूर कर दिया, तो ट्रेस ने इसे पकड़ लिया। हालांकि SQL सर्वर त्रुटि लॉग के भीतर डेडलॉक का कोई रिकॉर्ड नहीं है। मैं SQL सर्वर प्रबंधन स्टूडियो में "SQL सर्वर एजेंट" + "त्रुटि लॉग" + "वर्तमान -" + में राइट क्लिक कर रहा हूं + "एजेंट लॉग देखें" मैं गलत क्या कर सकता हूं? –
आप गलत लॉग देख रहे हैं, वे एजेंट लॉग हैं। प्रबंधन> एसक्यूएल सर्वर लॉग – Sam