Optimisation des performances des requêtes - Base de données Amazon Quantum Ledger (AmazonQLDB)

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Optimisation des performances des requêtes

Important

Avis de fin de support : les clients existants pourront utiliser Amazon QLDB jusqu'à la fin du support le 31 juillet 2025. Pour plus de détails, consultez Migrer un Amazon QLDB Ledger vers Amazon Aurora SQL Postgre.

Amazon QLDB est destiné à répondre aux besoins des charges de travail de traitement des transactions en ligne (OLTP) à hautes performances. Cela signifie qu'il QLDB est optimisé pour un ensemble spécifique de modèles de requêtes, même s'il prend en charge SQL des fonctionnalités de requête similaires. Il est essentiel de concevoir des applications et leurs modèles de données pour fonctionner avec ces modèles de requêtes. Dans le cas contraire, au fur et à mesure que vos tables s'agrandissent, vous rencontrerez des problèmes de performances importants, notamment la latence des requêtes, les délais d'expiration des transactions et les conflits de simultanéité.

Cette section décrit les contraintes de requête QLDB et fournit des conseils pour écrire des requêtes optimales compte tenu de ces contraintes.

Limite de délai d'expiration des transactions

DansQLDB, chaque instruction partiQL (y compris chaque SELECT requête) est traitée dans une transaction et est soumise à un délai d'expiration de transaction. Une transaction peut être exécutée pendant 30 secondes au maximum avant d'être validée. Après cette limite, QLDB rejette tout travail effectué sur la transaction et supprime la session qui a exécuté la transaction. Cette limite protège le client du service contre les fuites de sessions en démarrant des transactions et non en les validant ou en les annulant.

Conflits de simultanéité

QLDBimplémente le contrôle de simultanéité en utilisant un contrôle de simultanéité optimiste ()OCC. Les requêtes sous-optimales peuvent également entraîner davantage de OCC conflits. Pour de plus amples informations sur OCC, consultez Modèle de QLDB simultanéité Amazon.

Modèles de requêtes optimaux

Il est recommandé d'exécuter des instructions avec une clause de WHERE prédicat filtrant en fonction d'un champ indexé ou d'un identifiant de document. QLDBnécessite un opérateur d'égalité (=ouIN) sur un champ indexé pour rechercher efficacement un document.

Voici des exemples de modèles de requêtes optimaux dans la vue utilisateur.

--Indexed field (VIN) lookup using the = operator SELECT * FROM VehicleRegistration WHERE VIN = '1N4AL11D75C109151' --Indexed field (VIN) AND non-indexed field (City) lookup SELECT * FROM VehicleRegistration WHERE VIN = '1N4AL11D75C109151' AND City = 'Seattle' --Indexed field (VIN) lookup using the IN operator SELECT * FROM VehicleRegistration WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761') --Document ID (r_id) lookup using the BY clause SELECT * FROM VehicleRegistration BY r_id WHERE r_id = '3Qv67yjXEwB9SjmvkuG6Cp'

Toute requête qui ne suit pas ces modèles appelle une analyse complète de la table. L'analyse des tables peut entraîner l'expiration des délais de transaction pour les requêtes portant sur des tables volumineuses ou les requêtes renvoyant de grands ensembles de résultats. Ils peuvent également entraîner des OCC conflits avec des transactions concurrentes.

Indices de cardinalité élevés

Nous recommandons d'indexer les champs contenant des valeurs de cardinalité élevées. Par exemple, les LicensePlateNumber champs VIN et de la VehicleRegistration table sont des champs indexés conçus pour être uniques.

Évitez d'indexer les champs à faible cardinalité tels que les codes de statut, les états ou provinces d'adresse et les codes postaux. Si vous indexez un tel champ, vos requêtes peuvent produire de grands ensembles de résultats susceptibles d'entraîner des délais d'expiration des transactions ou de provoquer des conflits involontaires OCC.

Requêtes d'affichage validées

Les requêtes que vous exécutez dans la vue validée suivent les mêmes directives d'optimisation que les requêtes de vue utilisateur. Les index que vous créez sur une table sont également utilisés pour les requêtes dans la vue validée.

Historique des requêtes relatives aux fonctions

Les requêtes de fonction d'historique n'utilisent pas les index que vous créez sur une table. QLDBl'historique est indexé uniquement par identifiant de document, et vous ne pouvez pas créer d'index d'historique supplémentaires pour le moment.

Il est recommandé de qualifier une requête d'historique à la fois par une plage de dates (heure de début et heure de fin) et par un identifiant de document (metadata.id). Les requêtes d'historique qui incluent une heure de début et une heure de fin bénéficient de la qualification par plage de dates.

Requêtes de jointure internes

Pour les requêtes de jointure interne, utilisez des critères de jointure qui incluent au moins un champ indexé pour la table sur le côté droit de la jointure. Sans index de jointure, une requête de jointure appelle plusieurs scans de table : pour chaque document de la table de gauche de la jointure, la requête scanne entièrement la table de droite. La meilleure pratique consiste à joindre des champs indexés pour chaque table que vous joignez, en plus de spécifier un prédicat d'WHEREégalité pour au moins une table.

Par exemple, la requête suivante joint les Vehicle tables VehicleRegistration et dans leurs VIN champs respectifs, qui sont tous deux indexés. Cette requête possède également un prédicat d'égalité activéVehicleRegistration.VIN.

SELECT * FROM VehicleRegistration AS r INNER JOIN Vehicle AS v ON r.VIN = v.VIN WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

Choisissez des indices de cardinalité élevés pour les critères de jointure et les prédicats d'égalité dans vos requêtes de jointure.

Modèles de requêtes à éviter

Voici quelques exemples d'instructions sous-optimales qui ne s'adaptent pas bien aux grands tableaux. QLDB Nous vous recommandons vivement de ne pas vous fier à ce type de requêtes pour les tables qui s'agrandissent au fil du temps, car vos requêtes finiront par entraîner des délais d'expiration des transactions. Les tables contenant des documents dont la taille varie, il est difficile de définir des limites précises pour les requêtes non indexées.

--No predicate clause SELECT * FROM Vehicle --COUNT() is not an optimized function SELECT COUNT(*) FROM Vehicle --Low-cardinality predicate SELECT * FROM Vehicle WHERE Color = 'Silver' --Inequality (>) does not qualify for indexed lookup SELECT * FROM Vehicle WHERE "Year" > 2019 --Inequality (LIKE) SELECT * FROM Vehicle WHERE VIN LIKE '1N4AL%' --Inequality (BETWEEN) SELECT SUM(PendingPenaltyTicketAmount) FROM VehicleRegistration WHERE ValidToDate BETWEEN `2020-01-01T` AND `2020-07-01T` --No predicate clause DELETE FROM Vehicle --No document id, and no date range for the history() function SELECT * FROM history(Vehicle)

En général, nous ne recommandons pas d'exécuter les types de modèles de requête suivants pour les cas d'utilisation en production dans QLDB :

  • Traitement analytique en ligne (OLAP) requêtes

  • Requêtes exploratoires sans clause de prédicat

  • Requêtes relatives aux rapports

  • Recherche de texte

Nous vous recommandons plutôt de diffuser vos données vers un service de base de données spécialement conçu et optimisé pour les cas d'utilisation analytiques. Par exemple, vous pouvez diffuser QLDB des données vers Amazon OpenSearch Service afin de fournir des fonctionnalités de recherche en texte intégral sur des documents. Pour un exemple d'application illustrant ce cas d'utilisation, consultez le GitHub référentiel amazon-qldb-streaming-amazonaws-samples/ -. opensearch-service-sample-python Pour plus d'informations sur QLDB les flux, consultezDiffusion en continu de données de journaux depuis Amazon QLDB.

Surveillance des performances

Le QLDB pilote fournit des informations relatives à l'utilisation des E/S et à la synchronisation dans l'objet de résultat d'une instruction. Vous pouvez utiliser ces métriques pour identifier les instructions partiQL inefficaces. Pour en savoir plus, rendez-vous surObtenir les statistiques des instructions PartiQL.

Vous pouvez également utiliser Amazon CloudWatch pour suivre les performances de votre registre en matière d'opérations de données. Surveillez la CommandLatency métrique pour une valeur spécifiée LedgerName etCommandType. Pour plus d’informations, consultez Surveillance avec Amazon CloudWatch. Pour savoir comment QLDB utiliser les commandes pour gérer les opérations de données, voirGestion des sessions avec le chauffeur.