Latenz von Spanner-Streaming- und Partitionsanfragen berechnen

Auf dieser Seite wird beschrieben, wie Sie die Spanner API-Anfrage berechnen können Latenz von Streaming- und Partitionsanfragen.

Sie können die Streaming- und Partitionsanfrage der Spanner API berechnen mit den Feldern im Strukturobjekt metadata eines AuditLog. Die Metadaten haben den Typ QueryPerformanceMetadata. Bei Streaming- und Partitionsanfragen enthält metadata keinen processingSecondsDuration. Informationen zur Verwendung processingSecondsDuration zum Berechnen der Anfragelatenzen für alle anderen Informationen zu Anfragetypen finden Sie unter Verarbeitungsdauer.

Anfragelatenzen für Streaminganfragen

Wenn ein Client eine Streaminganfrage sendet Da die Spanner API Teilergebnisse zurückgibt, Cloud-Audit-Logs erfassen Audit-Logs für das erste und das letzte Antworten. Die Anfragelatenz für eine Streaminganfrage ist die verstrichene Zeit zwischen dem Empfang der Anfrage bei der Spanner API und dem Client die letzte Antwort erhält.

Audit-Logeinträge von Streaminganfragen erkennen

Um die Anfragelatenz einer Streaminganfrage zu berechnen, müssen Sie Logeinträge für die Anfrage. Die Logeinträge haben die protoPayload.methodName festgelegt auf google.spanner.v1.Spanner.ExecuteStreamingSql oder google.spanner.v1.Spanner.StreamingRead Für jede Streaminganfrage Zwei Logeinträge, die nach operation.id gruppiert sind. Der erste Eintrag enthält operation.first wurde auf true festgelegt und für den letzten Eintrag wurde operation.last festgelegt auf true. Das Objekt protoPayload.metadata.responseTimestamp wird ebenfalls mit Daten gefüllt.

Anfragelatenz für Streaminganfragen berechnen

Sie können die Audit-Logs filtern, um die Anfragelatenz einer Streaminganfrage zu berechnen von operation.id. Der Unterschied zwischen den neuesten protoPayload.metadata.responseTimestamp und die frühesten protoPayload.requestMetadata.requestAttributes.time ist die Anfragelatenz.

Beispiel-Audit-Logs für Streaminganfragen

Um alle Logeinträge für eine Streaminganfrage zu ermitteln, führen Sie die folgende Abfrage in der Log-Explorer, wobei die Klasse OPERATION_ID mit dem gewünschten Wert:

operation.id="OPERATION_ID"

Im folgenden Beispiel werden Logeinträge für eine Streaminganfrage mit dem Parameter operation.id von 15327696495839874591:

operation.id="15327696495839874591"

Erstes Log zurückgegeben

{
  "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"
}

Letztes Log zurückgegeben

{
  "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"
}

Die Anfragelatenz beträgt die letzten metadata.responseTimestamp abzüglich der frühestens requestAttributes.time. Das Ergebnis: 2023-02-27T16:57:40.556138125Z-2023-02 – 2023-02-27T16:57:40.552952297Z, die 0,003185828 Sekunden.

Anfragelatenzen für Partitionsanfragen

Wenn ein Client eine partitionierte Anfrage sendet, erstellt Spanner mehrere Audit-Logs Logs. Um die Anfragelatenz einer End-to-End-Partitionsanfrage zu berechnen bei nachfolgenden Aufrufen der Partitionen prüfen Sie die Audit-Logs, die Parent-Anfrage aus.

Audit-Logeinträge für das Erkennen von Partitionsanfragen

Wenn Sie eine PartitionRead- oder PartitionQuery-Anfrage stellen, wird eine Reihe von werden Partitionen im PartitionResponse Während Sie führen Sie jeweils Read-, ExecuteSql- bzw. ExecuteStreaming-Aufrufe aus. zeichnet Spanner Audit-Logs für diese Methoden auf. Jede von enthalten diese Protokolle eine Kennung, mit der sie gruppiert werden können: protoPayload.metadata.partitionBatchIdentifier Die Das protoPayload.metadata.responseTimestamp-Objekt wird ebenfalls mit Daten gefüllt.

Anfragelatenz für Partitionsanfragen berechnen

Um die Anfragelatenz einer Partitionsanfrage zu berechnen, können Sie Audit-Logs von metadata.partitionBatchIdentifier. Der Unterschied zwischen den letzte metadata.responseTimestamp und früheste protoPayload.requestMetadata.requestAttributes.time ist die Anfragelatenz.

Beispiel-Audit-Logs für Partitionsanfragen

Um alle Logeinträge für eine Partitionsanfrage zu finden, führen Sie die folgende Abfrage in der Log-Explorer, wobei die Klasse PARTITION_BATCH_ID mit dem gewünschten Wert:

metadata.partitionBatchIdentifier="PARTITION_BATCH_ID"

Im folgenden Beispiel werden Logeinträge für eine Partitionsanfrage mit dem Parameter metadata.partitionBatchIdentifier von 15327696495839874591:

metadata.partitionBatchIdentifier="15327696495839874591"

Erstes Log zurückgegeben

{
  "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"
}

Zweites Log zurückgegeben

{
  "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"
}

Je nach Anzahl der Partitionen kann Spanner mehr Logs als in diesem Beispiel.

Letztes Log zurückgegeben

{
  "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"
}

Die Anfragelatenz beträgt die letzten metadata.responseTimestamp abzüglich der frühestens requestAttributes.time. Das Ergebnis lautet 2023-02-15T18:13:39.441692339Z – 2023-02-15T18:13:39.341584693Z, was 0,100107646 Sekunden entspricht.