Cette page explique comment calculer la latence des requêtes de l'API Spanner pour les requêtes de streaming et de partitionnement.
Vous pouvez calculer les requêtes de streaming et de partition de l'API Spanner
les latences avec les champs de l'objet struct metadata
d'une
AuditLog
Les métadonnées sont de type QueryPerformanceMetadata
.
Pour les requêtes de streaming et de partitionnement, le metadata
ne contient pas de champ processingSecondsDuration
. Pour savoir comment utiliser processingSecondsDuration
pour calculer les latences de requête pour tous les autres types de requêtes, consultez la section Durée de traitement.
Latences des requêtes pour les requêtes de streaming
Lorsqu'un client envoie une requête en streaming. Lorsque l'API Spanner renvoie des ensembles de résultats partiels, Cloud Audit Logs enregistre les journaux d'audit du premier et du dernier réponses. La latence de requête pour une requête de streaming correspond au temps écoulé entre le moment où l'API Spanner reçoit la requête et le moment où le client reçoit la dernière réponse.
Reconnaître les entrées du journal d'audit des requêtes de streaming
Pour calculer la latence de la requête d'un flux, vous devez identifier les entrées de journal associées à la requête. La valeur protoPayload.methodName
des entrées de journal est définie sur google.spanner.v1.Spanner.ExecuteStreamingSql
ou google.spanner.v1.Spanner.StreamingRead
. Pour chaque requête en flux continu,
deux entrées de journal, regroupées par operation.id
. La première entrée a
operation.first
défini sur true
et operation.last
défini sur la dernière entrée
true
L'objet protoPayload.metadata.responseTimestamp
est également renseigné.
Calculer la latence des requêtes en flux continu
Pour calculer la latence de requête d'une requête en streaming, filtrez les journaux d'audit par operation.id
. La différence entre les derniers
protoPayload.metadata.responseTimestamp
et au plus tôt
protoPayload.requestMetadata.requestAttributes.time
correspond à la latence de la requête.
Exemples de journaux d'audit pour les requêtes en streaming
Pour rechercher toutes les entrées de journal d'une requête de streaming, exécutez la requête suivante dans l'explorateur de journaux, en remplaçant la variable OPERATION_ID par la valeur souhaitée :
operation.id="OPERATION_ID"
L'exemple suivant recherche les entrées de journal d'une requête de streaming avec le operation.id
de 15327696495839874591
:
operation.id="15327696495839874591"
Premier journal renvoyé
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"authenticationInfo": {...},
"requestMetadata": {
"requestAttributes": {
"time": "2023-02-27T16:57:40.552952297Z",
},
"destinationAttributes": {}
},
"serviceName": "spanner.googleapis.com",
"methodName": "google.spanner.v1.Spanner.ExecuteStreamingSql",
"authorizationInfo": [{...}],
"resourceName": "projects/example-project/instances/example-instance/databases/example-database/sessions/example-session",
"request": {
"session": "projects/example-project/instances/example-instance/databases/example-database/sessions/example-session",
"requestOptions": {},
"sql": "SELECT COUNT(*) as count FROM Example_table WHERE Example_Column > @timestamp",
"@type": "type.googleapis.com/google.spanner.v1.ExecuteSqlRequest",
"queryOptions": {}
},
"metadata": {
"@type": "type.googleapis.com/spanner.cloud.instance_v1.QueryPerformanceMetadata",
"responseTimestamp": "2023-02-27T16:57:40.555730699Z"
}
},
"insertId": "h7fj0jei6597",
"resource": {...},
"timestamp": "2023-02-27T16:57:40.552391554Z",
"severity": "INFO",
"logName": "projects/example-project/logs/cloudaudit.googleapis.com%2Fdata_access",
"operation": {
"id": "15327696495839874591",
"producer": "spanner.googleapis.com",
"first": true
},
"receiveTimestamp": "2023-02-27T16:57:41.507770020Z"
}
Dernier journal renvoyé
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"authenticationInfo": {...},
"requestMetadata": {
"requestAttributes": {
"time": "2023-02-27T16:57:40.552952297Z",
},
"destinationAttributes": {}
},
"serviceName": "spanner.googleapis.com",
"methodName": "google.spanner.v1.Spanner.ExecuteStreamingSql",
"authorizationInfo": [{...}],
"resourceName": "projects/example-project/instances/example-instance/databases/example-database/sessions/example-session",
"metadata": {
"responseTimestamp": "2023-02-27T16:57:40.556138125Z",
"@type": "type.googleapis.com/spanner.cloud.instance_v1.QueryPerformanceMetadata"
}
},
"insertId": "h7fj0jei6598",
"resource": {...},
"timestamp": "2023-02-27T16:57:40.552391554Z",
"severity": "INFO",
"logName": "projects/example-project/logs/cloudaudit.googleapis.com%2Fdata_access",
"operation": {
"id": "15327696495839874591",
"producer": "spanner.googleapis.com",
"last": true
},
"receiveTimestamp": "2023-02-27T16:57:41.507770020Z"
}
La latence de la requête correspond à la valeur metadata.responseTimestamp
la plus récente moins la valeur requestAttributes.time
la plus ancienne. Le résultat est 2023-02-27T16:57:40.556138125Z-2023-02 - 2023-02-27T16:57:40.552952297Z, soit 0,003185828 seconde.
Latences des requêtes de partition
Lorsqu'un client envoie une requête partitionnée, Spanner crée plusieurs audits journaux. Pour calculer la latence de la requête d'une requête de partition de bout en bout et des appels ultérieurs aux partitions, identifiez les journaux d'audit associés à la requête parente.
Reconnaître les entrées du journal d'audit des requêtes de partition
Lorsque vous effectuez une requête PartitionRead
ou PartitionQuery
, un ensemble de
les partitions sont renvoyées dans
PartitionResponse
En
effectuer des appels Read
, ExecuteSql
ou ExecuteStreaming
, respectivement pour chaque
partition, enregistre des journaux d'audit pour ces méthodes. Chacun de ces éléments
ces journaux contiennent un identifiant pour les regrouper, appelé
protoPayload.metadata.partitionBatchIdentifier
La
L'objet protoPayload.metadata.responseTimestamp
est également renseigné.
Calculer la latence des requêtes de partitionnement
Pour calculer la latence d'une requête de partition, vous pouvez filtrer les
les journaux d'audit par metadata.partitionBatchIdentifier
. La différence entre le dernier metadata.responseTimestamp
et le premier protoPayload.requestMetadata.requestAttributes.time
correspond à la latence de la requête.
Exemples de journaux d'audit pour les requêtes de partitionnement
Pour rechercher toutes les entrées de journal d'une requête de partitionnement, exécutez la requête suivante dans l'explorateur de journaux, en remplaçant la variable PARTITION_BATCH_ID par la valeur souhaitée :
metadata.partitionBatchIdentifier="PARTITION_BATCH_ID"
L'exemple suivant recherche les entrées de journal d'une requête de partition avec le paramètre
metadata.partitionBatchIdentifier
sur 15327696495839874591
:
metadata.partitionBatchIdentifier="15327696495839874591"
Premier journal renvoyé
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"authenticationInfo": {...},
"requestMetadata": {
"requestAttributes": {
"time": "2023-02-15T18:13:39.341584693Z",
},
},
"serviceName": "spanner.googleapis.com",
"methodName": "google.spanner.v1.Spanner.ExecuteStreamingSql",
"authorizationInfo": [{...}],
"resourceName": "projects/example-project/instances/example-instance/databases/example-db/sessions/example-session",
"request": {...},
"metadata": {
"@type": "type.googleapis.com/spanner.cloud.instance_v1.QueryPerformanceMetadata",
"partitionBatchIdentifier": "4841471066190013455",
"responseTimestamp": "2023-02-15T18:13:39.343693061Z"
}
},
"insertId": "4fug42dqke5",
"resource": {...},
"timestamp": "2023-02-15T18:13:39.341069413Z",
"severity": "INFO",
"logName": "projects/example-project/logs/cloudaudit.googleapis.com%2Fdata_access",
"operation": {...},
"receiveTimestamp": "2023-02-15T18:13:39.983812511Z"
}
Deuxième journal renvoyé
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"authenticationInfo": {...},
"requestMetadata": {
"requestAttributes": {
"time": "2023-02-15T18:13:39.341584693Z",
},
},
"serviceName": "spanner.googleapis.com",
"methodName": "google.spanner.v1.Spanner.ExecuteStreamingSql",
"authorizationInfo": [{...}],
"resourceName": "projects/example-project/instances/example-instance/databases/example-db/sessions/example-session",
"metadata": {
"responseTimestamp": "2023-02-15T18:13:39.344256101Z",
"partitionBatchIdentifier": "4841471066190013455",
"@type": "type.googleapis.com/spanner.cloud.instance_v1.QueryPerformanceMetadata"
}
},
"insertId": "4fug42dqke6",
"resource": {...},
"timestamp": "2023-02-15T18:13:39.341069413Z",
"severity": "INFO",
"logName": "projects/example-project/logs/cloudaudit.googleapis.com%2Fdata_access",
"operation": {...},
"receiveTimestamp": "2023-02-15T18:13:39.983812511Z"
}
Selon le nombre de partitions, Spanner peut enregistrer plus de journaux que dans cet exemple.
Dernier journal renvoyé
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"authenticationInfo": {...},
"requestMetadata": {
"requestAttributes": {
"time": "2023-02-15T18:13:39.439207331Z",
},
},
"serviceName": "spanner.googleapis.com",
"methodName": "google.spanner.v1.Spanner.ExecuteStreamingSql",
"authorizationInfo": [{...}],
"resourceName": "projects/example-project/instances/example-instance/databases/example-db/sessions/example-session",
"metadata": {
"partitionBatchIdentifier": "4841471066190013455",
"@type": "type.googleapis.com/spanner.cloud.instance_v1.QueryPerformanceMetadata",
"responseTimestamp": "2023-02-15T18:13:39.441692339Z"
}
},
"insertId": "4fug42dqkec",
"resource": {...},
"timestamp": "2023-02-15T18:13:39.438607931Z",
"severity": "INFO",
"logName": "projects/example-project/logs/cloudaudit.googleapis.com%2Fdata_access",
"operation": {...},
"receiveTimestamp": "2023-02-15T18:13:39.983812511Z"
}
La latence de la requête correspond à la valeur metadata.responseTimestamp
la plus récente moins la valeur requestAttributes.time
la plus ancienne. Le résultat est 2023-02-15T18:13:39.441692339Z - 2023-02-15T18:13:39.341584693Z, soit 0,100107646 seconde.