PostgreSQL में सबसे नापसंद हिस्सा
- पिछले 5 वर्षों में PostgreSQL इंटरनेट पर सबसे ज़्यादा पसंद किए जाने वाले DBMS के रूप में स्थापित हुआ है। इसकी वजह इसकी reliability, functionality, scalability, और ज़्यादातर operational workloads के लिए उपयुक्त होना है.
- हालांकि, PostgreSQL का multi-version concurrency control (MVCC) implementation दूसरे relational DBMS की तुलना में सबसे खराब माना जाता है.
Multi-version concurrency control क्या है?
- MVCC का लक्ष्य यह है कि कई queries एक ही समय में database को read और write कर सकें, बिना एक-दूसरे में हस्तक्षेप किए.
- DBMS मौजूदा rows को overwrite नहीं करता, बल्कि कई versions बनाए रखता है ताकि query अपनी request पूरी करने के लिए सही version चुन सके.
- यह तरीका explicit record locking की ज़रूरत कम करता है और queries को database का snapshot देखने देता है.
PostgreSQL का multi-version concurrency control
- PostgreSQL मौजूदा row को update करते समय नया version बनाकर बदलाव लागू करता है, यानी यह append-only version storage तरीका इस्तेमाल करता है.
- यह तरीका कई जटिल समस्याएँ पैदा करता है.
Multi-version storage
- PostgreSQL सभी row versions को एक ही storage space में रखता है.
- Update के समय नया version slot allocate किया जाता है, पुराना version copy किया जाता है, और फिर उस पर बदलाव लागू किए जाते हैं.
- PostgreSQL versions के बीच संबंध दर्ज करने के लिए version chain का उपयोग करता है.
Version vacuum
- PostgreSQL पुराने versions को हटाने के लिए vacuum प्रक्रिया का उपयोग करता है.
- Autovacuum नियमित रूप से चलकर expired versions हटाता है और space को फिर से उपयोग में लाता है.
PostgreSQL का MVCC सबसे खराब क्यों है
- PostgreSQL का MVCC implementation 1980s की design पर आधारित है, और यह आधुनिक log-structured system patterns के साथ मेल नहीं खाता.
- इसमें PostgreSQL के MVCC से जुड़ी चार मुख्य समस्याएँ बताई गई हैं.
समस्या 1: Version copy
- PostgreSQL हर column को नए version में copy करता है, जिससे data duplication और storage requirement बढ़ जाती है.
- MySQL और Oracle delta store करके इस समस्या से बचते हैं.
समस्या 2: Table bloat
- PostgreSQL के expired versions space घेरते रहते हैं, और अगर autovacuum उन्हें हटा न सके तो database लगातार बढ़ता रहता है.
- इससे query performance खराब होती है.
समस्या 3: Secondary index maintenance
- PostgreSQL को हर update पर सभी indexes update करने पड़ते हैं.
- इससे query performance खराब होती है.
समस्या 4: Vacuum management
- PostgreSQL की performance काफी हद तक autovacuum की effectiveness पर निर्भर करती है.
- अगर autovacuum सही से काम न करे, तो performance problems पैदा होती हैं.
GN⁺ का सार
- PostgreSQL अब भी बहुत पसंद किया जाने वाला DBMS है, लेकिन इसका MVCC implementation आधुनिक नहीं है.
- PostgreSQL की MVCC समस्याओं को हल करने के लिए बहुत समय और मेहनत की ज़रूरत है.
- PostgreSQL की autovacuum settings को optimize करके performance बेहतर की जा सकती है.
- PostgreSQL की MVCC समस्याओं के विकल्प के रूप में MySQL और Oracle पर विचार किया जा सकता है.
1 टिप्पणियां
Hacker News राय
OrioleDB ने नए storage engine के साथ समस्या हल करने की कोशिश की
INSERTऑपरेशन होते हों, तो अतिरिक्त space की ज़रूरत नहीं होतीCOPY FROMका उपयोग करके इससे बचा जा सकता हैPostgreSQL का डिज़ाइन हर मायने में खराब नहीं है
Oracle और MySQL के MVCC implementation नए version का physical address स्टोर नहीं करते
MySQL में single row update करते समय
SELECT id WHERE something; UPDATE what WHERE id=idकाफ़ी तेज़ होता है2010 के दशक में MongoDB को non-durable writes की वजह से "webscale" माना जाता था
pg_repackके बारे में दी गई व्याख्या से सहमत नहीं हूँVACUUM FULLभारी है, लेकिन repack एक तेज़ और हल्का विकल्प हैPostgreSQL के लोकप्रिय होने के कारण ये रहे
यह सवाल है कि PostgreSQL का पूरे नए row-tuple version को स्टोर करना क्या default storage engine की विशेषता है
लेख अच्छी तरह लिखा गया था, इसलिए पढ़ना और समझना आसान था