Simple Science

La science de pointe expliquée simplement

# Informatique# Bases de données

Optimisation des requêtes MongoDB : Une approche différente

Ce papier explore comment MongoDB optimise les plans d'exécution des requêtes grâce à des méthodes uniques.

Dawei Tao, Enqi Liu, Sidath Randeni Kadupitige, Michael Cahill, Alan Fekete, Uwe Röhm

― 9 min lire


Méthode uniqueMéthode uniqued'optimisation desrequêtes de MongoDBdes requêtes.MongoDB pour améliorer les performancesExamen de l'approche un peu bizarre de
Table des matières

La gestion des bases de données est super importante pour garantir un traitement rapide et efficace des requêtes. La façon dont les bases de données choisissent comment exécuter les requêtes peut vraiment affecter la performance. Ce papier examine comment MongoDB, une base de données orientée document très populaire, choisit ses plans d'exécution de requêtes. Contrairement aux systèmes traditionnels qui estiment les coûts des différents plans avant d'en choisir un, MongoDB suit une approche différente.

Qu'est-ce que l'Optimisation des requêtes ?

Quand un utilisateur soumet une requête à une base de données, il y a souvent plein de façons dont la base peut exécuter cette requête. Chaque méthode peut varier énormément en termes de temps d'exécution et d'utilisation des ressources. Un optimiseur de requêtes est chargé de choisir la meilleure méthode. Les systèmes traditionnels utilisent une méthode basée sur les coûts où ils estiment l'efficacité de chaque plan avant de décider lequel utiliser. En revanche, MongoDB utilise une approche appelée "premier arrivé, premier servi".

Optimisation Premier Arrivé, Premier Servi

La méthode de MongoDB ne se concentre pas sur l'estimation des coûts à l'avance. Au lieu de ça, elle exécute différents plans d'exécution en même temps, comme une sorte de course. Chaque plan a un petit moment pour faire son travail, et MongoDB mesure combien de résultats chaque plan retourne pendant ce temps. Le plan qui renvoie les résultats de la manière la plus efficace est alors choisi pour être exécuté complètement.

Évaluation de l'approche de MongoDB

L'objectif ici est d'évaluer à quel point l'optimisation des requêtes de MongoDB fonctionne bien. On examine à quelle fréquence il choisit le meilleur plan et à quel point il exécute les requêtes efficacement. On se concentre aussi sur la visualisation de la performance de l'optimiseur pour identifier les zones à améliorer.

Résultats Clés

Grâce à des expériences, on a découvert que MongoDB préfère souvent les scans d'index aux scans de collection, même quand ces derniers seraient plus rapides. Cette préférence peut entraîner des plans d'exécution qui tournent beaucoup plus lentement que les choix optimaux. On a identifié des raisons pour cette préférence et discuté de son impact sur la performance générale.

Techniques d'Optimisation Traditionnelles vs MongoDB

La plupart des systèmes de bases de données traditionnels utilisent un optimiseur basé sur les coûts. Ils analysent divers plans, estiment leurs coûts et choisissent celui avec le coût le plus bas. En revanche, l'optimiseur de MongoDB classe les plans en fonction de l'exécution en temps réel et des résultats.

Architecture d'Optimisation des Requêtes

Comprendre comment fonctionne l'optimisation des requêtes en général est important. Les utilisateurs soumettent des requêtes que le système doit exécuter correctement et rapidement. Différents plans d'exécution peuvent mener à des résultats de performance très différents.

Le Rôle de l'Optimisation Basée sur les Coûts

L'optimisation basée sur les coûts existe depuis longtemps et repose sur plusieurs étapes. D'abord, le système génère des plans candidats pour une requête. Ensuite, il estime les coûts de chaque candidat et enfin, sélectionne le plan avec le coût estimé le plus bas. Cette approche a été la norme dans l'industrie, mais MongoDB s'éloigne de cette norme avec sa méthode de course.

Comment MongoDB Optimise les Requêtes

MongoDB traite les requêtes dans des collections de documents. Chaque document peut avoir une structure différente, ce qui offre de la flexibilité dans la gestion des données. Lorsqu'une requête est exécutée, MongoDB génère plusieurs plans d'exécution potentiels basés sur la structure des données.

Génération de Plans Candidats

Pour les requêtes compliquées, il peut y avoir beaucoup de plans d'exécution potentiels. Chacun d'eux peut différer dans la façon dont il traite les données, ce qui peut entraîner des variations dans le temps d'exécution. La manière dont les plans sont générés est cruciale pour une optimisation efficace.

Estimation des Coûts dans MongoDB

Contrairement aux systèmes traditionnels qui prédisent les coûts basés sur divers métriques, MongoDB ne suit pas cette procédure. Au lieu de ça, il se fie à la mesure de la performance des plans pendant l'exécution réelle.

Méthodologie d'Évaluation

Pour évaluer l'efficacité de l'optimiseur de MongoDB, on a conçu une méthodologie qui permet une analyse détaillée des plans de requêtes choisis.

Configuration Expérimentale

L'environnement de test est constitué d'une architecture client-serveur. Un client envoie des requêtes à un serveur MongoDB pour analyser à quel point l'optimiseur fonctionne bien. Le serveur tourne sur une instance Amazon EC2, choisie pour sa fiabilité et sa performance.

Distribution des Données et Requêtes

Dans nos expériences, on s'est concentré sur une seule collection de documents, chacun contenant deux champs. La distribution des valeurs dans ces champs a été maintenue uniforme. Les requêtes ont été conçues pour tester comment l'optimiseur choisissait des plans d'exécution avec des niveaux de sélectivité variés.

Métriques de performance

Pour évaluer la performance de l'optimiseur, deux métriques principales ont été utilisées :

  1. Précision : Le pourcentage de requêtes pour lesquelles le plan choisi était le meilleur.
  2. Impact sur la Performance : La différence de temps d'exécution entre le plan sélectionné et le plan optimal.

Observations des Expériences

Performance avec des Collections Indexées

Une des expériences clés a testé comment l'optimiseur fonctionnait quand les deux champs avaient des index. Les résultats ont montré que l'optimiseur sélectionnait correctement entre les scans d'index en fonction de la sélectivité des données. Cependant, il n'a jamais choisi un scan de collection, même quand cela aurait été plus rapide.

Scénario à Index Unique

Dans les scénarios où seul un index était disponible, on a constaté que l'exactitude de l'optimiseur chutait. Dans de tels cas, le scan de collection s'est souvent révélé être la meilleure option, mais l'optimiseur continuait de choisir le scan d'index.

Scénario d'Index Couvrant

Un autre test impliquait l'utilisation d'un index couvrant, ce qui permet à l'optimiseur d'accéder à des informations sans récupérer le document complet. Les résultats ont montré que même si l'optimiseur favorisait parfois correctement l'index couvrant, il manquait encore des opportunités d'utiliser des scans de collection quand ils auraient mieux performé.

Visualisation des Résultats

Pour présenter nos résultats clairement, on a utilisé divers outils visuels.

Diagrammes de Plans

On a créé des diagrammes de plans qui montrent la relation entre la sélectivité des requêtes et les plans d'exécution choisis par l'optimiseur. Ces diagrammes aident à visualiser où l'optimiseur fonctionne bien et où il pourrait s'améliorer.

Cartes Thermiques

Des cartes thermiques ont été utilisées pour illustrer l'impact sur la performance des choix de l'optimiseur. Une grille a été générée pour montrer comment la performance des requêtes variait avec différentes sélectivités, rendant facile l'identification des zones nécessitant une amélioration.

Insights sur le Biais de Préférence

Tout au long de nos expériences, on a remarqué un biais constant dans l'optimiseur de MongoDB. Il montrait une préférence pour les scans d'index, même quand les scans de collection auraient donné de meilleurs résultats. Ce biais peut entraîner une chute significative de la performance.

Raisons derrière le Biais de Préférence

Une inspection plus approfondie de l'optimiseur de MongoDB a révélé qu'il n'envisage souvent même pas les scans de collection à moins d'être explicitement demandés ou si aucun index n'est disponible. Ce comportement est systématique et contribue au biais de préférence.

Ajustement du Scoring de Productivité

La façon dont la productivité est calculée au sein de l'optimiseur a aussi été identifiée comme un facteur contributif. L'optimiseur attribuait des coûts plus bas aux scans d'index, ce qui les faisait paraître plus favorables en termes de performance, menant à des choix de plans sous-optimaux.

Conclusions et Travaux Futurs

Bien que l'approche unique d'optimisation des requêtes de MongoDB ait ses avantages, elle a aussi des limites. Le biais systématique observé peut affecter négativement la performance, surtout dans des scénarios où beaucoup de documents sont récupérés.

Recommandations pour l'Amélioration

Pour résoudre ces problèmes, les travaux futurs devraient inclure la réévaluation de la façon dont l'optimiseur évalue différents plans d'exécution. Cela inclut la reconnaissance plus précise des coûts associés aux recherches d'index.

Regard vers l'Avenir

Ce papier sert de point de départ pour une enquête plus approfondie sur l'optimiseur de requêtes de MongoDB. Les études futures exploreront sa performance dans des conditions plus complexes, y compris des schémas de documents intriqués et des structures de requêtes difficiles. En affinant les méthodes utilisées pour évaluer la performance, des améliorations pourront être apportées pour renforcer l'efficacité globale du processus d'optimisation de MongoDB.

À l'avenir, on vise à développer une compréhension plus sophistiquée de la façon dont l'optimiseur peut mieux servir les utilisateurs dans divers scénarios, en tirant le meilleur parti de la conception et des capacités uniques de MongoDB.

Source originale

Titre: First Past the Post: Evaluating Query Optimization in MongoDB

Résumé: Query optimization is crucial for every database management system (DBMS) to enable fast execution of declarative queries. Most DBMS designs include cost-based query optimization. However, MongoDB implements a different approach to choose an execution plan that we call "first past the post" (FPTP) query optimization. FPTP does not estimate costs for each execution plan, but rather partially executes the alternative plans in a round-robin race and observes the work done by each relative to the number of records returned. In this paper, we analyze the effectiveness of MongoDB's FPTP query optimizer. We see whether the optimizer chooses the best execution plan among the alternatives and measure how the chosen plan compares to the optimal plan. We also show how to visualize the effectiveness and identify situations where the MongoDB 7.0.1 query optimizer chooses suboptimal query plans. Through experiments, we conclude that FPTP has a preference bias, choosing index scans even in many cases where collection scans would run faster. We identify the reasons for the preference bias, which can lead MongoDB to choose a plan with more than twice the runtime compared to the optimal plan for the query.

Auteurs: Dawei Tao, Enqi Liu, Sidath Randeni Kadupitige, Michael Cahill, Alan Fekete, Uwe Röhm

Dernière mise à jour: 2024-09-24 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2409.16544

Source PDF: https://arxiv.org/pdf/2409.16544

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Articles similaires