पृष्ठों को आवश्यकतानुसार मेमोरी में पढ़ा जाता है, यदि कोई मुफ्त मेमोरी उपलब्ध नहीं है, तो सबसे पुराना अनमॉडिफाइड पेज को आने वाले पेज से बदल दिया जाता है।
इसका मतलब है कि यदि आप किसी क्वेरी को निष्पादित करते हैं जिसके लिए मेमोरी में अधिक डेटा की आवश्यकता होती है, तो कई पेज मेमोरी में बहुत कम जीवन जीएंगे, जिसके परिणामस्वरूप बहुत सारे I / O हो जाएंगे।
आप Windows प्रदर्शन मॉनिटर में "पृष्ठ जीवन प्रत्याशा" काउंटर को देखकर इस आशय को देख सकते हैं। को देखो https://sqlperformance.com/2014/10/sql-performance/knee-jerk-page-life-expectancy कि काउंटर के बारे में कुछ महान जानकारी के लिए।
टिप्पणियों में, आपने विशेष रूप से पूछा कि क्या होता है जब क्वेरी के परिणाम उपलब्ध बफर स्थान से बड़े होते हैं। सबसे सरल उदाहरण लें, select * from some_very_big_table;
- मान लें कि तालिका 32GB है, और max server memory (MB)
24GB पर कॉन्फ़िगर किया गया है। सभी 32GB टेबल डेटा को पृष्ठ बफर में एक समय में, लैच किए गए पेजों में पढ़ा जाएगा, नेटवर्क पैकेट में स्वरूपित, और तार भर भेजा। यह पृष्ठ-दर-पृष्ठ होता है; आपके पास एक ही समय में 300 ऐसे प्रश्न चल सकते हैं, और यह मानते हुए कि कोई अवरोध उत्पन्न नहीं हो रहा है, प्रत्येक क्वेरी के लिए डेटा पृष्ठ बफर स्पेस, एक समय में एक पृष्ठ में पढ़ा जाएगा, और ग्राहक को जितनी जल्दी हो सके तार पर रखा जा सकता है। अनुरोध और डेटा की खपत। एक बार जब प्रत्येक पृष्ठ का सारा डेटा तार पर भेज दिया जाता है, तो पृष्ठ अनियंत्रित हो जाता है, और बहुत जल्दी डिस्क के साथ किसी अन्य पृष्ठ से बदल दिया जाएगा।
अधिक जटिल क्वेरी के मामले में, उदाहरण के लिए कई तालिकाओं से परिणामों को एकत्र करने के लिए कहें, पृष्ठों को ठीक उसी तरह मेमोरी में खींचा जाएगा जैसा कि क्वेरी प्रोसेसर द्वारा आवश्यक है। यदि क्वेरी प्रोसेसर को परिणामों की गणना करने के लिए अस्थायी कार्य स्थान की आवश्यकता होती है, तो यह पता चलेगा कि जब यह क्वेरी के लिए एक योजना का संकलन करता है, और SQLOS से कार्य स्थान (मेमोरी) का अनुरोध करेगा । SQLOS कुछ बिंदु पर होगा (यह मानते हुए कि यह समय समाप्त नहीं होता है ), उस मेमोरी को क्वेरी प्रोसेसर को अनुदान दें, जिस बिंदु पर क्वेरी प्रोसेसिंग फिर से शुरू होगी। यदि क्वेरी प्रोसेसर SQLOS से कितनी मेमोरी मांगता है, इसके अनुमान में गलती करता है, तो उसे "डिस्क पर स्पेल" करने की आवश्यकता हो सकती हैसंचालन, जहां डेटा अस्थायी रूप से एक मध्यवर्ती रूप में tempdb में लिखा जाता है। जिन पृष्ठों को tempdb पर लिखा गया है, उन्हें एक बार अनप्लग कर दिया जाएगा, जब वे मेमोरी में पढ़ने के लिए अन्य पृष्ठों के लिए जगह बनाने के लिए tempdb को लिखे जाएंगे। आखिरकार क्वेरी प्रक्रिया टेम्पर्ड बीडी में संग्रहीत डेटा पर वापस आ जाएगी, पेजिंग में बफर मुक्त करने वाले पृष्ठों में पेजिंग में उपयोग करते हुए पेजिंग।
मैं निस्संदेह उपरोक्त सारांश में बहुत ही तकनीकी विवरणों का एक भार याद कर रहा हूं, लेकिन मुझे लगता है कि एसक्यूएल सर्वर इस बात का सार रखता है कि मेमोरी में फिट होने की तुलना में SQL डेटा अधिक डेटा कैसे संसाधित कर सकता है।