C'è solo una variabile di stato che si preoccupa di sort_buffer_size . Questo è quello che hai nel messaggio nella domanda: Sort_merge_passes . La documentazione di MySQL dice:
Sort_merge_passes: il numero di passaggi di merge che l'algoritmo di ordinamento ha dovuto eseguire. Se questo valore è elevato, è necessario aumentare il valore della variabile di sistema sort_buffer_size .
Tieni presente una cosa su sort_buffer_size
Se nell'output SHOW GLOBAL STATUS vengono visualizzati molti passi Sort_merge al secondo, è possibile considerare di aumentare il valore sort_buffer_size per velocizzare le operazioni ORDER BY o GROUP BY che non possono essere migliorate con l'ottimizzazione delle query o l'indicizzazione migliorata
Mentre la raccolta di sort_buffer_size
domande può aiutare con GROUP BY
s e ORDER BY
s, si sta meglio migliorando le query che si può migliorare e aggiungendo gli indici che possono essere utilizzati da Query Optimizer.
La domanda rimane: come si fa a controllare i Sort_merge_passes ???
Utilizzare questo codice per verificare il numero di Sort_merge_passes negli ultimi 5 minuti. Calcola anche i Sort_merge_passes all'ora.
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;
Se trovi Sort_merge_passes e la tariffa è troppo alta, sentiti libero di aumentare sort_buffer_size . Supponiamo di voler aumentare a 4M. Faresti questo:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
Aggiungeresti quindi questo a my.cnf
[mysqld]
sort_buffer_size = 4M
Dovresti eseguire periodicamente il codice per verificare altre volte picchi di Sort_merge_passes .