यह वास्तव में उससे कहीं अधिक जटिल है।
नल बिटमैप को पंक्ति में प्रति कॉलम एक बिट की आवश्यकता होती है, जिसे पूर्ण बाइट्स तक गोल किया जाता है। यह केवल तभी होता है जब वास्तविक पंक्ति में कम से कम एक NULL मान शामिल हो और उस स्थिति में पूरी तरह से आवंटित हो। NOT NULL
बाधाओं का उस पर सीधा प्रभाव नहीं पड़ता है। (बेशक, यदि आपकी तालिका के सभी फ़ील्ड NOT NULL
. हैं , कभी भी शून्य बिटमैप नहीं हो सकता।)
"हीप टुपल हेडर" (प्रति पंक्ति) 23 बाइट लंबा है। वास्तविक डेटा MAXALIGN
. के गुणज से प्रारंभ होता है (अधिकतम डेटा संरेखण ) उसके बाद, जो आमतौर पर 64-बिट OS पर (32-बिट OS पर 4 बाइट्स) 8 बाइट्स होता है। निश्चित उत्तर पाने के लिए अपने PostgreSQL बाइनरी डीआईआर से रूट के रूप में निम्न कमांड चलाएँ:
./pg_controldata /path/to/my/dbcluster
Postgres 12 की एक विशिष्ट डेबियन-आधारित स्थापना पर जो होगा:
sudo /usr/lib/postgresql/12/bin/pg_controldata /var/lib/postgresql/12/main
किसी भी तरह से, हेडर और डेटा की संरेखित शुरुआत के बीच एक फ्री बाइट है, जिसका उपयोग नल बिटमैप कर सकता है। जब तक आपकी तालिका में 8 या उससे कम स्तंभ हैं , NULL संग्रहण प्रभावी रूप से बिल्कुल मुफ़्त है (जहां तक डिस्क स्थान का संबंध है)।
उसके बाद, एक और MAXALIGN
(आमतौर पर 8 बाइट्स) एक अन्य (आमतौर पर) 64 क्षेत्रों को कवर करने के लिए अशक्त बिटमैप के लिए आवंटित किया जाता है। आदि।
यह कम से कम 8.4 - 12 संस्करणों के लिए मान्य है और संभवतः नहीं बदलेगा।