मुझे एक कॉलम प्राथमिक कुंजी के साथ एक साधारण तालिका मिली है जिसे आईडी कहा जाता है, serial
टाइप करें। वहां वास्तव में 100,000,000 पंक्तियां हैं। तालिका 48 जीबी, पीके सूचकांक सीए 2,1 जीबी लेता है। मशीन चलाना केवल पोस्टग्रेज़ के लिए "समर्पित" है और यह कोर i5, 500GB HDD, 8GB RAM की तरह कुछ है। पीजी कॉन्फ़िगरेशन pgtune उपयोगिता द्वारा साझा किया गया था (साझा बफर सी 2 जीबी, प्रभावी कैश सीए 7 जीबी)। ओएस उबंटू सर्वर 14.04 है, पोस्टग्रेस 9.3.6।दोनों चयन गणना (पीके) और चयन गणना (*) इतनी धीमी क्यों हैं?
SELECT count(id)
और SELECT count(*)
दोनों इस साधारण मामले में इतनी धीमी क्यों हैं (सीसीए 11 मिनट)?
पोस्टग्रेएसक्यूएल प्लानर इंडेक्स स्कैनिंग के बजाय पूर्ण टेबल स्कैन क्यों चुन रहा है जो कम से कम 25 गुना तेज होना चाहिए (मामले में जहां इसे एचडीडी से पूरी अनुक्रमणिका पढ़नी होगी)। या मैं गलत कहां हूँ?
बीटीडब्ल्यू पंक्ति में कई बार क्वेरी चला रहा है कुछ भी नहीं बदल रहा है। अभी भी सीसीए 11 मिनट।
निष्पादन यहाँ योजना:
Aggregate (cost=7500001.00..7500001.01 rows=1 width=0) (actual time=698316.978..698316.979 rows=1 loops=1)
Buffers: shared hit=192 read=6249809
-> Seq Scan on transaction (cost=0.00..7250001.00 rows=100000000 width=0) (actual time=0.009..680594.049 rows=100000001 loops=1)
Buffers: shared hit=192 read=6249809
Total runtime: 698317.044 ms
पढ़ने के लिए डेटा की मात्रा 25x छोटी है और इसमें सभी कुंजी शामिल हैं जो गिनने के लिए पर्याप्त हैं, है ना? मैंने वाक्यूम पूर्ण और विश्लेषण दोनों चलाए हैं (जो बीटीडब्ल्यू 6 घंटे से अधिक समय लेते हैं)। – Kousalik
क्या आपके पास उस तालिका में बहुत सी समवर्ती डीएमएल हो रही है? सूचकांक (और इच्छा) केवल तभी उपयोग किया जा सकता है जब यह विश्वसनीय हो। यदि कई समवर्ती लेनदेन (या अधूरे लेनदेन) हैं तो पोस्टग्रेर्स इंडेक्स का उपयोग करने का विकल्प नहीं चुन सकते हैं। क्या आपके पास एक और "लेनदेन में निष्क्रिय" कनेक्शन हैं जो उस तालिका को संशोधित कर चुके हैं? इसके अलावा 'random_page_cost' (http://www.postgresql.org/docs/current/static/runtime-config-query.html#GUC-RANDOM-PAGE-COST) का मान क्या है जो सेटिंग योजनाकार प्रवृत्ति को प्रभावित करेगा एक सूचकांक का उपयोग करें। –
आप यह भी पढ़ना चाहेंगे: https://wiki.postgresql.org/wiki/Index-only_scans –