- PostgreSQL 18, फ़ाइल कॉपी रणनीति (FILE_COPY) और फ़ाइल सिस्टम clone फ़ीचर को मिलाकर database को लगभग तुरंत clone कर सकता है
- नया configuration value
file_copy_method = clone इस्तेमाल करने पर XFS, ZFS, APFS जैसे आधुनिक file system के clone फ़ीचर (FICLONE) का उपयोग किया जा सकता है
- benchmark नतीजों में, 6GB database को clone करते समय मौजूदा WAL_LOG तरीका लगभग 67 सेकंड लेता है, जबकि clone तरीका लगभग 0.2 सेकंड में पूरा होता है
- clone किया गया database शुरुआत में वही physical block साझा करता है, लेकिन write होने पर copy-on-write के ज़रिए अलग हो जाता है
- हालांकि, सिर्फ तब clone किया जा सकता है जब कोई active connection न हो, और यह केवल एक ही file system के भीतर काम करता है
PostgreSQL की template-आधारित cloning संरचना
- PostgreSQL में
CREATE DATABASE dbname कमांड चलाने पर अंदरूनी रूप से template1 database को clone करके नया database बनाया जाता है
- यह
CREATE DATABASE dbname TEMPLATE template1 के समान व्यवहार है
template1 की जगह किसी दूसरे database को चुना जा सकता है, इसलिए custom template का उपयोग करके cloning संभव है
- PostgreSQL 18 में इसी template system को लगभग तुरंत clone किए जा सकने वाले ढांचे तक बढ़ाया गया है
CREATE DATABASE ... STRATEGY
- PostgreSQL 15 से
CREATE DATABASE ... STRATEGY parameter जोड़ा गया, जिससे cloning method चुनना संभव हुआ
- default
WAL_LOG है, जो Write-Ahead Log के ज़रिए block-level cloning करता है
- यह तरीका I/O load कम करता है और concurrency support बेहतर बनाता है, लेकिन बड़े clone में धीमा है
STRATEGY=FILE_COPY देने पर पुराने file copy तरीके पर लौटा जा सकता है, और PostgreSQL 18 में इसी के आधार पर नया cloning option जोड़ा गया है
FILE_COPY और file_copy_method
- PostgreSQL 18 की
file_copy_method setting OS-level file cloning method को नियंत्रित करती है
- default
copy है, जो हर byte को पढ़कर नई जगह लिखता है
clone पर बदलने से file system का clone फ़ीचर (FICLONE) इस्तेमाल होता है, जिससे तुरंत clone और अतिरिक्त space खर्च नहीं होता
- supported file system: XFS, ZFS, APFS, FreeBSD ZFS
- configuration प्रक्रिया
- संबंधित file system पर PostgreSQL cluster बनाएं
file_copy_method = clone सेट करके reload करें
benchmark नतीजे
- लगभग 6GB आकार का test database (
source_db) बनाने के बाद दो तरीकों की तुलना की गई
WAL_LOG तरीका: 67,000ms (लगभग 67 सेकंड)
FILE_COPY + clone तरीका: 212ms
- समान data size पर लगभग 300 गुना से अधिक performance improvement देखा गया
- clone किया गया database (
fast_clone) लगभग कोई अतिरिक्त disk space इस्तेमाल नहीं करता
clone किए गए data का काम करने का तरीका
file_copy_method = clone इस्तेमाल करने पर सिर्फ file system metadata clone होता है, इसलिए दोनों database एक ही physical block साझा करते हैं
- PostgreSQL जो database size दिखाता है, वह logical size (लगभग 6GB) के रूप में समान रहता है
- write होने पर copy-on-write (COW) काम करता है और संबंधित page अलग हो जाता है
- वह page जिसमें बदली गई row शामिल है
- वह page जिसमें नया tuple लिखा जाता है
- index page, FSM, visibility map page आदि
VACUUM चलाने पर भी अतिरिक्त page separation होता है
XFS में shared block की जांच
filefrag -v कमांड से दो database के physical block shared हैं या नहीं यह जांचा जा सकता है
- शुरुआती स्थिति में सभी extents
shared के रूप में दिखते हैं
- कुछ row update करने पर पहले 40 block (लगभग 160KB) अलग होकर अलग physical address पर चले जाते हैं
- बाकी extents अब भी shared रहते हैं
सावधानियां और सीमाएं
- clone बनाते समय source database पर active connection नहीं होना चाहिए
- यह PostgreSQL की सीमा है, file system की समस्या नहीं
- production environment में आम तौर पर अलग template database इस्तेमाल किया जाता है
- cloning केवल एक ही file system के भीतर संभव है
- अगर कई tablespace अलग-अलग mount point पर हों, तो सामान्य copy इस्तेमाल होगी
- cloud managed services (AWS RDS, Google Cloud SQL आदि) में file system access उपलब्ध नहीं होने के कारण यह फ़ीचर इस्तेमाल नहीं किया जा सकता
- अपने VM या bare metal environment में पूरा control संभव है
निष्कर्ष
- PostgreSQL 18 का
file_copy_method = clone फ़ीचर सीधे OS-level clone capability का उपयोग करके
बड़े database clone समय को नाटकीय रूप से कम करता है
- testing, development और learning environment में तुरंत clone और reset किए जा सकने वाले database workflow बनाए जा सकते हैं
- हालांकि, active connection की सीमा और single file system को ध्यान में रखकर operation design करना होगा
अभी कोई टिप्पणी नहीं है.