3 votes

Le stockage MongoDB WiredTiger n'utilise pas deux cœurs de CPU

Comme l'indique la description du moteur de stockage de WiredTiger, il permet d'améliorer la concurrence grâce au verrouillage au niveau des documents. D'après ce poste :

WiredTiger s'adapte aux architectures modernes à plusieurs processeurs. En utilisant une variété de techniques de programmation telles que les pointeurs aléatoires, les algorithmes sans verrouillage, le verrouillage rapide et le passage de messages, WiredTiger effectue plus de travail par cœur d'unité centrale que les moteurs alternatifs.

Pour une raison quelconque, mon cas d'utilisation ne semble pas en bénéficier. J'ai une base de données avec de nombreuses écritures simultanées (principalement des mises à jour), et ce type de charge ne semble pas pouvoir dépasser la limite de 2000 mises à jour par seconde. Voici l'exemple de la base de données mongostat 10 de la production :

insert query update delete getmore command % dirty % used flushes  vsize    res qr|qw ar|aw netIn netOut conn     time
     3   780   1936    141      42     3|0     0.3    1.0       0 717.0M 289.0M   0|0   1|0  433k     6m  141 17:16:32

Le débit du disque n'est pas saturé, iostat -x 10 de la production :

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          20.56    0.00   20.31    0.10    0.10   58.93

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
xvda              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
xvdb              0.00     5.80    0.00  102.50     0.00  6188.80    60.38     3.46   33.79   0.46   4.72

Compte tenu de tout cela, je suppose que le goulot d'étranglement se situe au niveau de l'utilisation de l'unité centrale, qui est toujours stable à 100 %, tout le temps pour mongod dans le cadre de la top (sur un total de 200%, ce qui signifie qu'une seule unité centrale sur deux est utilisée). 58% de temps d'inactivité de iostat le confirme également.

Existe-t-il des méthodes permettant de déterminer si le stockage WiredTiger utilise le verrouillage au niveau des documents et deux cœurs d'unité centrale simultanément, comme il se doit ? Ou cela peut-il se produire pour des raisons autres que la limite de capacité de l'unité centrale ?

1voto

Aykut Points 11

Les opérations d'écriture sont effectuées en série sur une instance à cœur unique. Les opérations de lecture sont simultanées. C'est ce que j'ai compris de mes lectures jusqu'à présent.

0voto

zorn Points 1

Quel type d'installation de client mongodb avez-vous et quel type de matériel utilisez-vous ?

D'après mon expérience de l'évaluation comparative de différents moteurs de stockage mongodb sur différents systèmes, une instance unique de mongodb peut rapidement atteindre un mur en termes d'opérations par seconde.

Cela peut être dû à diverses raisons, comme un goulot d'étranglement au niveau de la bande passante ou un délai d'expédition. Pour savoir s'il s'agit du temps de distribution, vous pouvez essayer de faire fonctionner 2 instances de mongod côte à côte. Si elles atteignent toutes les deux 2000 mises à jour/seconde et utilisent chacune 1 CPU, il est possible que le temps nécessaire à mongod pour envoyer les commandes de mise à jour soit plus long que le temps nécessaire à votre système pour exécuter certaines commandes de mise à jour. Par conséquent, mongod n'aurait aucune raison d'utiliser l'autre processeur car le premier est toujours prêt pour la prochaine mise à jour (même s'il est à la limite).

Si vous obtenez toujours 2000 mises à jour/sec au total et qu'elles n'utilisent toujours qu'un seul cœur entre les deux, il s'agirait d'un problème différent, et j'aurais besoin de voir plus d'informations sur la configuration de votre système pour deviner de quoi il s'agit.

0voto

Don Roby Points 24965

Si vous souhaitez utiliser top Si mongoDB est la principale source de consommation d'énergie, vous devriez pouvoir utiliser l'option 1 (appuyer sur 1 après top commence) ou utiliser une autre méthode telle que décrite ici : Comment mesurer l'utilisation séparée des cœurs de l'unité centrale pour un processus ?

Pour les outils mongo, cela dépend de la version (les outils ont changé de 2.x à 3.x, donc la façon d'utiliser les outils pour voir les informations sur les verrous dépendra de votre version). db.serverStatus() devrait vous fournir les informations que vous recherchez. Voir aussi Comment puis-je voir l'état des verrous sur mes instances mongod ? pour des informations plus détaillées et spécifiques à la version. N'oubliez pas de vérifier que la version de MongoDB que vous utilisez correspond à celle indiquée en haut à gauche de la page (cliquez sur le numéro de version pour changer la version de la documentation que vous consultez).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X