मुझे क्या उपयोग करना चाहिए?


25

मैं MySQL के साथ मिलकर Asp.Net का उपयोग कर रहा हूं। .Net कनेक्शन स्ट्रिंग में, मैंने मैक्स पूल साइज़ को 150 पर सेट किया है।

अगर मैं निम्नलिखित चलाता हूं तो मुझे ये मूल्य मिलते हैं:

SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474

जो थ्रेड्स_क्रिएट / कनेक्शन्स = 0,1392 देता है।

तो इससे ऐसा लगता है कि मुझे वृद्धि करने की आवश्यकता है thread_cache_size

लेकिन अगर मैं दौड़ता SHOW PROCESSLISTहूं तो मैं हमेशा देखता हूं कि मेरे पास बहुत सारे कनेक्शन खुले हैं (उनमें से ज्यादातर सो रहे हैं) जो कि नेट द्वारा बनाए गए पूल के कारण हैं। क्या मुझे अभी भी सेट करने की आवश्यकता है thread_cache_sizeक्योंकि मैं अभी भी कनेक्शन पूल से कनेक्शन का पुन: उपयोग करूंगा? यदि पूल का आकार 150 है, तो क्या आपको लगता है कि एक अच्छा मूल्य thread_cache_size150+ पर सेट होगा ? क्या यह CPU और मेमोरी को बहुत प्रभावित करेगा?

जवाबों:


43

MySQL प्रलेखन में जानकारी के आधार पर आप निम्न करना चाहिए: पता लगाएँ कि निरंतर कनेक्शन mysqld की सबसे बड़ी संख्या का उपयोग कर किया गया है कनेक्शन , Threads_created , और Max_used_connections ,

  • SHOW GLOBAL STATUS LIKE 'Connections';
  • SHOW GLOBAL STATUS LIKE 'Threads_created';
  • SHOW GLOBAL STATUS LIKE 'Max_used_connections';

निम्नलिखित की गणना करने का प्रयास करें

Threads_created / Connections: अगर यह 0.01 से अधिक है, तो वृद्धि करें thread_cache_size। बहुत कम से कम, thread_cache_sizeअधिक से अधिक होना चाहिए Max_used_connections


महान टिप्पणी के लिए धन्यवाद! मैंने अपने प्रश्न को थोड़ा अद्यतन किया।
मार्टिन

मुझे लगता है कि आप mysql> SHOW GLOBAL STATUS LIKE 'कनेक्शन' का इरादा कर रहे थे; (आपने अधिकतम दो बार लिखा है)
Alekc

1
मैं सिर्फ इस dev.mysql.com/doc/refman/5.7/en// का हवाला देकर जोड़ना चाहता हूं कि आपको थ्रेड_cache_size मान के लिए 8 से Max_used_connections जोड़ना चाहिए (बिना 100 से अधिक
CME64

1
असल में, मैनुअल (8% mac_used_connections) के डिफ़ॉल्ट का सुझाव देता है + 8 .... या 100 ... जो भी कम हो।
क्रिस्टोफर मैकगोवन

मेरे लिए # 264/103134 हैं, जो 0.0026 के लिए काम करता है, जो 0.01 से कम है, लेकिन मेरा MaxUsedConnections 72 है, इसलिए अंतिम वाक्य को बहुत विरोधाभासी है
बोटकोडर

11

MySQL डॉक्स के अनुसार, आपको सेट करना चाहिए thread_cache_sizeताकि अधिकांश नए कनेक्शन नए बनाए गए थ्रेड्स के बजाय कैश से थ्रेड का उपयोग करें। यह कुछ थ्रेड-निर्माण ओवरहेड बचाता है, हालांकि आम तौर पर एक महत्वपूर्ण प्रदर्शन में सुधार नहीं होता है:

यदि संभव हो तो कैश से लिए गए थ्रेड्स का पुन: उपयोग करके थ्रेड्स के अनुरोधों को संतुष्ट किया जाता है, और केवल जब कैश खाली होता है तो एक नया थ्रेड बनाया जाता है। यदि आपके पास बहुत सारे नए कनेक्शन हैं, तो प्रदर्शन में सुधार करने के लिए इस चर को बढ़ाया जा सकता है। आम तौर पर, यह एक अच्छा प्रदर्शन कार्यान्वयन प्रदान नहीं करता है यदि आपके पास एक अच्छा धागा कार्यान्वयन है। हालाँकि, यदि आपका सर्वर प्रति सेकंड सैकड़ों कनेक्शन देखता है, तो आपको सामान्य रूप से थ्रेड_कैशे_साइज़ को पर्याप्त रूप से सेट करना चाहिए ताकि अधिकांश नए कनेक्शन कैश्ड थ्रेड का उपयोग करें(स्रोत)

इसका मतलब यह होगा कि आपको अपना सेट करना चाहिए thread_cache_sizeताकि Threads_created / Connections(नए थ्रेड के निर्माण के लिए कनेक्शन का%) कम हो। यदि आप MySQL डॉक्स का शाब्दिक अर्थ ("सबसे") लेते हैं, तो मान <50% होना चाहिए। RolandoMySQLDBA का उत्तर <1% कहता है। मुझे नहीं पता कि सच्चाई के करीब कौन है।

आपको इससे अधिक सेट नहीं करना चाहिए । RolandoMySQLDBA के जवाब में अंतिम वाक्य ( "कम से कम, thread_cache_size Max_used_connections से अधिक होना चाहिए") समझदार प्रतीत नहीं होता है, क्योंकि यह कहते हैं कि आप अपने सर्वर से कैश में अधिक धागे रखना चाहिए कभी का उपयोग करता है। MySQL कभी भी कैश में इतने सारे धागे नहीं डालेगा - यह पहले से खाली नहीं करता है कैश में धागे डालते हैं - यह केवल एक क्लाइंट द्वारा थ्रेड बनाने और डिस्कनेक्ट करने के बाद उन्हें वहां डालता है । यदि आपके पास कभी भी X क्लाइंट नहीं है, तो आपके पास कैश में X थ्रेड कभी नहीं होगा:thread_cache_sizeMax_used_connections

जब कोई ग्राहक डिस्कनेक्ट करता है, तो थ्रेड_cache_size थ्रेड से कम होने पर क्लाइंट के धागे कैश में डाल दिए जाते हैं। (स्रोत)

माइकल का यह जवाब भी देखें :

थ्रेड_cache_size को एक ऐसे मान से बड़ा करना जो max_connections से अधिक लगता है, बहुत ही अनपेक्षित सलाह की तरह लगता है ... कैश संभवतः max_connections से बड़ा नहीं हो सकता है और यहां तक ​​कि उस आकार के करीब कहीं भी कैश केवल तभी समझ सकता है जब आपके पास अपने थ्रेड पर जबरदस्त मात्रा में मंथन हो। ... जो, एक अच्छी तरह से व्यवहार आवेदन में, मामला नहीं होगा।

/dba//a/28701


मुझे ऐसा लगता है! मैं इस विन्यास का परीक्षण करने के बाद, "thread_cache_size, Max_used_connections से अधिक होना चाहिए" सहायक नहीं।
CK.Nguyen 12:11 बजे

-2

आम कार्य दिवस में, 'नए भाड़े' को संभवतः कनेक्शन की आवश्यकता होगी? अधिकांश जादूगर यह नहीं जान पाएंगे कि अगले कुछ दिनों में कितने लोगों को काम पर रखा जा सकता है। MySQL के V 8 का सुझाव है कि CAP थ्रेड_cache_size 100 पर अधिभार को रोकने के लिए अधिकतम_उपयोग की परवाह किए बिना। मेरे लिए, 100 एक अच्छा कैप है।

कृपया इस लिंक को देखें।

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_thread_cache_size
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.