Wp_postmeta के "_edit_lock" के लिए सरल अपडेट इतने धीमे क्यों हैं?


11

हमारी MySQL धीमी क्वेरी लॉग में, संचयी रूप से सबसे धीमी क्वेरी wp_postmeta के लिए एक सरल अद्यतन है। यहाँ एक उदाहरण है:

UPDATE `wp_postmeta`
  SET `meta_value` = '1392835505:386'
  WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';

हमारे सेटअप पर प्रासंगिक विवरण:

  • MySQL धीमा क्वेरी समय 1s पर सेट है
  • wp_postmeta का स्टोरेज इंजन InnoDB है
  • मुख्य WP ब्लॉग पर दसियों हजार पदों के साथ एक बड़े मल्टीसाइट इंस्टॉलेशन के भीतर चल रहा है (जहां ये धीमी गति से पूछताछ हो रही है)
  • WP व्यवस्थापक क्षेत्र में उच्च गतिविधि (समवर्ती रूप से काम करने वाले बहुत सारे लेखक / संपादक, लेकिन आम तौर पर अपने दम पर (दूसरों के नहीं) सामग्री)
  • WP के सार्वजनिक पक्ष पर कम गतिविधि (वास्तव में मुख्य ब्लॉग से सामग्री की सेवा नहीं)
  • धीमे प्रश्न सभी को "_edit_lock" कुंजी का उपयोग करने लगते हैं; समान प्रारूप ("_edit_lock" के अलावा कुंजी का उपयोग करने वाले) की क्वेरी धीमी नहीं लगती है।

ऐसा क्यों है कि यह हमारे सिस्टम पर सबसे धीमी क्वेरी है? क्या यह "संपादित ताले" के WP के विशिष्ट उपयोग के साथ कुछ करना है?

धन्यवाद! :)


अद्यतन: नीचे mysqlsla से आउटपुट:

______________________________________________________________________ 001 ___
Count         : 606  (16.83%)
Time          : 2257.760468 s total, 3.725677 s avg, 1.00512 s to 84.645869 s max  (20.60%)
  95% of Time : 1355.289277 s total, 2.357025 s avg, 1.00512 s to 12.343604 s max
Lock Time (s) : 182.502 ms total, 301 μs avg, 29 μs to 157.542 ms max  (0.21%)
  95% of Lock : 22.882 ms total, 40 μs avg, 29 μs to 57 μs max
Rows sent     : 0 avg, 0 to 0 max  (0.00%)
Rows examined : 1 avg, 1 to 2 max  (0.00%)
Database      : xxx_wp
Users         :
        xxx_wp@localhost  : 98.84% (599) of query, 51.03% (1837) of all users
        yyy_wp@localhost  : 1.16% (7) of query, 0.94% (34) of all users

Query abstract:
SET timestamp=N; UPDATE wp_postmeta SET meta_value = 'S' WHERE post_id = N AND meta_key = 'S';

Query sample:
SET timestamp=1392835506;
UPDATE `wp_postmeta` SET `meta_value` = '1392835505:386' WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';

आपको कितने परिणाम मिलते हैं SELECT * FROM wp_postmeta WHERE meta_key='_edit_lock'; ?
एड्रियन

आपके प्रश्न के लिए धन्यवाद, adrian7! आपकी क्वेरी से मेल खाती 33k पंक्तियाँ हैं। मैं '_edit_lock' मेटा कुंजी के WP के उपयोग से परिचित नहीं हूं। क्या यह असामान्य है?
रिनोगो

यह असामान्य नहीं है, वर्डप्रेस इसका उपयोग उपयोगकर्ताओं को सतर्क करने के लिए करता है जब वे एक ही पोस्ट / पृष्ठ को संपादित करने की कोशिश कर रहे हैं। मेरा सुझाव है कि आप wp_postmeta से सभी _edit_locks को हटा दें, जाहिर है जब कोई भी संपादन नहीं है और किसी भी प्रदर्शन में सुधार के बाद जांच करें। (BTW पहले एक बैकअप बनाएं)।
एड्रियन

3
क्या यह भी समय की एक बड़ी राशि ले जब आप SELECTइस प्रविष्टि? जैसे SELECT * FROM wp_postmeta `WHERE post_id= 94705 और meta_key= '_edit_lock';`?
फिशी

@fischi: यह क्वेरी 45-50ms से लगती है, कम से कम परीक्षण में मैंने कुछ ही समय पहले किया था। हालांकि, यह संभव है कि यह कभी-कभार बहुत लंबा समय लेता है (उदाहरण के लिए 84 सेकंड तक, जैसा कि प्रश्न में शामिल mysqlsla आउटपुट में दिखाया गया है)। मैं यह देखने के लिए धीमी गति से क्वेरी विश्लेषण का एक नया दौर चलाऊंगा कि क्या मेरे कॉन्फ़िगरेशन में हाल के किसी भी परिवर्तन ने प्रश्नों को प्रभावित किया है।
रिनोगो

जवाबों:


3

जब भी आप किसी पोस्ट या पेज को संपादित करते हैं, तो _edit_lock उत्पन्न होता है। यह timecode और उपयोगकर्ता से मिलकर बनता है। इसलिए वर्डप्रेस यह जान रहा है कि वर्तमान में कौन इसे संपादित कर रहा है।

meta_id     post_id     meta_key    meta_value
9           5           _edit_lock  1388386997:1

अगर आप इसे हेरफेर करते हैं तो वर्डप्रेस किसी भी तरह से संवेदनशील प्रतिक्रिया करता है ... मैंने किसी पोस्ट पर कितने सेकंड काम करने की कोशिश की। हर समय इसने मेरे डेटाबेस लोडिंग समय को तोड़ दिया।

जैसा कि आपने कहा कि आप इसे एक बड़े मल्टीसाइट पर चला रहे हैं। न जाने कितने उपयोगकर्ता वहां पोस्ट लिखते हैं, लेकिन यह निश्चित रूप से सर्वर की रैम को तोड़ सकता है यदि कई लोग एक ही समय में एक पोस्ट को संपादित करते हैं।

एक समाधान हो सकता है: _edit_lock से छुटकारा पाएं

"पोस्ट लॉक / एडिट लॉक" को कैसे निष्क्रिय करें?

आम तौर पर वर्डप्रेस में प्रति पोस्ट एक "_edit_lock" होना चाहिए। कुछ डेटाबेस को हर बार उत्पन्न करने में समस्या होती है।

इस आदमी की तरह http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta

उनका समाधान उन सभी को हटाना था। इसे तेज करने के लिए आप हर रात 3 बजे phpMyAdmin के साथ इन सभी को हटा सकते हैं

DELETE FROM `yourdb`.`wp_postmeta` WHERE `wp_postmeta`.`meta_key` = '_edit_lock'

हो सकता है कि आपको एक क्रोन जॉब मिल जाए।


0

इसे इस्तेमाल करे :)

UPDATE `wp_postmeta` 
    SET `meta_value` = concat(unix_timestamp(),':386')  
    WHERE `post_id`  = 94705 
      AND `meta_key` = '_edit_lock';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.