2010-12-10 14 views
9

मैं एक क्षेत्र :: के साथ एक मेज है ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPmysql देरी डालने टाइमस्टैम्प

मेरे सवाल है, अगर मैं इस मेज पर देरी डालने का उपयोग करें, टाइमस्टैम्प समय था जब अनुरोध कतारबद्ध है या समय था जब हो जाएगा डालने वास्तव में बनाया गया है?

उत्तर

6

जवाब जब अनुरोध कतारबद्ध है है, लेकिन यह जरूरी नहीं कि सही जब अनुरोध किया जाता है, के रूप में अनुरोध के बाद तालिका के लिए धागा स्थापित है कतारबद्ध है है अगर पहले से कोई नहीं है।

mysql 5.1 dev docs से:

धागा कार्यान्वित सम्मिलित बयान, लेकिन इसके बजाय मेज पर पंक्ति लिखने के लिए, यह एक प्रति के अंतिम पंक्ति एक कतार है कि द्वारा प्रबंधित में रखता है हैंडलर धागा। सिंटैक्स त्रुटियों को थ्रेड द्वारा देखा जाता है और क्लाइंट प्रोग्राम को सूचित किया जाता है।

घटनाओं के क्रम जब देरी बयान निष्पादित करता है: अगर एक पहले से ही

  • के लिए हैंडलर चेकों नहीं है

    1. तालिका के लिए कोई हैंडलर धागा बनाया जाता है या एक DELAYED प्राप्त करने के लिए इंतजार कर रहा है ताला
    2. हैंडलर कार्यान्वित INSERT और एक कतार
    3. जब पंक्ति वास्तव में डाला जाता है, द्विआधारी लॉग
    4. 01 अद्यतन किया जाता है में अंतिम पंक्ति डाल
    5. हैंडलर एक समय में delayed_insert_limit पंक्तियों लिखते हैं और कार्यान्वित लेखन के बीच किसी भी लंबित SELECTS
    6. जब कतार खाली है, DELAYED ताला जारी की है

    एक धागा बनाने की आवश्यकता है के आधार पर है या नहीं और कैसे DELAYED लॉक को जांचने या प्राप्त करने में लंबा समय लगता है, कथन के निष्पादन (चरण 0) और कथन (चरण 3) के निष्पादन के बीच का समय अलग-अलग होगा। फिर, कतार कितनी बड़ी है (विशेष रूप से यदि यह delayed_insert_limit पंक्तियों से अधिक है) के आधार पर, और क्या कोई लंबित SELECTS होता है, तो लिखने में कुछ अप्रत्याशित समय से देरी होगी।

  • +0

    मुझे लगता है कि आप सही हैं (लेकिन सुनिश्चित नहीं हैं)। क्योंकि, यदि थ्रेड * * * * कथन मैक्स में कोई कथन * निष्पादित करता है, तो यह संभवतः वास्तविक टाइमस्टैंप पर CURRENT_TIMESTAMP को "विस्तारित" करेगा। –

    0

    यह वास्तविक डालने के समय लेना चाहिए

    1

    बावजूद INSERT DELAYED अगर प्रयोग किया जाता है, या यदि तालिका एक और धागा या अद्यतन या whatnot, मूल्य की वजह से बंद कर दिया है ts लगेगा समय INSERT जारी किया गया था के बराबर है।

    +0

    क्या आपका मतलब हैंडलर थ्रेड या INSERT द्वारा किए गए "डमी" INSERT जो वास्तव में डेटाबेस में किया जाता है। –

    +0

    जब आदेश क्लाइंट थ्रेड द्वारा जारी किया गया था। – Riedsio

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