Il n'y a qu'une seule variable d'état qui se soucie de sort_buffer_size . C'est ce que vous avez dans le message de retour dans la question: Sort_merge_passes . La documentation MySQL dit:
Sort_merge_passes: nombre de passes de fusion que l'algorithme de tri a dû effectuer. Si cette valeur est grande, vous devez envisager d'augmenter la valeur de la variable système sort_buffer_size .
Veuillez garder à l'esprit une chose à propos de sort_buffer_size
Si vous voyez plusieurs Sort_merge_passes par seconde dans la sortie SHOW GLOBAL STATUS, vous pouvez envisager d'augmenter la valeur sort_buffer_size pour accélérer les opérations ORDER BY ou GROUP BY qui ne peuvent pas être améliorées avec l'optimisation de requête ou l'indexation améliorée
Bien que l'augmentation sort_buffer_sizepuisse aider les requêtes avec GROUP BYs et ORDER BYs, il vaut mieux améliorer les requêtes que vous pouvez améliorer et ajouter des index pouvant être utilisés par l'Optimiseur de requête.
La question demeure: comment vérifiez-vous les Sort_merge_passes ???
Utilisez ce code pour vérifier combien de Sort_merge_passes se sont produits au cours des 5 dernières minutes. Il calcule également les Sort_merge_passes par heure.
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;
Si vous trouvez les Sort_merge_passes et le taux trop élevés, alors n'hésitez pas à augmenter sort_buffer_size . Supposons que vous souhaitiez augmenter à 4M. Vous exécuteriez ceci:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
Vous ajouteriez ensuite ceci à my.cnf
[mysqld]
sort_buffer_size = 4M
Vous devez exécuter le code périodiquement pour vérifier les autres pointes de Sort_merge_passes .