केवल एक स्थिति चर है जो Sort_buffer_size की परवाह करता है । यह आपके पास वापस संदेश में प्रश्न में है: Sort_merge_passes । MySQL प्रलेखन कहते हैं:
Sort_merge_passes: मर्ज की संख्या उस तरह के एल्गोरिथ्म से गुजरती है जिसे करना है। यदि यह मान बड़ा है, तो आपको सॉर्ट_बफ़र_साइज़ सिस्टम वैरिएबल का मान बढ़ाने पर विचार करना चाहिए ।
कृपया Sort_buffer_size के बारे में एक बात का ध्यान रखें
यदि आप SHOW GLOBAL STATUS आउटपुट में प्रति सेकंड कई Sort_merge_passes देखते हैं, तो आप ORDER BY या ग्रुप द्वारा गति बढ़ाने के लिए Sort_buffer_size मान बढ़ाने पर विचार कर सकते हैं जो क्वेरी अनुकूलन या बेहतर अनुक्रमण के साथ सुधार नहीं किया जा सकता।
sort_buffer_size
सवाल उठाते समय आप GROUP BY
s और ORDER BY
s के साथ क्वेरीज़ की मदद कर सकते हैं , आप क्वेरी को बेहतर बनाने में सुधार कर सकते हैं और ऐसे सूचकांक जोड़ सकते हैं जो क्वेरी ऑप्टिमाइज़र द्वारा उपयोग किए जा सकते हैं।
प्रश्न शेष है: आप Sort_merge_passes की जांच कैसे करते हैं ???
अंतिम 5 मिनट में कितने Sort_merge_passes हुए, यह जांचने के लिए इस कोड का उपयोग करें। यह प्रति घंटे Sort_merge_passes की गणना भी करता है।
SET @SleepTime = 300;
SELECT variable_value INTO @SMP1
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SELECT SLEEP(@SleepTime) INTO @x;
SELECT variable_value INTO @SMP2
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SET @SMP = @SMP2 - @SMP1;
SET @SMP_RATE = @SMP * 3600 / @SleepTime;
SELECT @SMP,@SMP_RATE;
यदि आपको Sort_merge_passes और दर बहुत अधिक है, तो क्रमबद्ध_बर्फर_साइज़ बढ़ाने के लिए स्वतंत्र महसूस करें । मान लीजिए आप 4M तक उठाना चाहते हैं। आप इसे चलाएंगे:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
फिर आप इसे my.cnf में जोड़ देंगे
[mysqld]
sort_buffer_size = 4M
आप दूसरी बार Sort_merge_passes spikes की जांच करने के लिए समय-समय पर कोड चलाएंगे ।