बहुत नियमित रूप से, बड़ी मात्रा में (4 मिलियन पंक्तियों) को कुशलतापूर्वक mysql डेटा को हटाना


10

हमारे पास एक mysql तालिका है जो किसी भी समय लगभग 12 मिलियन पंक्तियाँ होती है। हमें तालिका का आकार कुछ प्रबंधनीय रखने के लिए पुराने डेटा को हटाने की आवश्यकता है।

अभी हम रोजाना आधी रात को, क्रोन जॉब का उपयोग करके इस क्वेरी को चला रहे हैं:

DELETE FROM table WHERE endTime < '1393632001'

पिछली बार जब क्वेरी चली थी तो उसने 4,602,400 की जांच की, 3 मिनट से अधिक समय लगा और सीपीयू छत के माध्यम से चला गया।

आधी रात को सीपीयू स्पाइकिंग

सीपीयू, सिंक्रोनस डीबी कनेक्शंस, डिस्क क्यू डेप्थ आदि को पुराने डेटा को हटाते समय अनुचित तरीके से स्पाइकिंग से रखने के लिए हम क्या कर सकते हैं?

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

php  mysql 

शायद हर 10 मिनट और 100k प्रति चक्कर या हर 5 मिनट 50k प्रति चक्कर को हटाने के लिए क्रोन जॉब्स का उपयोग करें

अधिक नियमित आधार पर छोटे विखंडू?

ठीक है, लेकिन ऐसा लगता है कि अधिक समय तक हमारे उपयोगकर्ता अनुभव को अपंग कर सकते हैं :) कुछ भी हम क्वेरी / डिज़ाइन वार कर सकते हैं?

1
186k उपयोगकर्ता, कोई समर्पित db लड़का नहीं है?

1
आपको "डेटाबेस प्रशासक"
जेम्स एंडरसन

जवाबों:


13

आपकी समस्या का समाधान "विभाजन" नामक एक MySQL क्षमता है। प्रलेखन यहाँ है

विभाजन क्या करता है एक एकल तालिका को अलग-अलग "विभाजन" में संग्रहीत किया जाता है। ये एक विशेष अभिव्यक्ति द्वारा परिभाषित होते हैं, आमतौर पर एक स्तंभ मान या सीमा। आपके मामले में, यह संभवतः पर आधारित होगा endTime- यह मानते हुए कि जब रिकॉर्ड बनाया जाता है तो यह ज्ञात होता है और यह परिवर्तित नहीं होता है।

आप endTimeप्रत्येक विभाजन में एक दिन का मूल्य संग्रहित करेंगे । फिर एक बड़ी तालिका में पंक्तियों का एक गुच्छा हटाने के बजाय विलोपन चरण एक विभाजन को छोटा कर देगा। विभाजन ट्रंकेशन बहुत तेज़ विधि होगी।


वाह, यह अविश्वसनीय रूप से सहायक था, और एक सही समाधान की तरह लगता है। विभाजन पर पढ़ने का समय! धन्यवाद!

हालाँकि, विभाजन ओवरहेड का एक अच्छा समाधान हो सकता है - यह आपके प्रश्नों को काफी धीमा कर सकता है। ट्रंकट टेबल के अलावा तत्काल भी नहीं है। मैं pt-archiver पर विचार करूंगा। आप स्पाइक्स के साथ अपनी समस्याओं को हल कर सकते हैं और अपनी तालिका को अब जैसे ही सरल रख सकते हैं
akuzminsky
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.