FILLFACTOR
केवल INSERT
. के साथ और SELECT
आपको एक FILLFACTOR
. का उपयोग करना चाहिए 100
. का हर जगह।
यदि आप UPDATE
के साथ "विगल" नहीं करने जा रहे हैं, तो प्रति मेमोरी ब्लॉक में विग्गल रूम छोड़ने का कोई मतलब नहीं है। एस.
FILLFACTOR
. के पीछे का तंत्र बहुत सरल है। INSERT
s केवल FILLFACTOR
द्वारा घोषित प्रतिशत तक प्रत्येक डेटा पृष्ठ (आमतौर पर एक 8 kb ब्लॉक) भरें स्थापना। साथ ही, जब भी आप VACUUM FULL
run चलाते हैं या CLUSTER
मेज पर, प्रति ब्लॉक वही विग्गल रूम फिर से स्थापित किया गया है। आदर्श रूप से, यह UPDATE
. की अनुमति देता है एक ही डेटा पृष्ठ में नए पंक्ति संस्करणों को संग्रहीत करने के लिए, जो बहुत सारे UPDATE
से निपटने के दौरान पर्याप्त प्रदर्शन को बढ़ावा दे सकता है एस। H.O.T के संयोजन में भी फायदेमंद अपडेट :
अगर नहीं हैं अपडेट करें, इसके लिए जगह बर्बाद न करें और FILLFACTOR = 100
. सेट करें ।
जानकारी का मूल स्रोत:CREATE TABLE
या CREATE INDEX
।
अन्य अनुकूलन
लेकिन आप कुछ और कर सकते हैं - चूंकि आप अनुकूलन के लिए एक चूसने वाले लगते हैं ... :)
CREATE TABLE dev_transactions
( transaction_id serial PRIMARY KEY,
gateway integer NOT NULL,
moment timestamp NOT NULL,
transaction_type smallint NOT NULL,
status smallint NOT NULL,
device integer NOT NULL,
controler smallint NOT NULL,
token integer,
et_mode character(1));
यह आपकी तालिका को डेटा संरेखण के संबंध में अनुकूलित करता है और पैडिंग . से बचता है एक सामान्य 64 बिट सर्वर के लिए और कुछ बाइट्स बचाता है, शायद औसतन केवल 8 बाइट - आप आमतौर पर "कॉलम टेट्रिस:
के साथ ज्यादा निचोड़ नहीं सकते हैं।
साथ ही, NOT NULL
रखें बहुत कम प्रदर्शन बोनस के लिए तालिका की शुरुआत में कॉलम।
साथ ही, आपकी तालिका में 9 स्तंभ हैं . इसका अर्थ है अतिरिक्त 8 बाइट्स विस्तारित नल बिटमैप . के लिए - जो केवल 8 कॉलम . के लिए शुरुआती 1-बाइट NULL बिटमैप में फ़िट हो जाएगा .
यदि आप et_mode
को परिभाषित करते हैं और token
NOT NULL
, सभी कॉलम NOT NULL
. हैं और NULL बिटमैप का उपयोग बिल्कुल भी किया जाता है, 8 बाइट्स को मुक्त करता है।
यह प्रति पंक्ति भी काम करता है यदि आप कॉलम NOT NULL
घोषित नहीं करते हैं . यदि सभी स्तंभों में मान हैं, तो इस पंक्ति के लिए कोई NULL बिटमैप नहीं है। आपके मामले में, यह विरोधाभास प्रभाव की ओर ले जाता है जो et_mode
. के लिए मानों को भरता है और token
आपके संग्रहण आकार को छोटा बना सकता है या कम से कम वही रहें:
जानकारी का मूल स्रोत:डेटाबेस भौतिक संग्रहण पर मैनुअल ।
निश्चित प्रमाण प्राप्त करने के लिए अपनी मूल तालिका के साथ पंक्तियों के आकार (मानों से भरे हुए) की तुलना करें:
SELECT pg_column_size(t) FROM dev_transactions t;