shared hit
अनिवार्य रूप से इसका मतलब है कि कंप्यूटर की मुख्य स्मृति में मूल्य पहले से ही कैश किया गया है और इसे हार्ड डिस्क से पढ़ने के लिए आवश्यक नहीं था।
मुख्य मेमोरी (रैम) तक पहुंच हार्ड 0 से मूल्य पढ़ने से अधिक तेज है। और यही कारण है कि क्वेरी तेजी से अधिक शेयर हिट है।
पोस्टग्रेस शुरू करने के तुरंत बाद, मुख्य मेमोरी (रैम) में कोई भी डेटा उपलब्ध नहीं है और हार्ड डिस्क से सबकुछ पढ़ने की जरूरत है।
एक कार्य योजना लागू करके से इस कदम पर विचार करें:
-> Seq Scan on products.product_price (cost=0.00..3210.27 rows=392273 width=0) (actual time=0.053..103.958 rows=392273 loops=1)
Output: product_id, valid_from, valid_to, price
Buffers: shared read=2818
I/O Timings: read=48.382
हिस्सा "बफ़र: पढ़ा साझा = 2818" का मतलब है कि 2818 ब्लॉक (प्रत्येक 8k) हार्ड डिस्क से पढ़ा जा सकता था (और है कि 48ms ले लिया - मेरे पास एक एसएसडी है)। उन 2818 ब्लॉक कैश ("shared buffers") में संग्रहीत किए गए थे ताकि अगली बार उन्हें डेटाबेस की आवश्यकता हो (उन्हें) धीमी गति से (धीमी) हार्ड डिस्क से पढ़ने की आवश्यकता नहीं है।
कि बयान योजना में परिवर्तन जब मैं फिर से चलाने:
-> Seq Scan on products.product_price (cost=0.00..3210.27 rows=392273 width=0) (actual time=0.012..45.690 rows=392273 loops=1)
Output: product_id, valid_from, valid_to, price
Buffers: shared hit=2818
जिसका मतलब है कि उन 2818 ब्लॉक कि पिछले बयान मुख्य स्मृति (= रैम) में थे और Postgres पढ़ने की जरूरत नहीं था उन्हें हार्ड डिस्क से।
"स्मृति" हमेशा कंप्यूटर में निर्मित मुख्य मेमोरी (रैम) को संदर्भित करता है और सीपीयू के लिए सीधे पहुंच योग्य होता है - "बाहरी भंडारण" के विपरीत।
स्रोत
2015-10-02 13:41:46
'साझा hit':
कैसे Postgres साझा बफ़र्स का प्रबंधन करता है पर कई प्रस्तुतियों रहे हैं मूल्य कैम को मापें ई से (साझा) मेमोरी और हार्ड डिस्क –
@a_horse_with_no_name से नहीं पढ़ा जाता है यह स्मृति मेमोरी पढ़ने के बिना स्मृति (केस में साझा) से कैसे संभव है? मुझे समझ में नहीं आता ... –
@a_horse_with_no_name क्या है [that] (https://en.wikipedia.org/wiki/Shared_memory_%28interprocess_communication%29) साझा स्मृति अवधारणा के बारे में आपने बात की थी? –