PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgres पंक्ति आकार की समझ बनाना

पंक्ति आकार की गणना उससे कहीं अधिक जटिल है।

संग्रहण को आमतौर पर 8 kB डेटा पृष्ठों . में विभाजित किया जाता है . प्रति पृष्ठ एक छोटा निश्चित ओवरहेड होता है, संभावित शेष इतने बड़े नहीं होते हैं कि एक और टपल फिट हो सकें, और अधिक महत्वपूर्ण रूप से मृत पंक्तियाँ या प्रतिशत शुरू में FILLFACTOR के साथ आरक्षित हैं। सेटिंग।

और और भी अधिक ओवरहेड है प्रति पंक्ति (टुपल):पृष्ठ के प्रारंभ में 4 बाइट्स का एक आइटम पहचानकर्ता, HeapTupleHeader 23 बाइट्स और संरेखण पैडिंग . टपल हेडर की शुरुआत और साथ ही टपल डेटा की शुरुआत MAXALIGN के गुणक में संरेखित होती है , जो एक विशिष्ट 64-बिट मशीन पर 8 बाइट्स है। कुछ डेटा प्रकारों को 2, 4 या 8 बाइट्स के अगले गुणक में संरेखण की आवश्यकता होती है।

सिस्टम टेबल पर मैनुअल को उद्धृत करना pg_tpye :

<ब्लॉकक्वॉट>

typalign इस प्रकार के मान को संग्रहीत करते समय आवश्यक संरेखण है। यह डिस्क पर भंडारण के साथ-साथ PostgreSQL के अंदर मूल्य के अधिकांश अभ्यावेदन पर लागू होता है। जब एक से अधिक मान लगातार संग्रहीत किए जाते हैं, जैसे कि डिस्क पर एक पूर्ण पंक्ति के प्रतिनिधित्व में, इस प्रकार के डेटा से पहले पैडिंग डाली जाती है ताकि यह निर्दिष्ट सीमा पर शुरू हो। संरेखण संदर्भ अनुक्रम में पहले डेटा की शुरुआत है।

संभावित मान हैं:

  • c =char संरेखण, यानी, किसी संरेखण की आवश्यकता नहीं है।

  • s =short संरेखण (अधिकांश मशीनों पर 2 बाइट्स)।

  • i =int संरेखण (अधिकांश मशीनों पर 4 बाइट्स)।

  • d =double संरेखण (कई मशीनों पर 8 बाइट्स, लेकिन किसी भी तरह से नहीं)।

मैनुअल में बुनियादी बातों के बारे में यहां पढ़ें।

आपका उदाहरण

यह आपके 3 integer . के बाद 4 बाइट पैडिंग में परिणत होता है कॉलम, क्योंकि timestamp कॉलम के लिए double की आवश्यकता है संरेखण और 8 बाइट्स के अगले गुणक पर प्रारंभ करने की आवश्यकता है।

तो, एक पंक्ति में है:

   23   -- heaptupleheader
 +  1   -- padding or NULL bitmap
 + 12   -- 3 * integer (no alignment padding here)
 +  4   -- padding after 3rd integer
 +  8   -- timestamp
 +  0   -- no padding since tuple ends at multiple of MAXALIGN

प्लस आइटम आइडेंटिफ़ायर प्रति टुपल पेज हेडर में (जैसा कि टिप्पणी में @A.H. द्वारा बताया गया है):

 +  4   -- item identifier in page header
------
 = 52 bytes

तो हम देखे गए 52 बाइट्स . पर पहुंचते हैं ।

गणना pg_relation_size(tbl) / count(*) निराशावादी अनुमान है। pg_relation_size(tbl) ब्लोट (मृत पंक्तियाँ) और fillfactor . द्वारा आरक्षित स्थान शामिल हैं , साथ ही प्रति डेटा पृष्ठ और प्रति तालिका ओवरहेड। (और हमने लंबे समय तक संपीड़न का उल्लेख भी नहीं किया varlena TOAST तालिकाओं में डेटा, क्योंकि यह यहां लागू नहीं होता है।)

आप अतिरिक्त मॉड्यूल pgstattuple स्थापित कर सकते हैं और SELECT * FROM pgstattuple('tbl_name'); से कॉल कर सकते हैं टेबल और टपल साइज के बारे में अधिक जानकारी के लिए।

संबंधित:

  • पृष्ठ लेआउट के साथ तालिका का आकार
  • PostgreSQL में स्थान की गणना और बचत करना


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एडब्ल्यूएस और एज़्योर पर पूरी तरह से प्रबंधित पोस्टग्रेएसक्यूएल होस्टिंग लिगेसी माइग्रेशन के लिए समय पर लॉन्च होती है

  2. किस प्रकार के जॉइन का उपयोग करना है

  3. एकाधिक पंक्तियों को सम्मिलित करते समय डुप्लिकेट के साथ क्या होता है?

  4. PostgreSQL डेटा स्रोत को WildFly 9.0 में कैसे जोड़ें?

  5. PostgreSQL में विभिन्न तालिकाओं से डेटा को संयोजित करने के लिए जॉइन का उपयोग करना