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.