2017-09-14 3 views
-2

Forking processus multiples en php (superviseur). Chacun crée une connexion à la même base de données Mysql et exécute la même requête SELECT en parallèle (Gearman). Si j'augmente la quantité de processus (c'est-à-dire les mêmes connexions de temps) et que plus de requêtes identiques s'exécuteront en parallèle, cela augmentera le temps d'envoi des données dans SHOW PROCESSLIST dans chaque processus. C'est une sélection simple avec le niveau de transaction READ UNCOMMITED. Est-ce un problème de configuration mysql? Ou la requête SELECT a provoqué des verrous de tables? Ou peut-être un scan complet?Augmenter les connexions à mysql provoquer l'augmentation des temps d'envoi de données dans chacun sur la même requête

Serveur: Ubuntu 16.04.2 LTS. 1 noyau de CPU. MySQL 5.7.17. innodb_buffer_pool_size 12 GB

+2

Peut-être sur la latence réseau, la structure de table, les index et l'efficacité des requêtes. Donc, vous devriez donner plus de détails sur votre schéma et votre requête. – abeyaz

+0

Il utilise 32 tables incluant des auto-jointures (13 tables uniques) s'exécutant en 3 secondes dans une connexion, mais dans deux parallèles cela prendra 6 secondes dans chaque processus et ainsi de suite, comme leur exécution dans la file d'attente. Les requêtes sont assez grandes avec de nombreuses jointures, mais sans agrégation ni tri. une seule table scanne 4262 lignes avec using_where et 45% filtre, l'autre utilise l'index –

+0

On dirait que vous verrouillez la table dans chaque requête. Utilisez-vous BEGIN TRANSACTION? – abeyaz

Répondre

0

Il utilise 32 tables, y compris l'auto jointures (13 tables uniques) exécutant en 3 secondes dans une connexion

obtenu de voir les détails. Cela ressemble à des index manquants ou inadéquats.

Est-ce « Entité-attribute-value Si oui, avez-vous suivi les conseils ici:.. http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

InnoDB ne se verrouille pas les tables Mais il pourrait faire des analyses de table qui bloquerait toutes les lignes Encore une fois, les sons comme mauvais index et/ou la formulation de la requête.

S'il vous plaît fournir SHOW CREATE TABLE pour les 13 tables, plus SELECT et EXPLAIN SELECT ....

S'il y a une sorte d'écriture en cours en arrière-plan, qui pourrait avoir un impact sur la SELECT, même àMode.

Au moins 16 Go de RAM?

Fourchettes combien de processus? Combien de cœurs de processeur avez-vous?

+0

1 core CPU, 15 Go de RAM. Même 2 processus mènent à augmenter le temps deux fois pour chacun. il n'y a pas d'insertion/mise à jour de l'activité sur toute la base de données. Et oui, semble avoir une mauvaise question. Mais ne peut pas l'optimiser, car il est implémenté dans l'API. Alors le sharding horizontal peut-il aider? –

+0

Peut-être que le processeur est à 100% lorsqu'il est en cours d'exécution? Cela expliquerait 3s pour un; 6s pour 2. Si vous ne pouvez pas modifier la requête générée, vous ne pouvez pas implémenter de sharding. Voyons voir la requête. –