MySQL DB सर्वर में OPTIMIZE टेबल क्वेरी चलाने के लाभ


9

मैं जानना चाहूंगा कि क्या लाभ हैं [वास्तव में व्यावहारिक] जिन्हें OPTIMIZE TABLE tbl_nameMySQL सर्वर में क्वेरी चलाकर प्राप्त किया जा सकता है ।

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

क्या कोई मुझे कुछ वास्तविक प्रदर्शन अंतर मानों के साथ मार्गदर्शन कर सकता है यदि संभव हो तो मैं आगे ले जा सकता हूं क्योंकि MySQL के साथ काम करना हमारे प्रोजेक्ट में गंभीरता हासिल कर रहा है।

जवाबों:


7

कृपया ध्यान रखें कि OPTIMIZE TABLE डीफ़्रैग्मेन्टेशन नहीं करता है। आंतरिक रूप से, OPTIMIZE TABLE कई ऑपरेशन करता है (डेटा को एक टेम्प फाइल, रिक्रिएट इंडेक्स, रिजेक्टेड इंडेक्स) में कॉपी करता है। वास्तव में, मेरे द्वारा दिखाए गए उदाहरण को मैन्युअल रूप से दिखाया जा सकता है।

उदाहरण: यदि आप अनुकूलन करते हैं mydb.mytable, तो आप इस आदेश को दर्ज करते हैं:

OPTIMIZE TABLE mydb.mytable;

ध्यान दें कि mysql हुड के नीचे कुछ करता है:

CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;

यह उन तालिकाओं के लिए काफी उपयोगी है जो UPDATEs और DELETEs की उच्च मात्रा का अनुभव करते हैं

ऐसा करने से दो काम पूरे हो सकते हैं

  1. डेटा को सही आकार के टुकड़ों में लोड करने के प्रयास में एक तालिका में टुकड़ों के माध्यम से देखने से mysql को रोकें। इन टुकड़ों को खत्म करने से इस ऑपरेशन में कमी आएगी।

  2. अनुक्रमणिका आँकड़ों को फिर से जोड़ने से MySQL क्वेरी ऑप्टिमाइज़र को बेहतर योजना बनाने में मदद मिलती है। अन्यथा, क्वेरीज़ निष्पादन समय में बिगड़ सकती हैं क्योंकि MySQL क्वेरी ऑप्टिमाइज़र ने EXPLAIN योजना में खराब अनुमान लेने का निर्णय लिया। यह एक तालिका का एक निश्चित लक्षण होगा जिसमें UPDATEs और DELETEs की मात्रा अधिक होती है।

चेतावनी

कैशिंग के संबंध में, पूर्ण टेबल स्कैन करने के कारण कैशिंग जल्दी से गोता लगाता है। MyISAM इंडेक्स पृष्ठों के लिए MyISAM कुंजी कैश के अंदर और बाहर प्रवाहित होती है। InnoDB के लिए, डेटा और इंडेक्स पेज InnoDB बफर पूल के अंदर और बाहर बहते हैं।


आपके जवाब के लिए धन्यवाद। आपके दृष्टिकोण से, मैं समझता हूं कि मैं अपनी बार-बार अपडेट की गई तालिका के लिए ऑप्टिमाइज़ टेबल को शेड्यूल करने के लिए क्रोन जॉब जैसी कुछ सेवा का बेहतर उपयोग करता हूं ताकि मैं बेहतर प्रदर्शन प्राप्त कर सकूं। इसके आगे मैं इस तालिका के लिए InnoDB का उपयोग कर रहा हूं। क्या यह बेहतर विकल्प है। इसके अलावा, मुझे एससीएच सर्वर में एचएएसएच जॉइन मिलता है जिसे क्वेरी प्रदर्शन को बेहतर बनाने के लिए सुझाव दिया गया था, क्या आप कृपया मुझे इसके लिए समझा सकते हैं और मायएसक्यूएल में इसके समान कैसे प्राप्त कर सकते हैं। कृपया मुझे MySQL [Windows7 संस्करण] के लिए SQL क्वेरी ऑप्टिमाइज़र भी दें।
सर्वानन

@ सावरनन: जिस MySQL क्वेरी ऑप्टिमाइज़र का मैं उल्लेख कर रहा था, वह MySQL में निर्मित आंतरिक था। BTW चूंकि आप जिस तालिका को ऑप्टिमाइज़ करना चाहते हैं, वह InnoDB है, आप डिसेबल कुंजी और सक्षम कुंजियों को छोड़ सकते हैं। इसके अलावा, ANALYZE टेबल को छोड़ दिया जा सकता है क्योंकि यह InnoDB तालिकाओं पर पूरी तरह से बेकार है क्योंकि InnoDB अपनी तालिका कार्डिनैलिटी को BTREE इंडेक्स के पन्नों का उपयोग करते हुए करीब सन्निकटन द्वारा पुनः प्राप्त करता है, जैसा कि सूचकांक के रूप में जाना जाता है।
RolandoMySQLDBA

@ सावरनन: जहाँ तक एचएएसएच इंडेक्स जाता है, इनोबीडी में एडाप्टिव हैश इंडेक्स ( dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html ) है। अपने स्वयं के हैश इंडेक्सों का अनुकरण करने और "उच्च प्रदर्शन MySQL" के
103-106
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.