एक सर्वर को वास्तव में कितनी रैम की आवश्यकता होती है?


12

मेरे पास दुनिया भर में तैनात कुछ सर्वर हैं। वे SQL Server 2005 x64 के साथ 6 जीबी रैम के साथ विंडोज 2003 x64 चला रहे हैं। बक्से में सबसे अच्छा (या यहां तक ​​कि एक स्वीकार्य) कॉन्फ़िगरेशन नहीं है, क्योंकि उस आदमी ने जो उन्हें सालों पहले आदेश दिया था वह वास्तव में नहीं जानता था कि वह क्या कर रहा था।

बक्से काफी लगातार मेमोरी से बाहर चल रहे हैं, पेजिंग फ़ाइल का उपयोग करके समाप्त हो जाते हैं और सब कुछ धीमा हो जाता है। आमतौर पर कमिट चार्ज 5.8GB होता है और तब जब किसी को कुछ इंटेंसिव करने की जरूरत होती है (जैसे रिपोर्ट चलाते हैं), तो वह नंबर छत से होकर जाता है।

मैं उन शक्तियों को प्राप्त करने की कोशिश कर रहा हूं जो अधिक मेमोरी का आदेश देती हैं, लेकिन मुझे बड़े पैमाने पर विरोध हो रहा है (उदाहरण के लिए सॉफ़्टवेयर को अधिक प्रदर्शनकारी बनाना, इन सभी सर्वरों के लिए बहुत अधिक लागत, या यह साबित करना कि बॉक्स में पर्याप्त मेमोरी नहीं है, आदि।) ..)।

क्या रैम (एक सूत्र) के लिए दिशा-निर्देश (या एक सूत्र) है कि एक बॉक्स को कितनी जरूरत है जो मैं गैर-तकनीकी लोगों के लिए प्रस्तुत कर सकता हूं, ताकि हम अंततः अपनी मेमोरी को ऑर्डर कर सकें?


क्या प्रणाली घर में विकसित की गई है?
Oskar Duveborn

@Oskar। हां, मैं डेवलपर हूं और कोड को नर्क और बैक से अनुकूलित किया गया है। बस एक टन डेटा है।
एंग्रीहैकर

फिर मेरा जवाब देखिए। यह इस तरह की चीज है जिसमें मैं माहिर हूं।
mrdenny

जवाबों:


9

वास्तव में आसानी से बताने का कोई तरीका नहीं है क्योंकि यह पूरी तरह से आपके उपयोग और एप्लिकेशन पर निर्भर है। आप डेटाबेस सर्वर को अधिकतम कर रहे हैं ... डेटाबेस कितना बड़ा है? आपके लेन-देन के आँकड़े क्या हैं?

आपके परिदृश्य में वास्तविक दुनिया की सीमाएँ स्पष्ट हैं। आप समस्या के बिना 6 टमटम पर थोड़ी देर के लिए चल रहे हैं, तो यह गमागमन और जोर मार रहा है। यह 6 गिग पर्याप्त नहीं है।

यदि प्रदर्शन पर्याप्त है कि यह व्यवसाय को प्रभावित करता है, तो आपके उच्च अप को पर्याप्त शिकायतें सुननी चाहिए कि यह स्मृति को बढ़ाने के लिए विवेकपूर्ण है। पता लगाएँ कि आपके समय की लागत क्या है और फिर यह पता लगाएँ कि सर्वर को "ट्यून" करने में कितना खर्च आएगा और ट्यूनिंग का निवारण करें, जब सर्वर में मेमोरी जोड़ा जाए तो यह मेमोरी की लागत और आधे घंटे से भी कम समय में समस्या को हल कर सकता है। समय बचता है।

जब तक आप वास्तव में अपने वास्तविक जीवन के उपयोग और वहां से काम करते हैं, तब तक आपको सही मात्रा में मेमोरी की आवश्यकता नहीं होगी।

उस ने कहा, आप यह सत्यापित कर सकते हैं कि आपका आवेदन सही मायने में अड़चन है। अपनी डिस्क i / o सांख्यिकी और नेटवर्क थ्रूपुट देखने के लिए विंडोज़ प्रदर्शन मॉनिटर चलाएं। देखें कि आपका विखंडन स्तर क्या है ( Google यहां एक अच्छा दोस्त है ) आप स्पष्ट मुद्दों के लिए कोड का ऑडिट करने की कोशिश कर सकते हैं, जहां एक क्वेरी बड़े पैमाने पर अक्षम ( Google फिर से ) हो रही है।

लेकिन फिर से यह सब इस बात पर निर्भर करता है कि यह व्यापार पर कितना बुरा असर डाल रहा है। क्या यह ट्यूनिंग में निवेश करने के लिए अधिक लायक है, या क्या यह पहले उस पर हार्डवेयर फेंकने के लिए बहुत बुरा है और फिर इसे ट्यूनिंग करने का प्रयास करें?


+1 आकार और आँकड़ों की ज़रूरत
Oskar Duveborn

12

यह देखने का एक आसान तरीका है कि क्या आपको अधिक रैम की आवश्यकता है, पेज लाइफ एक्सपेक्टेंसी परफेक्ट काउंटर पर चार्ट करना है। यह काउंटर बताता है कि SQL सर्वर कब तक यह सोचता है कि डेटा को अन्य डेटा के लिए जगह बनाने से पहले बफर पूल में रखा जाएगा। आप इस संख्या को अधिक से अधिक चाहते हैं। 6 गीगाहर्ट्ज़ रैम के साथ (आपके पास एसक्यूएल सेट होना चाहिए शायद 4 गिग्स में अधिकतम करने के लिए) आप शायद केवल कुछ मिनटों के लिए स्मृति में डेटा रख रहे होंगे, जब कोई बड़ी रिपोर्ट चलाता है तो आप इस नंबर टैंक को देखेंगे। कुछ सेकंड के लिए नीचे। आपके पास जितनी अधिक रैम होगी, उतना लंबा डेटा मेमोरी में रखा जा सकता है, और डिस्क से कम रीडिंग करने की आवश्यकता होगी।

उदाहरण के लिए, इस समय मैं जिन प्रणालियों के साथ काम कर रहा हूं, उनमें 256 गीगाहर्ट्ज़ रैम है और हम लगभग 12000 सेकंड या तो मेमोरी में डेटा रखते हैं।

कृपया हिट करने के लिए एक लक्ष्य संख्या के लिए मत पूछो, आप बस संख्या को यथासंभव अधिक चाहते हैं। आपके सिस्टम के बारे में अधिक जानने के बिना मैं शूट करने के लिए एक अच्छी संख्या नहीं दे सकता।


6

Hmmmm। ठीक है, 6 गिग्स राम की एक सभ्य राशि है, यहां तक ​​कि एक बड़े MSSQL स्थापित के लिए भी। आप वास्तव में देखना चाहते हैं और सुनिश्चित कर सकते हैं कि आपका कोड वास्तव में कुशल है। एक 6 टमटम लेनदेन थोड़ा असामान्य है ... मैंने राज्य-व्यापी पेरोल सिस्टम पर काम किया है जो साल के अंत में 1099 प्रोसेसिंग पर टमटम में शीर्ष पर नहीं था ... और अक्सर चलने के लिए ? मुझे नहीं पता। आप किस तरह के डेटा के साथ काम कर रहे हैं?

कहा जा रहा है कि, आप 64 बिट बॉक्स में जितना चाहें उतना रैम भर सकते हैं, और राम सस्ते में गंदगी है, इसलिए जितना संभव हो सके उतने में डाल सकते हैं ... वास्तव में बहुत अधिक रैम नहीं हो सकता एक डेटाबेस सर्वर।

संपादित करें: यह बेतहाशा अब पुराना हो गया है। मेरे पास 256 ggs RAM वाला MSSQL बॉक्स है।


1
वास्तव में डेटाबेस सर्वर पर बहुत अधिक रैम नहीं हो सकती। शायद नहीं, लेकिन आपके पास रैम हो सकता है आपने पैसा बर्बाद किया क्योंकि इसका उपयोग नहीं किया जा रहा है। हालांकि मैं सामान्य विचार से सहमत हूं कि यह कुछ प्रकार के कार्यों को करने वाले बक्से पर उदार होने के लिए भुगतान करता है, मुझे नहीं लगता कि इसकी आवश्यकताओं को समझे बिना केवल सिस्टम में संसाधनों को फेंकने का विस्तार होता है।
राब मोइर

2
@robert: ऐसा नहीं है कि मैं ब्लेड सर्वर खरीदने की वकालत कर रहा हूं। एक सर्वर में रैम को अधिकतम करना बहुत आसान है, और यदि आप मेमोरी से बाहर चल रहे हैं, तो अधिक क्यों नहीं जोड़ते हैं? मुझे लगता है कि समस्या की संभावना उनके कोड में है, लेकिन अगर आप सौ डॉलर की रैम के साथ समस्या को ठीक कर सकते हैं, तो यह पैसे का एक कुशल उपयोग है।
शैतानिकपपी

1
@ रॉबर्ट: मैं सहमत हूं। लेकिन मैंने बहुत बार देखा है कि लोग सॉफ्टवेयर की समस्या को ठीक करने के लिए कोडर्स और सलाहकारों पर हजारों खर्च करते हैं, जब थोड़ा और हार्डवेयर फेंकते हैं तो यह लागत के एक अंश के लिए एक ही काम करेगा।
सात्विकपापी

1
6 गिग्स एक अच्छे आकार का SQL सर्वर मेमोरी कॉन्फिगरेशन है? आप कुछ बहुत छोटे सर्वरों का उपयोग कर रहे हैं। मुझे 256 गिग्स के साथ बॉक्स मिल गए हैं, और मुझे 512 गीग्स स्थापित करने के साथ दोस्त मिल गए हैं। 6 गिग्स कुछ भी नहीं है।
मर्डनी

1
@ ममररा: एह। 2012 में, यकीन है। 2009 में? इतना नहीं।
शैतानिकप्‍पी

4

इससे पहले कि आप अधिक मेमोरी (या किसी अन्य घटक) खरीदने पर बंदूक कूदें, मैं सर्वर पर एक प्रदर्शन विश्लेषण चलाने की सलाह दूंगा। आप परफ्यूम का उपयोग करके स्वयं ऐसा कर सकते हैं या आप थर्ड पार्टी टूल्स का उपयोग करके देख सकते हैं। आपको ओएस और एसक्यूएल सर्वर दोनों के प्रदर्शन का विश्लेषण करना चाहिए। IMHO, अक्सर हम एक उचित विश्लेषण करने से पहले एक समस्या पर हार्डवेयर फेंकने के लिए तैयार हैं। इस बिंदु पर आप सभी जानते हैं कि यह एक प्रश्न, संग्रहीत कार्यविधि, निष्पादन योजना, डिस्क I / O, CPU उपयोग, आदि के साथ एक समस्या हो सकती है। मेमोरी दबाव अक्सर सिस्टम में एक और अड़चन का लक्षण हो सकता है।


1

जैसा कि "Satanicpuppy" ने कहा, बहुत अधिक रैम जैसी कोई चीज नहीं है, लेकिन 6 जीबी ठीक होनी चाहिए, शायद आपको अपने सर्वर पर क्या करना है, इस पर आपको फिर से सोचना चाहिए, मुझे नहीं लगता कि आपको "हार्डवेयर" समस्या है, आपको चाहिए अपनी SQL प्रोग्रामिंग पर ध्यान दें ...


1

जब डेटाबेस सर्वर की बात आती है तो "पर्याप्त" मेमोरी जैसी कोई चीज नहीं होती है। निश्चित रूप से, यह इस बात पर निर्भर करता है कि वे वास्तव में क्या करते हैं और चलाते हैं लेकिन अगर यह लगातार उपयोग किया जाने वाला डेटाबेस है जिसमें बहुत अधिक डेटा है और जटिल प्रश्न कर रहा है - 6 जीबी आसानी से अपर्याप्त हो सकता है।

मैं एक परेशानी सर्वर को कम से कम 32 या 64 जीबी में अपग्रेड करके शुरू करूंगा और देखूंगा कि क्या यह मदद करता है। यदि नहीं, तो डेटाबेस ट्यूनिंग, एप्लिकेशन समस्या निवारण और डीबगिंग की ओर मुड़ें - जो कि, जब तक कि किसी बेवकूफ ने डेटाबेस को डिज़ाइन नहीं किया, तब तक सर्वर-ग्रेड मेमोरी के कुछ स्टिक्स की तुलना में बहुत अधिक खर्च होता है (और भले ही किसी बेवकूफ ने चीज़ डिज़ाइन की हो, और भी स्पष्ट डिज़ाइन प्राप्त करना बरकरार समर्थन के साथ तय की गई त्रुटियाँ काफी चुनौती साबित हो सकती हैं)।

उस ने कहा, जैसा कि किसी और ने कहा - यह कुछ और हो सकता है इसे वापस पकड़ना (सॉफ्टवेयर डिजाइन के मुद्दों के अलावा), जैसे डिस्क या नेटवर्क I / O प्रदर्शन की कमी - डीबीए समर्थक को किराए पर लेना बस मूल SQL प्रदर्शन निगरानी के लिए जाने के लिए दिन उपयोगी साबित हो सकता है।


0

आपको अधिक अनुक्रमित निर्माण करना चाहिए। मुझे लगता है कि सामान्य तौर पर, ज्यादातर लोग अपने डेटाबेस को अंडर-इंडेक्स करते हैं।

यह अभी भी एयर-कोड है, मैंने अभी तक पूरी तरह से परीक्षण नहीं किया है, लेकिन यह आपको सही दिशा में मिलना चाहिए

http://accessadp.com/2011/08/22/missing-indexes-great-script-for-determining-roi/

Select ‘create index IX_’ +
 sys.objects.name +
 isnull(replace(‘_’ + equality_columns, ‘,’, ‘_’), ”) +
 isnull(replace(‘_’ + inequality_columns, ‘,’, ‘_’), ”) + ‘ on ‘ +
 sys.objects.name +
 ‘(‘ +
 coalesce(equality_columns + ‘,’ + inequality_columns, equality_columns , inequality_columns ) +
 ‘) ‘ +
 isnull(‘ include (‘ + included_columns + ‘)’, ”)
 as CreateIndexSql,
 (CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.user_seeks)+CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.unique_compiles))*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_total_user_cost)*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_user_impact/100.0) AS Score,
 sys.schemas.schema_id,
 sys.schemas.name AS schema_name,
 sys.objects.object_id,
 sys.objects.name AS object_name,
 sys.objects.type,
 partitions.Rows, partitions.SizeMB,
 sys.dm_db_missing_index_details.equality_columns,
 sys.dm_db_missing_index_details.inequality_columns,
 sys.dm_db_missing_index_details.included_columns,
 sys.dm_db_missing_index_group_stats.unique_compiles,
 sys.dm_db_missing_index_group_stats.user_seeks, sys.dm_db_missing_index_group_stats.user_scans,
 sys.dm_db_missing_index_group_stats.avg_total_user_cost, sys.dm_db_missing_index_group_stats.avg_user_impact,
 sys.dm_db_missing_index_group_stats.last_user_seek, sys.dm_db_missing_index_group_stats.last_user_scan,
 sys.dm_db_missing_index_group_stats.system_seeks, sys.dm_db_missing_index_group_stats.system_scans,
 sys.dm_db_missing_index_group_stats.avg_total_system_cost, sys.dm_db_missing_index_group_stats.avg_system_impact,
 sys.dm_db_missing_index_group_stats.last_system_seek, sys.dm_db_missing_index_group_stats.last_system_scan
 FROM
 sys.objects
 JOIN (
 SELECT
 object_id, SUM(CASE WHEN index_id BETWEEN 0 AND 1 THEN row_count ELSE 0 END) AS Rows,
 CONVERT(numeric(19,3), CONVERT(numeric(19,3), SUM(in_row_reserved_page_count+lob_reserved_page_count+row_overflow_reserved_page_count))/CONVERT(numeric(19,3), 128)) AS SizeMB
 FROM sys.dm_db_partition_stats
 WHERE sys.dm_db_partition_stats.index_id BETWEEN 0 AND 1 –0=Heap; 1=Clustered; only 1 per table
 GROUP BY object_id
 ) AS partitions ON sys.objects.object_id=partitions.object_id
 JOIN sys.schemas ON sys.objects.schema_id=sys.schemas.schema_id
 JOIN sys.dm_db_missing_index_details ON sys.objects.object_id=sys.dm_db_missing_index_details.object_id
 JOIN sys.dm_db_missing_index_groups ON sys.dm_db_missing_index_details.index_handle=sys.dm_db_missing_index_groups.index_handle
 JOIN sys.dm_db_missing_index_group_stats ON sys.dm_db_missing_index_groups.index_group_handle=sys.dm_db_missing_index_group_stats.group_handle
 WHERE
 sys.dm_db_missing_index_details.database_id=DB_ID()
 AND (CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.user_seeks)+CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.unique_compiles))*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_total_user_cost)*CONVERT(Numeric(19,6), sys.dm_db_missing_index_group_stats.avg_user_impact/100.0) > 100
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.