दुर्भाग्य से यहां तक कि 100 पंक्तियों के छोटे बैचों में नकल करने से कुछ समय बाद महत्वपूर्ण अंतराल उत्पन्न होता है।
क्या आप प्रत्येक बैच के बीच कोई देरी जोड़ रहे हैं, या सिर्फ अपडेट्स को बैचने और प्रत्येक बैच को सीधे पिछले एक के बाद चला रहे हैं?
यदि ऐसा है तो अपनी पसंदीदा भाषा में रूपांतरण को स्क्रिप्ट के साथ कुछ इस तरह आज़माएँ:
repeat
copy oldest 100 rows that haven't been copied yet to new table
sleep for as long as that update took
until there are <100 rows unprocessed
stop logging service
move the last few rows
rename tables
restart logging
delete the old table when you are sure the conversion has worked
यह सुनिश्चित करना चाहिए कि रूपांतरण आपके सर्वर की क्षमता से अधिक या कम-आधे से अधिक नहीं लेता है, यहां तक कि लोड के अंतर के लिए भी अनुमति देता है क्योंकि सिस्टम का उपयोग समय के साथ बदलता रहता है।
या यदि आप जितना संभव हो उतने समय का उपयोग करना चाहते हैं जब सेवा अपेक्षाकृत निष्क्रिय है, लेकिन डेटाबेस से अपने उपयोगकर्ताओं के लिए कुछ काम करने की आवश्यकता होने पर, बैक ऑफ (संभावित रूप से काफी समय तक रुकने) की जगह ले लेता sleep for as long as the update took
है if the server's load is above <upper measure>, sleep for some seconds then check again, loop around the sleep/check until the load drops below <lower measure>
। इसका मतलब यह है कि यह शांत समय में आगे भाप सकता है, लेकिन सर्वर पूरी तरह से काम करने में व्यस्त होने पर इसे पूरी तरह से रोक देगा। लोडिंग का निर्धारण आपके OS पर निर्भर करेगा - Linux के तहत और इसी तरह के 1-मिनट लोड औसत मूल्य से /proc/loadavg
या आउटपुट को uptime
करना चाहिए। <lower measure>
और <upper measure>
इसका एक ही मूल्य हो सकता है, हालांकि यह सामान्य रूप से नियंत्रण में होता है जैसे कि इसमें अंतर होता है इसलिए आपकी प्रक्रिया शुरू नहीं होती है क्योंकि लोड माप पर प्रभाव होने के कारण इसे फिर से शुरू कर दिया जाता है।
बेशक यह उन तालिकाओं के लिए काम नहीं करेगा जहां पुरानी पंक्तियों को संशोधित किया जा सकता है, लेकिन आपके द्वारा वर्णित एक लॉग टेबल के लिए ठीक काम करेगा।
आप इस मामले में नई तालिका को आबाद करने के बाद अनुक्रमित बनाने की सामान्य बुद्धि को अनदेखा करना चाहेंगे । जबकि यह वास्तव में अधिक कुशल है जब आप चाहते हैं कि चीजें जितनी जल्दी हो सके (सिस्टम के बाकी हिस्सों पर प्रभाव खराब हो), इस मामले में आप प्रक्रिया के अंत में लोड की बड़ी चमक नहीं चाहते हैं। अनुक्रमणिका पूरी तरह से एक ही बार में बन जाती है क्योंकि यह एक ऐसी प्रक्रिया है जिसे आप व्यस्त होने पर रोक नहीं सकते हैं।