2010-02-12 7 views
8

मेरे पास मोबाइल एप्लिकेशन सिंक प्रक्रिया है। लेनदेन डेटाबेस पर बहुत संशोधन करता है। चूंकि यह मोबाइल पर किया जाता है, इसलिए मुझे डेटाबेस को कॉम्पैक्ट करने के लिए एक वैक्यूम जारी करना होगा।क्या मुझे लेनदेन में या बाद में वाक्यूम चलाया जाना चाहिए?

मैं सोच रहा हूँ जब मैं एक वैक्यूम

    लेनदेन में
  • जारी करना चाहिए, अंतिम बयान
  • के रूप में या लेन-देन के बाद?

मैं वर्तमान में SQLite रहा हूँ, लेकिन अगर यह अन्य इंजन के लिए अलग है, मुझे जवाब में पता है (PostgreSQL, MySQL, ओरेकल, SQLServer)

उत्तर

4

मैं लेनदेन के बाहर कहूंगा। निश्चित रूप से PostgreSQL में, VACUUM को "मृत" tuples (यानी पुरानी पंक्ति जब एक रिकॉर्ड बदल दिया गया है या हटा दिया गया है) को हटाने के लिए डिज़ाइन किया गया है।

यदि आप लेनदेन में VACUUM चला रहे हैं जिसमें संशोधित रिकॉर्ड हैं, तो ये मृत पंक्तियां हटाने के लिए चिह्नित नहीं किया जाएगा।

आप किस प्रकार के वैक्यूम कर रहे हैं, इस पर निर्भर करते हुए, उसे एक टेबल लॉक की भी आवश्यकता हो सकती है जो अन्य लेन-देन चलने पर रोक देगा, ताकि आप संभावित रूप से डेडलॉक स्थिति में समाप्त हो सकें (लेनदेन 1 को अवरुद्ध कर दिया गया है टेबल लॉक को अपने वाक्यूम करने के लिए, ट्रांजैक्शन 2 को अवरुद्ध होने की प्रतीक्षा करने के लिए अवरुद्ध हो जाता है कि लेनदेन 1 लॉक हो गया है।)

मैं यह भी सिफारिश करता हूं कि यह किसी एप्लिकेशन में नहीं किया गया हो (शायद एक निर्धारित कार्य के रूप में) क्योंकि इसे पूरा करने में कुछ समय लग सकता है और अन्य प्रश्नों की गति को नकारात्मक रूप से प्रभावित कर सकता है।

SQL सर्वर के लिए, कोई वैक्यूम नहीं है - जो आप खोज रहे हैं वह कम हो गया है। आप 2005 में ऑटो सिकुंक चालू कर सकते हैं जो सर्वर द्वारा निर्णय लेने पर स्वचालित रूप से स्पेस को पुनः प्राप्त कर देगा, या डेटाबेस को कम करने और फ़ाइल लॉग फ़ाइल करने के लिए डीबीसीसी कथन जारी करेगा, लेकिन यह आपके बैकअप दिनचर्या और प्रति-डेटाबेस स्तर पर रणनीति पर निर्भर करता है।

1

वैक्यूम defrag की तरह है, यह अगर ऐसा करने के लिए अच्छा है आपने हाल ही में बहुत सी चीजें हटा दी हैं, या शायद आपने बहुत सी चीजें डाली हैं, लेकिन किसी भी तरह से आप इसे हर लेनदेन में नहीं करना चाहिए। यह लगभग किसी भी अन्य डेटाबेस कमांड से धीमा है और रखरखाव कार्य अधिक है।

हम कभी-कभी हमारी अधिकांश डीबी फ़ाइल को जोड़ते/हटाते हैं, इसलिए एक वैक्यूम एक अच्छा विचार होगा, लेकिन मैं अभी भी इसे उसी लेनदेन का हिस्सा नहीं मानूंगा जिसने काम किया था।

0

लेनदेन कितनी बार चलता है?

यह वास्तव में एक दैनिक प्रक्रिया है जो क्वेरी प्रक्रिया द्वारा कोई प्रश्न नहीं है, लेकिन यदि आप इसे बिना पूर्ण रूप से उपयोग करते हैं तो इसका उपयोग लेनदेन में किया जा सकता है क्योंकि यह लॉक प्राप्त नहीं करता है।

यदि आप ऐसा करने जा रहे हैं तो यह लेनदेन के बाहर होना चाहिए, क्योंकि यह लेनदेन डेटा अखंडता से स्वतंत्र है।

+0

यह मोबाइल सिंक प्रक्रिया के बाद किया जाता है।पहले लेनदेन डेटाबेस पर बहुत संशोधन करता है। चूंकि यह मोबाइल पर किया जाता है, इसलिए मुझे डेटाबेस को कॉम्पैक्ट करने के लिए एक वैक्यूम जारी करना होगा। – Pentium10

13

जब PostgreSQL का उपयोग कर इसे चाहते हैं या नहीं आप लेनदेन में वैक्यूम के रूप में manual में कहा गया है नहीं चल सकते:

वैक्यूम एक सौदे ब्लॉक के अंदर निष्पादित नहीं किया जा सकता है।

+0

धन्यवाद, PostgreSQL के लिए जानना अच्छा है। – Pentium10

+1

SQLite के लिए समान: http://www.sqlite.org/lang_vacuum.html – Constantin

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

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