Utilisation de la journalisation des requêtes lentes Amazon Neptune - Amazon Neptune

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.

Utilisation de la journalisation des requêtes lentes Amazon Neptune

Il peut être difficile d'identifier, de déboguer et d'optimiser une requête lente. Lorsque la journalisation des requêtes lentes dans Neptune est activée, les attributs de toutes les requêtes de longue durée sont automatiquement journalisés pour faciliter ce processus.

Note

La journalisation des requêtes lentes a été introduite dans la version 1.2.1.0 du moteur Neptune.

Vous activez la journalisation des requêtes lentes à l'aide du paramètre de cluster de bases de données neptune_enable_slow_query_log. Par défaut, ce paramètre est défini sur disabled. En le définissant info ou en activant la debug journalisation des requêtes lentes. Le paramètre info journalise quelques attributs utiles de chaque requête lente, tandis que le paramètre debug journalise tous les attributs disponibles.

Pour définir le seuil d'une requête considérée comme lente, utilisez le paramètre de cluster de bases de données neptune_slow_query_log_threshold afin de spécifier le nombre de millisecondes au bout desquelles une requête en cours d'exécution sera considérée comme lente et sera enregistrée lorsque la journalisation des requêtes lentes est activée. La valeur par défaut est de 5 000 millisecondes (5 secondes).

Vous pouvez définir ces paramètres de cluster de bases de données dans ou à l'aide de la AWS CLI commande modify-db-cluster-parameter-group ou de la fonction odifyDBCluster ParameterGroup de gestion M. AWS Management Console

Note

Les paramètres de journalisation des requêtes lentes sont dynamiques, ce qui signifie que la modification de leurs valeurs ne nécessite ni ne provoque le redémarrage de votre cluster de bases de données.

Pour consulter les journaux des requêtes lentes dans le AWS Management Console

Vous pouvez consulter et télécharger les journaux des requêtes lentes dans le AWS Management Console, comme suit :

Sur la page Instances, choisissez une instance de base de données, puis faites défiler la page jusqu'à la section Journaux. Vous pouvez ensuite y sélectionner un fichier journal, puis choisir Télécharger pour le télécharger.

Fichiers générés par la journalisation des requêtes lentes Neptune

Les fichiers journaux générés par la journalisation des requêtes lentes dans Neptune présentent les caractéristiques suivantes :

  • Les fichiers sont codés en UTF -8.

  • Les requêtes et leurs attributs sont enregistrés dans le JSON formulaire.

  • Les attributs nuls et vides ne sont pas journalisés, sauf pour les données queryTime.

  • Les journaux couvrent plusieurs fichiers dont le nombre varie en fonction de la taille de l'instance.

  • Les entrées de journal ne sont pas classées par ordre séquentiel. Vous pouvez utiliser leur valeur timestamp pour les classer.

  • Pour consulter les derniers événements, vous devrez peut-être passer en revue tous les fichiers journaux de requêtes lentes.

  • Les fichiers journaux font l'objet d'une rotation lorsqu'ils atteignent 100 Mio au total. Cette limite n'est pas configurable.

Attributs de requête journalisés en mode info

Les attributs suivants sont journalisés pour les requêtes lentes lorsque le paramètre de cluster de bases de données neptune_enable_slow_query_log a été défini sur info :

Groupe Attribut Description

requestResponseMetadata

requestId

ID de demande de la requête.

requestType

Type de demande, comme HTTP ou WebSocket.

responseStatusCode

Code d'état de la réponse à la requête, comme 200.

exceptionClass

Classe d'exception de l'erreur renvoyée après l'exécution de la requête.

queryStats

query

Chaîne de requête.

queryFingerprint

Empreinte digitale de la requête.

queryLanguage

Langage de requête, comme Gremlin, SPARQL ouopenCypher.

memoryStats

allocatedPermits

Autorisations allouées à la requête.

approximateUsedMemoryBytes

Mémoire approximative utilisée par la requête pendant l'exécution.

queryTime

startTime

Heure de début de la requête (UTC).

overallRunTimeMs

Durée totale d'exécution de la requête, en millisecondes.

parsingTimeMs

Durée d'analyse de la requête, en millisecondes.

waitingTimeMs

Temps d'attente de Gremlin/SPARQL/openCypher la file d'attente des requêtes, en millisecondes

executionTimeMs

Durée d'exécution de la requête, en millisecondes.

serializationTimeMs

Durée de sérialisation de la requête, en millisecondes.

statementCounters

read

Nombre de déclarations lues.

written

Nombre de déclarations écrites.

deleted

Nombre de déclarations supprimées.

transactionCounters

committed

Nombre de transactions effectuées.

rolledBack

Nombre de transactions annulées.

vertexCounters

added

Nombre de sommets ajoutés.

removed

Nombre de sommets supprimés.

propertiesAdded

Nombre de propriétés de sommet ajoutées.

propertiesRemoved

Nombre de propriétés de sommet supprimées.

edgeCounters

added

Nombre d'arêtes ajoutées.

removed

Nombre d'arêtes supprimées.

propertiesAdded

Nombre de propriétés d'arête ajoutées.

propertiesRemoved

Nombre de propriétés d'arête supprimées.

resultCache

hitCount

Nombre d'accès au cache de résultats.

missCount

Nombre d'échec d'accès au cache de résultats.

putCount

Nombre de mises en cache des résultats.

concurrentExecution

acceptedQueryCountAtStart

Requêtes parallèles acceptées avec l'exécution de la requête actuelle au début.

runningQueryCountAtStart

Requêtes parallèles exécutées avec l'exécution de la requête actuelle au début.

acceptedQueryCountAtEnd

Requêtes parallèles acceptées avec l'exécution de la requête actuelle à la fin.

runningQueryCountAtEnd

Requêtes parallèles exécutées avec l'exécution de la requête actuelle à la fin.

queryBatch

queryProcessingBatchSize

Taille du lot lors du traitement des requêtes.

querySerialisationBatchSize

Taille du lot lors de la sérialisation des requêtes.

Attributs de requête journalisés en mode debug

Lorsque le paramètre du cluster de bases de données neptune_enable_slow_query_log est défini sur debug, les attributs suivants du compteur de stockage sont journalisés en plus des attributs journalisés en mode info :

Attribut Description

statementsScannedInAllIndexes

Déclarations analysées dans tous les index.

statementsScannedSPOGIndex

Déclarations numérisées dans SPOG l'index.

statementsScannedPOGSIndex

Déclarations numérisées dans POGS l'index.

statementsScannedGPSOIndex

Déclarations numérisées dans GPSO l'index.

statementsScannedOSGPIndex

Déclarations numérisées dans OSGP l'index.

statementsScannedInChunk

Déclarations analysées ensemble par segments.

postFilteredStatementScans

Déclarations laissées après le filtrage post-analyse.

distinctStatementScans

Déclarations distinctes analysées.

statementsReadInAllIndexes

Déclarations lues après le filtrage post-analyse dans tous les index.

statementsReadSPOGIndex

Les instructions lues après le scan sont filtrées dans SPOG l'index.

statementsReadPOGSIndex

Les instructions lues après le scan sont filtrées dans POGS l'index.

statementsReadGPSOIndex

Les instructions lues après le scan sont filtrées dans GPSO l'index.

statementsReadOSGPIndex

Les instructions lues après le scan sont filtrées dans OSGP l'index.

accessPathSearches

Nombre de recherches de chemins d'accès.

fullyBoundedAccessPathSearches

Nombre de recherches de chemins d'accès par clé entièrement délimités.

accessPathSearchedByPrefix

Nombre de chemins d'accès recherchés par préfixe.

searchesWhereRecordsWereFound

Nombre de recherches ayant généré un ou plusieurs enregistrements en sortie.

searchesWhereRecordsWereNotFound

Nombre de recherches pour lesquelles aucun enregistrement n'a été généré.

totalRecordsFoundInSearches

Nombre total d'enregistrements trouvés à partir de toutes les recherches.

statementsInsertedInAllIndexes

Nombre de déclarations insérées dans tous les index.

statementsUpdatedInAllIndexes

Nombre de déclarations mises à jour dans tous les index.

statementsDeletedInAllIndexes

Nombre de déclarations supprimées dans tous les index.

predicateCount

Nombre de prédicats.

dictionaryReadsFromValueToIdTable

Nombre de lectures du dictionnaire de la table de valeurs à la table d'ID.

dictionaryReadsFromIdToValueTable

Nombre de lectures du dictionnaire à partir de l'ID de la table de valeurs.

dictionaryWritesToValueToIdTable

Nombre d'écritures du dictionnaire de la table de valeurs à la table d'ID.

dictionaryWritesToIdToValueTable

Nombre d'écritures du dictionnaire dans la table d'ID jusqu'à la table de valeurs.

rangeCountsInAllIndexes

Nombre de plages de valeurs dans tous les index.

deadlockCount

Nombre de blocages dans la requête.

singleCardinalityInserts

Nombre d'insertions de cardinalité uniques effectuées.

singleCardinalityInsertDeletions

Nombre de déclarations supprimées lors de l'insertion d'une cardinalité unique.

Exemple de journalisation du débogage pour une requête lente

L'exécution de la requête Gremlin suivante peut prendre plus de temps que le seuil défini pour les requêtes lentes :

gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()

Si la journalisation des requêtes lentes était activée en mode de débogage, les attributs suivants seraient journalisés pour la requête, sous la forme suivante :

{ "requestResponseMetadata": { "requestId": "5311e493-0e98-457e-9131-d250a2ce1e12", "requestType": "HTTP_GET", "responseStatusCode": 200 }, "queryStats": { "query": "gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()", "queryFingerprint": "g.V().has(string0,string1).repeat(__.out().simplePath()).until(__.has(string0,string2)).path().by(string0).limit(long0).fold()", "queryLanguage": "Gremlin" }, "memoryStats": { "allocatedPermits": 20, "approximateUsedMemoryBytes": 14838 }, "queryTimeStats": { "startTime": "23/02/2023 11:42:52.657", "overallRunTimeMs": 2249, "executionTimeMs": 2229, "serializationTimeMs": 13 }, "statementCounters": { "read": 69979 }, "transactionCounters": { "committed": 1 }, "concurrentExecutionStats": { "acceptedQueryCountAtStart": 1 }, "queryBatchStats": { "queryProcessingBatchSize": 1000, "querySerialisationBatchSize": 1000 }, "storageCounters": { "statementsScannedInAllIndexes": 69979, "statementsScannedSPOGIndex": 44936, "statementsScannedPOGSIndex": 4, "statementsScannedGPSOIndex": 25039, "statementsReadInAllIndexes": 68566, "statementsReadSPOGIndex": 43544, "statementsReadPOGSIndex": 2, "statementsReadGPSOIndex": 25020, "accessPathSearches": 27, "fullyBoundedAccessPathSearches": 27, "dictionaryReadsFromValueToIdTable": 10, "dictionaryReadsFromIdToValueTable": 17, "rangeCountsInAllIndexes": 4 } }