डिस्क में जगह है
डिस्क पर स्थान की गणना करना तुच्छ नहीं है। आपको ध्यान में रखना होगा:
-
प्रति टेबल ओवरहेड (छोटी, मूल रूप से सिस्टम कैटलॉग में प्रविष्टियां, आपको हेरोकू पर प्रभावित नहीं कर सकती हैं)।
-
ओवरहेड प्रति पंक्ति (HeapTupleHeader) और प्रति डेटा पृष्ठ (PageHeaderData)। मैनुअल में पेज लेआउट के बारे में विवरण।
-
डेटा प्रकार संरेखण . के कारण स्थान खो गया ।
-
नल बिटमैप . के लिए स्थान . आपके मामले के लिए अप्रासंगिक, 8 कॉलम या उससे कम की तालिकाओं के लिए प्रभावी रूप से निःशुल्क।
-
मृत पंक्तियां
UPDATE
के बाद /DELETE
। -
सूचकांक(तों) . का आकार . आपके पास प्राथमिक कुंजी होगी, है ना? इंडेक्स का आकार केवल इंडेक्स किए गए कॉलम और कम ओवरहेड वाली तालिका के समान होता है।
-
संबंधित डेटा प्रकारों . के आधार पर डेटा की वास्तविक स्थान आवश्यकता . मैनुअल में वर्ण प्रकारों (निश्चित लंबाई प्रकार सहित) के लिए विवरण:
<ब्लॉककोट>एक छोटी स्ट्रिंग (126 बाइट्स तक) के लिए भंडारण की आवश्यकता 1 बाइटप्लस वास्तविक स्ट्रिंग है, जिसमें
character
के मामले में स्पेस पैडिंग शामिल है। . लंबी स्ट्रिंग में 1 के बजाय 4 बाइट ओवरहेड होते हैंसिस्टम कैटलॉग में सभी प्रकार के लिए अधिक विवरण
pg_type
। -
डेटाबेस एन्कोडिंग विशेष रूप से चरित्र प्रकारों के लिए। UTF-8 एक वर्ण को संग्रहीत करने के लिए अधिकतम चार बाइट्स का उपयोग करता है (लेकिन 7-बिट-ASCII वर्ण हमेशा केवल एक बाइट पर कब्जा करते हैं, यहां तक कि UTF-8 में भी।)
-
अन्य छोटी चीजें जो आपके मामले को प्रभावित कर सकती हैं, जैसे TOAST - जो आपको 64 कैरेक्टर स्ट्रिंग्स से प्रभावित नहीं करना चाहिए।
टेस्ट केस के साथ गणना करें
अनुमान लगाने का एक सरल तरीका है एक परीक्षण तालिका बनाना, उसे डमी डेटा से भरना और डेटाबेस ऑब्जेक्ट आकार फ़ंक्शंस के साथ मापना::
SELECT pg_size_pretty(pg_relation_size('tbl'));
अनुक्रमणिका सहित:
SELECT pg_size_pretty(pg_total_relation_size('tbl'));
एक त्वरित परीक्षण निम्नलिखित परिणाम दिखाता है:
CREATE TABLE test(a text, b text);
INSERT INTO test -- quick fake of matching rows
SELECT chr((g/1000 +32)) || to_char(g%1000, 'FM000')
, repeat (chr(g%120 + 32), 64)
FROM generate_series(1,50000) g;
SELECT pg_size_pretty(pg_relation_size('test')); -- 5640 kB
SELECT pg_size_pretty(pg_total_relation_size('test')); -- 5648 kB
प्राथमिक कुंजी जोड़ने के बाद:
ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a);
SELECT pg_size_pretty(pg_total_relation_size('test')); -- 6760 kB
इसलिए, मैं अधिकतम 44k . की अपेक्षा करता हूं 36k . के बिना और आसपास की पंक्तियां प्राथमिक कुंजी वाली पंक्तियाँ।