Jest tylko jedna zmienna statusu, która dba o sort_buffer_size . To właśnie masz w wiadomości z powrotem w pytaniu: Sort_merge_passes . Dokumentacja MySQL mówi:
Sort_merge_passes: liczba przebiegów scalania, które musiał wykonać algorytm sortowania. Jeśli ta wartość jest duża, należy rozważyć zwiększenie wartości zmiennej systemowej sort_buffer_size .
Pamiętaj o jednej rzeczy dotyczącej sort_buffer_size
Jeśli w wynikach POKAŻ GLOBALNY STAN widać wiele przepustek Sort_merge_pass, możesz rozważyć zwiększenie wartości sort_buffer_size, aby przyspieszyć operacje ORDER BY lub GROUP BY, których nie można poprawić za pomocą optymalizacji zapytań ani lepszego indeksowania
Podczas gdy podnoszenie sort_buffer_size
może pomóc w zapytaniach za pomocą GROUP BY
s i ORDER BY
s, lepiej jest ulepszyć zapytania, które można ulepszyć, i dodać indeksy, których można użyć w Optymalizatorze zapytań.
Pozostaje pytanie: Jak sprawdzić przepustki Sort_merge_ ?
Użyj tego kodu, aby sprawdzić, ile przepustek Sort_merge_pass miało miejsce w ciągu ostatnich 5 minut. Oblicza również przepustki Sort_merge_ na godzinę.
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;
Jeśli znajdziesz Sort_merge_passes i wskaźnik jest zbyt wysoki, możesz zwiększyć sort_buffer_size . Załóżmy, że chcesz podbić do 4M. Uruchomiłbyś to:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
Dodałbyś to do my.cnf
[mysqld]
sort_buffer_size = 4M
Od czasu do czasu uruchamiałbyś kod, aby sprawdzić, czy nie występuje inny czas Sort_merge_passes spikes.