Calculer la latence des requêtes de streaming et de partition dans Spanner

Cette page explique comment calculer la requête API Spanner. la latence des requêtes de traitement par flux 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 champ metadata ne contient pas de processingSecondsDuration. Pour savoir comment utiliser processingSecondsDuration afin de calculer la latence des requêtes pour toutes les autres 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 d'une requête en streaming est le temps écoulé entre le moment où l'API Spanner reçoit la requête et le moment où reçoit la dernière réponse.

Reconnaître les entrées de journal d'audit des requêtes de streaming

Pour calculer la latence d'une requête en flux continu, vous devez identifier les entrées de journal liées à la requête. Les entrées de journal ont le protoPayload.methodName défini 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 d'une requête en streaming, filtrez les journaux d'audit d'ici le 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 la section l'explorateur de journaux, qui remplace la OPERATION_ID par la valeur souhaitée:

operation.id="OPERATION_ID"

L'exemple suivant trouve des entrées de journal pour une requête de streaming avec le paramètre operation.id sur 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/data_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/data_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 dernière valeur metadata.responseTimestamp moins la valeur requestAttributes.time (au plus tôt). Résultat : 2023-02-27T16:57:40.556138125Z-2023-02 - 2023-02-27T16:57:40.552952297Z, qui est égal à 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 d'une requête de partition de bout en bout et les appels suivants aux partitions, identifiez les journaux d'audit associés au la requête parente.

Reconnaître les entrées du journal d'audit des requêtes de partitionnement

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 les dernier metadata.responseTimestamp et le plus ancien 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 partition, exécutez la requête suivante dans le l'explorateur de journaux, qui remplace la 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/data_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/data_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/data_access",
  "operation": {...},
  "receiveTimestamp": "2023-02-15T18:13:39.983812511Z"
}

La latence de la requête correspond à la dernière valeur metadata.responseTimestamp moins la valeur requestAttributes.time (au plus tôt). Le résultat est 2023-02-15T18:13:39.441692339Z - 2023-02-15T18:13:39.341584693Z, soit 0,100107646 secondes.