हमने अपने ग्राहक के डेटाबेस को एक अतिरिक्त सर्वर पर ले जाने के बाद एक समस्या का सामना किया है। साइट के प्रदर्शन पर इसका सकारात्मक प्रभाव होना चाहिए था, लेकिन MyISAM में टेबल लॉकिंग की समस्या है। (मैंने MyISAM के बजाय InnoDB का उपयोग करने के बारे में सुना है, लेकिन हम निकट भविष्य में इंजन को बदल नहीं सकते हैं)।
हम इसे अपडेट-क्वेरी के लिए प्रस्तुत कर सकते हैं, जो कि जब मॉडरेटर मॉडरेटर द्वारा लेख पर टिप्पणी सक्रिय करता है, तब किया जाता है। यह प्रक्रिया है:
- अद्यतन-क्वेरी संसाधित है
SET status = 1 WHERE id = 5
(सूचकांक सेट है) - पृष्ठ की कैश्ड फ़ाइलें हटा दी जाती हैं
इस बिंदु पर पूरा पृष्ठ धीमा हो जाता है। डेटाबेस स्वयं मिनटों के लिए व्यस्त है। मैंने कुछ समय के लिए प्रक्रिया सूची प्राप्त की और विभिन्न चयन-प्रश्नों की लगभग 60 प्रविष्टियाँ देखीं, जो सभी टेबल लेवल लॉक की प्रतीक्षा कर रहे थे ।
1. मुझे समझ नहीं आ रहा है कि टेबल का यह अपडेट टेबल लेवल लॉक के लिए प्रतीक्षा करने के article_comments
लिए टेबल के article
लिए चयन-कथनों को क्यों प्रभावित कर सकता है । प्रक्रिया सूची में लगभग सभी प्रतीक्षा प्रश्न इस तालिका से थे। मैंने इस तथ्य के बारे में पढ़ा है कि अपडेट / आवेषण का चयन करने के लिए पसंद किया जाता है और यह इस तरह की समस्याओं का कारण बन सकता है, लेकिन टिप्पणी सक्रिय होने पर लेख-तालिका स्वयं अपडेट नहीं होती है, इसलिए चयनों का इंतजार नहीं करना चाहिए। क्या मुझे यह समझ में आया?
2. क्या इस व्यवहार को रोकने या कम से कम एक बेहतर संतुलन पाने के लिए InnoDB को बदलने के अलावा भी कुछ है? मैं इस तथ्य से बहुत चिढ़ हूँ कि नए सर्वर पर डेटाबेस ले जाने से पहले यह समस्या सामने नहीं आई। मुझे लगता है कि कुछ गलत धारणा है, लेकिन मुझे नहीं पता कि कैसे पहचानें।
key_buffer_size
लिए सेट किया गया था 1GB
। उस 10GB
समस्या को कम करना।