क्या मैं पूरे डीबी को मेमोरी में फिट कर सकता हूं?


9

मेरा डेटाबेस लगभग 1GB आकार का है (मेरी db की mdf फ़ाइल के अनुसार)। मेरे डेटाबेस सर्वर में 4gb का RAM है। सक्रिय होते समय कंप्यूटर पर मेमोरी खपत को देखते हुए, यह लगभग 85% (ओएस, आदि सहित) पर बैठता है

क्या इसका मतलब यह है कि सभी डीबी रीड एक्टिविटी अकेले मेमोरी में काम करती है (यानी पूरी डीबी मेमोरी में बैठी है)? या अभी भी एक ऐसा मामला है जहां इसे डिस्क पर जाना होगा?


1
वैसे, तुलना के लिए, क्या उपयोग है जब एप्लिकेशन सक्रिय नहीं है? आम तौर पर, एक डेटाबेस सिस्टम के लाभों में से एक यह है कि इसे मेमोरी में पूर्ण फ़ाइल की आवश्यकता नहीं है, लेकिन यह तब तक फिट होगा जब आप इसे मेमोरी में खींच लेते हैं जब तक कि आप इसे कहीं और फ्लश नहीं करते। मुझे 'नहीं' घोषित करना होगा।
थॉमस

@श्री। निराशा: मैं मानता हूं कि यह एक लाभ है, लेकिन इस मामले में जहां यह पूरी फाइल को मेमोरी में डाल सकता है (जैसे यह मामला), क्या यह होगा?

क्या इसकी जरूरत होनी चाहिए, फिर हां। लेकिन कॉल करने वालों की मांग और उनके लिए आवश्यक डेटा, मूल रूप से निश्चित रूप से नहीं। इसलिए, आम तौर पर, यदि आपके पास डेटाबेस मेमोरी की समस्या है, तो यह कॉलिंग कोड या सहायक सॉफ़्टवेयर या दो के मिश्रण के साथ होगा।
थॉमस थॉमस

1
परिप्रेक्ष्य के लिए एक उदाहरण: मुझे पता है कि बहुत बड़ी पोर्टल साइटों के मालिक एक बहुत बड़ी इंटरनेट कंपनी है। वे सीए देते हैं। उन पोर्टल्स के लिए अपने स्वयं के विज्ञापनदाताओं से 300 मिलियन विज्ञापन। विज्ञापन सर्वर की संरचना इस तरह के एक बड़ा ओरेकल DB सभी के साथ लेखांकन और लक्ष्यों के लिए जानकारी है कि वहाँ है, लेकिन 32 बड़े देखते हैं (32GB RAM) सर्वर छोटे डेटाबेस पकड़े (केवल वर्तमान में सक्रिय विज्ञापनों के साथ) रैम में । वे एक डिस्क को नहीं छूते, उन्हें ऐसा नहीं करना चाहिए: उनके पास केवल 1/1000 सेकंड के लिए एक विज्ञापन खोजने के लिए होता है जब इसके लिए क्वेरी आती है, किसी भी डिस्क का उपयोग उस लक्ष्य तक पहुंचने के लिए असंभव बना देगा।

1
यहाँ दो पुस्तकें पढ़ी जा रही हैं msdn.microsoft.com/en-us/library/ms178067.aspx और sqlserverperformance.wordpress.com/2008/08/06/…
सैफ खान

जवाबों:


5

हां, पूरे डेटाबेस को मेमोरी में स्टोर करने की संभावना है। यह चेकपॉइंट अंतराल पर डिस्क पर गंदे पृष्ठों को फ्लश करेगा। ध्यान दें कि सभी अद्यतनों को लॉग को लिखना होगा और प्रतिबद्ध होने से पहले टिकाऊ भंडारण पर लॉग रिकॉर्ड के सख्त होने की प्रतीक्षा करनी होगी। यह पुराना पेपर SQL Server 2000 I / O मूल बातें सभी विवरण हैं जिनकी आपको कभी और आवश्यकता होगी।

लेकिन आपको अनुमान लगाने की ज़रूरत नहीं है, आप इसे ठीक से माप सकते हैं और देख सकते हैं कि ऐसा होता है या नहीं। प्रासंगिक प्रदर्शन काउंटर हैं:

  • पृष्ठ जीवन प्रत्याशा सेकंड में एक पृष्ठ संदर्भ के बिना बफर पूल में रहेगा।
  • भौतिक डेटाबेस पृष्ठ की पृष्ठ संख्या / सेकंड को पढ़ता है जो प्रति सेकंड जारी किया जाता है। यह आँकड़ा सभी डेटाबेस में कुल भौतिक पृष्ठ पढ़ता है। क्योंकि भौतिक I / O महंगा है, आप लागत को कम करने में सक्षम हो सकते हैं, या तो बड़े डेटा कैश, बुद्धिमान अनुक्रमित और अधिक कुशल प्रश्नों का उपयोग करके, या डेटाबेस डिज़ाइन को बदलकर।
  • पृष्ठ प्रति सेकंड जारी किए गए भौतिक डेटाबेस पृष्ठ की संख्या / सेकंड लिखता है।

'हाँ, पूरे डेटाबेस को संभवतः मेमोरी में संग्रहीत किया गया है।' इसलिए, हमारे प्रोडक्शन सर्वर के मामले में, SQL सर्वर मास्टर के भीतर एक समर्पित डेटाबेस का उपयोग करने वाले प्रत्येक ~ 60 वेबसाइटों की एक न्यूनतम के साथ, जहां उपलब्ध मुट्ठी भर मशीनों से भी बड़े आकार के लिए इनमें से केवल एक मुट्ठी भर है, वह काम कैसे करता है ? मुझे यह कहने के लिए लुभाया जाता है कि कोई निश्चित डिफ़ॉल्ट या परिदृश्य की संभावना नहीं है - जैसा कि मैंने पिछली टिप्पणी के अनुसार किया था, यह इंजन के विपरीत पर्यावरण पर वास्तव में अधिक निर्भर है।
थॉमस

@श्री। निराशा: आप एक अलग सवाल पर मेरा जवाब दे रहे हैं। ओ पी ने कहा: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.। यदि आप उस मामले के लिए एक उत्तर चाहते हैं जब आपके पास 60 वेबसाइटें हों और उस मामले में बफर पूल कैशिंग कैसे काम करता है, तो उस प्रश्न को पूछें :)
रेमस रुसानु

आप यहां विशेषज्ञ हैं, लेकिन कृपया मेरी जिज्ञासु प्रकृति का बहाना करें: तो क्या यह सिद्धांत मान लेता है (क्योंकि हमारे पास कोई विशिष्ट डेटा नहीं है) कि मशीन किसी और से कर रही है? या अज्ञात उपभोक्ताओं द्वारा उपयोग की जा रही मेमोरी की एक निश्चित सीमा के लिए खाते?
थॉमस

जैसा कि मैंने कहा you don't have to guess, you can measure this exactly:।
रेमस रूसु

-5

पूरे DB (यानी डेटा) को मेमोरी (sql server) में स्टोर नहीं किया जाएगा। इंडेक्स और / या कुंजियों की जांच करने के बाद, यह एक पॉइंटर को पुनः प्राप्त करेगा जहां डेटा फ़ाइल में वह डेटा है जिसे आप खोज रहे हैं, और संभवतः इसे पुनः प्राप्त करने के लिए डिस्क पर जाएगा। यदि कोई कुंजी या इंडेक्स नहीं है, तो पूरे ढेर को स्कैन करना होगा।

एसक्यूएल सर्वर के कौन से संस्करण के आधार पर आप चल रहे हैं, डिस्क रीड को कम करने के लिए अच्छी तरह से उपयोग किए गए डेटा को कैशिंग करने की रणनीतियाँ हो सकती हैं।

आप MySql क्लस्टर डेटाबेस जैसे इन-मेमोरी DBs प्राप्त कर सकते हैं .... यह उच्च उपलब्धता / आपदा वसूली और तेजी से डेटा पुनर्प्राप्ति के लिए सर्वर के एक समूह में मेमोरी में ENTIRE db फिट करने के लिए डिज़ाइन किया गया है।


1
मैंने इसे नीचे वोट करने के लिए पर्याप्त प्रतिनिधि नहीं है, लेकिन यकीन नहीं है कि आप क्यों कह रहे हैं कि यह स्पष्ट रूप से स्मृति में संग्रहीत नहीं किया जाएगा। एक बार जब कोई पृष्ठ बफर कैश में पढ़ा जाता है तो यह तब तक वहां रहेगा जब तक आंतरिक या बाहरी मेमोरी दबाव के कारण कैश को ट्रिम नहीं किया जाता है।
मार्टिन स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.