एचएम, चलो सभी मामलों की सूची।
REQUIRES_NEW
वास्तव में लेनदेन घोंसला नहीं करता है, लेकिन जैसा कि आपने बताया है कि वर्तमान में रोक दिया गया है। फिर एक ही जानकारी तक पहुंचने के लिए केवल दो लेन-देन होते हैं। (यह दो नियमित समवर्ती लेनदेन के समान है, सिवाय इसके कि वे समवर्ती नहीं हैं लेकिन निष्पादन के समान धागे में हैं)।
T1 T2 T1 T2
― ―
| |
|
― | ―
| | |
| = | |
― | ―
|
| |
― ―
फिर हम आशावादी बनाम निराशावादी लॉकिंग पर विचार करने की जरूरत है।
इसके अलावा, हमें पर विचार करने की आवश्यकता है ORM द्वारा संचालित। ORMs के साथ, हम के बाद से flush
ढांचे द्वारा नियंत्रित किया जाता है, जब राईट होता है एक स्पष्ट नियंत्रण नहीं है,। आमतौर पर, एक अंतर्निहित फ्लश होता है से पहले प्रतिबद्ध है, लेकिन अगर कई प्रविष्टियों संशोधित कर रहे हैं, ढांचे के रूप में अच्छी तरह से मध्यवर्ती flushes कर सकते हैं।
1) आइए आशावादी लॉकिंग पर विचार करें, जहां ताले हासिल नहीं करते हैं, लेकिन विशिष्ट ताले हासिल करते हैं।
टी 1 द्वारा पढ़ा गया लॉक प्राप्त नहीं करता है।
1 ए) यदि टी 1 ने स्वाभाविक रूप से परिवर्तनों को फ्लश किया था, तो उसने एक विशेष लॉक हासिल किया था। जब टी 2 काम करता है, तो यह लॉक हासिल करने का प्रयास करता है लेकिन नहीं कर सकता। सिस्टम अवरुद्ध है। यह किसी विशेष प्रकार की डेडलॉक के बावजूद हो सकता है। पूरा करने पर निर्भर करता है कि लेन-देन या ताले कैसे समय निकालते हैं।
1 बी) यदि टी 1 ने स्वाभाविक रूप से परिवर्तनों को फ्लश नहीं किया है, तो कोई लॉक अधिग्रहण नहीं किया गया है। जब टी 2 काम करता है, तो यह प्राप्त करता है और इसे रिलीज़ करता है और सफल होता है। जब टी 1 प्रतिबद्ध करने का प्रयास करता है, तो यह एक संघर्ष को नोटिस करता है और विफल रहता है।
2) चलो निराशावादी लॉकिंग पर विचार करें, जहां साझा ताले हासिल करें और विशेष ताले लिखें।
टी 1 द्वारा पढ़ा गया एक साझा लॉक प्राप्त करें।
2 ए) यदि टी 1 प्रक्षेपित रूप से फ्लश हो जाता है, तो यह लॉक इंट को एक विशेष लॉक बदल देता है। स्थिति 1 ए के समान है)
2 बी) यदि टी 1 ने स्वाभाविक रूप से फ्लश नहीं किया है, तो टी 1 में एक साझा लॉक है। जब टी 2 प्रतिबद्ध होता है, तो यह एक विशेष लॉक और ब्लॉक प्राप्त करने का प्रयास करता है। सिस्टम को फिर से अवरुद्ध कर दिया गया है।
निष्कर्ष: यदि कोई समयपूर्व फ्लश नहीं होता है तो यह आशावादी लॉकिंग के साथ ठीक है, जिसे आप कड़ाई से नियंत्रित नहीं कर सकते हैं।
आप कैसे और कहाँ डेडलॉक प्राप्त करते हैं? सत्र कैश से या डेटाबेस लॉक पंक्तियों से? –