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_size
puisse aider les requêtes avec GROUP BY
s et ORDER BY
s, 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 .