2010-08-11 17 views
25

MySQL manual के अनुसार:बड़े टेबल के लिए पंक्ति-स्तर लॉकिंग से तालिका-स्तर लॉकिंग बेहतर क्यों है?

बड़े तालिकाओं के लिए, तालिका ताला अक्सर पंक्ति ताला तुलना में बेहतर है,

ऐसा क्यों है? मुझे लगता है कि पंक्ति-स्तर लॉकिंग बेहतर है क्योंकि जब आप एक बड़ी तालिका को लॉक करते हैं, तो आप अधिक डेटा लॉक कर रहे हैं।

उत्तर

17
(पूर्व-संपादन) से

link

से सस्ता है लॉक करने की आवश्यकता जब तालिका का एक बड़ा हिस्सा पर इस्तेमाल किया है क्योंकि आप कई और अधिक ताले

प्राप्त करना होगा यदि आप केवल एक या दो पंक्ति मार रहे हैं एक पंक्ति स्तर लॉक का उपयोग पेज-स्तर या तालिका स्तर के ताले से

धीमी। यदि आपका कोड कई या अज्ञात पंक्तियों को हिट करता है, तो टेबल लॉक के साथ चिपकाएं।

+4

मैं देखता हूं। तो शायद यह बेहतर होगा अगर इसे "बड़े परिणामों के लिए, टेबल लॉकिंग अक्सर पंक्ति लॉकिंग से बेहतर होता है" जैसे वाक्यांशित किया गया था। –

0

पंक्ति तालिका स्तर लॉक एक बड़ी तालिका के लिए बेहतर है जहां प्रमुख डेटा संशोधन हो रहे हैं। यह सिस्टम को गैजिलियन ताले (प्रत्येक पंक्ति के लिए एक) से निपटने के बजाय तालिका पर एक लॉक के साथ संघर्ष करने देता है।

आरडीबीएमएस स्वचालित रूप से लॉकिंग स्तर को आंतरिक रूप से बढ़ाता है।

+0

मुझे लगता है कि आपका मतलब है "एक टेबल लॉक बेहतर है ....." – SQLMenace

+0

मुझे लगता है कि आपका मतलब है "एक पंक्ति लॉक बेहतर है ...": पी –

+0

* (भेड़ का बच्चा) * हाँ, मेरा मतलब टेबल था .. –

0

सामान्य तौर पर यदि आप डेटा का एक बहुत तो एक बड़ी मेज पर 1 ताला पंक्ति स्तर या पेज ताले की एक पूरी गुच्छा

15
  • पंक्ति लॉकिंग तालिका या पृष्ठ स्तर लॉकिंग से अधिक स्मृति की आवश्यकता है।

    • कम ताला:

    • से http://www.devshed.com/c/a/MySQL/MySQL-Optimization-part-2/

      • पंक्ति-स्तर लॉकिंग के लाभ पंक्ति ताला, जो खर्च के साथ कई और ताले अधिक संसाधनों

      प्राप्त करने के लिए है कई धागे में विभिन्न पंक्तियों का उपयोग करते समय संघर्ष।

    • रोलबैक के लिए कम परिवर्तन।
    • एक पंक्ति को लंबे समय तक लॉक करना संभव बनाता है। पंक्ति-स्तर लॉकिंग की
  • नुकसान:

    • पेज-स्तर या तालिका स्तर के ताले की तुलना में अधिक स्मृति ले जाता है।
    • तालिका के बड़े हिस्से पर उपयोग किए जाने पर पृष्ठ-स्तर या तालिका-स्तर के ताले से धीमा है क्योंकि आपको कई और ताले प्राप्त करना होगा।
    • यदि आप अक्सर डेटा के एक बड़े हिस्से पर ग्रुप बाय ऑपरेशंस करते हैं या यदि आपको अक्सर पूरी तालिका को स्कैन करना होगा तो अन्य ताले की तुलना में निश्चित रूप से बहुत खराब है।
    • उच्च स्तरीय ताले के साथ, आप एप्लिकेशन को ट्यून करने के लिए विभिन्न प्रकार के ताले का अधिक आसानी से समर्थन कर सकते हैं, क्योंकि लॉक ओवरहेड पंक्ति-स्तर ताले के लिए कम है।
  • टेबल ताले निम्नलिखित मामलों में पृष्ठ-स्तर या पंक्ति-स्तर ताले से बेहतर हैं:

    • तालिका के लिए सबसे बयान पढ़ता है।
    • पढ़ें और सख्त कुंजी है, जहां आप को अपडेट करने या एक पंक्ति है कि एक ही कुंजी को पढ़ने के साथ दिलवाया जा सकता है को नष्ट पर अद्यतन: UPDATE tbl_name SET column=value WHERE unique_key_col=key_value; DELETE FROM tbl_name WHERE unique_key_col=key_value;
    • समवर्ती सम्मिलित बयान, और बहुत कुछ अद्यतन और बयानों DELETE के साथ संयुक्त का चयन करें।
    • बिना किसी लेखकों के पूरे टेबल पर कई स्कैन या ग्रुप ऑपरेशन।
1

टेबल ताला कई सत्रों में एक ही समय

में एक टेबल से पढ़ने के लिए एक बहुत ही उच्च ताला गति को प्राप्त करने के लिए सक्षम बनाता है, MySQL तालिका ताला लगा

"मैं करूंगा का उपयोग करता है मान लें कि पंक्ति-स्तर लॉकिंग बेहतर है क्योंकि "[आप कम डेटा लॉक करते हैं]।

पहले "बेहतर" इस ​​पृष्ठ में खराब परिभाषित किया गया है। ऐसा प्रतीत होता है कि बेहतर "तेज़" है।

पंक्ति-स्तर लॉकिंग सामान्य रूप से ताले के लिए विवाद की वजह से (सामान्य रूप से) तेज नहीं हो सकती है। बड़े परिणाम सेट की प्रत्येक पंक्ति को लॉक करना मतलब है कि किसी अन्य बड़े परिणाम सेट क्वेरी और रोलबैक के साथ एक संघर्ष की वास्तविक संभावना है।

संबंधित मुद्दे