2012-01-06 12 views
22

मेरे पास 2000 से अधिक टेबलों के साथ, 100 लाख पंक्तियों के साथ आंकड़ों के लिए उपयोग किया गया डेटाबेस है।तालिका को अनुकूलित और जांचें mysql

मुझे लगता है कि सप्ताह में कुछ बार टेबल सुनिश्चित करना अच्छा होगा कि वे स्वस्थ हैं, और यदि नहीं, तो मरम्मत और उन्हें अनुकूलित करें।

तालिकाओं का 60% प्रतिदिन अपडेट होते हैं, और शेष संग्रह होते हैं।

मेरा प्रश्न check(repair)/optimize है: क्या यह सुनिश्चित करने के लिए कि सिस्टम सुचारू रूप से चलता है, तालिका स्वास्थ्य की जांच करना और सप्ताह में कुछ बार अनुकूलित करना अच्छा है?

+0

टेबल हर रोज अपडेट किया जाता है कि के साथ समस्याओं को देख सकते हैं: वे MyISAM या InnoDB रहे हैं ??? – RolandoMySQLDBA

उत्तर

24

प्रदान की आम तौर पर आप अपनी फाइल सिस्टम की जांच करने के लिए जब उसके datafile बहुत ज्यादा डिस्क (औजारों का उपयोग पर खंडित है तालिका अनुकूलन की जरूरत के लिए स्क्रिप्ट नीचे टिप्पणी और नोट्स पढ़ें GiantRobot द्वारा विखंडन की गणना नहीं की जा रही है), जब कई पंक्तियों को अद्यतन किया गया था और उनके आकार को बदल दिया गया था (जो पंक्ति विखंडन बनाएगा) या कई रिकॉर्ड हटाने के बाद जब आप उन्हें जल्द ही नहीं जोड़ेंगे। चूंकि नए स्थान के लिए MySQL द्वारा फ्री स्पेस का उपयोग किया जाता है, जब हटाए गए और नए रिकॉर्ड में एक ही पंक्ति आकार होता है, तो कोई विकल्प आवश्यक नहीं होता है।

चेक तालिका केवल तभी उपयोग की जाती है जब आपको डेटा भ्रष्टाचार पर संदेह होता है (जो सामान्य रन के दौरान नहीं होना चाहिए)। कुछ लिनक्स वितरण (उदाहरण के लिए डेबियन) में स्टार्टअप स्क्रिप्ट हैं जो MySQL सर्वर स्टार्टअप पर सभी तालिकाओं के लिए चेक टेबल चलाते हैं। मरम्मत तालिका तब दूषित तालिकाओं की मरम्मत के लिए प्रयोग की जाती है।

विश्लेषण तालिका का उपयोग इंडेक्स कार्डिनिटी को अपडेट करने के लिए किया जा सकता है, जिसका उपयोग क्वेरी निष्पादन योजना को निर्धारित करने में किया जाता है। आम तौर पर केवल विशेष मामलों में इसकी आवश्यकता होती है।

यह आपके प्रश्न से स्पष्ट नहीं है कि आपकी आंकड़े सारणी कैसे उपयोग की जाती हैं ... कितने लिखते हैं, हटाते हैं और पढ़ते हैं? मेरी सांख्यिकीय तालिकाएं हर समय लिखती हैं, और एक दिन में यह पढ़ा जाता है, डेटा समेकित और अन्य तालिका में लिखा जाता है, फिर हटा दिया जाता है। ऐसे मामले में, OPTIMIZE चलाने की कोई आवश्यकता नहीं है क्योंकि डेटा अक्सर नहीं पढ़ा जाता है और नए डेटा के लिए फ्री स्पेस का पुन: उपयोग किया जाता है। मैं दिन के आधार पर विभाजन का उपयोग कर रहा हूं, इसलिए रिकॉर्ड्स को हटाने की बजाय (जो काफी धीमी है) मैं बस ड्रॉप पार्टिशन (जो 1 सेकंड अधिकतम लेता है)

0

2000 टेबल और 100 लाख पंक्तियां प्रत्येक बड़ी दिखती हैं! यदि आप ऑप्टिमाइज़ेशन के दौरान सप्ताह में कुछ बार अनुकूलित करने का प्रयास करते हैं, तो टेबल लॉक हो जाएंगे, इसलिए जब तक आप काम पूरा नहीं कर लेते तब तक आप उन टेबल को लिखने में सक्षम नहीं होंगे यहां एक स्क्रिप्ट है जो केवल खंडित तालिकाओं की जांच करती है (% 60 आपकी टेबलों की शायद) और केवल खंडित लोगों को अनुकूलित करें, अगर यह काम करता है तो हमें बताएं।

नोट: मैं स्क्रिप्ट का परीक्षण नहीं कर सका क्योंकि मैं अपने वर्तमान प्रोजेक्ट के लिए विंडोज मशीन का उपयोग करता हूं। स्क्रिप्ट जुड़ा हुआ - लिंक मैं

Optimize only fragmented tables in MySQL

0

मरम्मत बड़ी टेबल के साथ बहुत धीमी है; आपको शायद माईसाम के साथ बहुत बड़ी अनुक्रमणिका से बचाना चाहिए, विशेष रूप से बहुत सारे इंडेक्स के साथ। मरम्मत के समय को कम करने के बजाय उन्हें विभाजन करना पसंद करते हैं। इसके लिए आपके आवेदन कोड में एक बड़ा बदलाव की आवश्यकता हो सकती है।

तुम भी मरम्मत here

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