Spanner 스트리밍 및 파티션 요청 지연 시간 계산

이 페이지에서는 스트리밍 및 파티션 요청의 Spanner API 요청 지연 시간을 계산하는 방법을 설명합니다.

AuditLogmetadata 구조체 객체에 있는 필드를 사용하여 Spanner API 스트리밍 및 파티션 요청 지연 시간을 계산할 수 있습니다. 메타데이터는 QueryPerformanceMetadata 유형입니다. 스트리밍 및 파티션 요청의 경우 metadataprocessingSecondsDuration 필드가 포함되지 않습니다. processingSecondsDuration을 사용하여 다른 모든 요청 유형의 요청 지연 시간을 계산하는 방법에 대한 자세한 내용은 처리 기간을 참조하세요.

스트리밍 요청의 요청 지연 시간

클라이언트가 스트리밍 요청을 보내고 Spanner API가 부분 결과 집합을 반환하면 Cloud 감사 로그는 첫 번째와 마지막 응답에 대한 감사 로그를 기록합니다. 스트리밍 요청의 요청 지연 시간은 Spanner API가 요청을 수신한 시점과 클라이언트가 마지막 응답을 수신한 시점 사이에 경과한 시간입니다.

스트리밍 요청 감사 로그 항목 인식

스트리밍 요청의 요청 지연 시간을 계산하려면 요청과 관련된 로그 항목을 식별해야 합니다. 로그 항목의 protoPayload.methodNamegoogle.spanner.v1.Spanner.ExecuteStreamingSql 또는 google.spanner.v1.Spanner.StreamingRead로 설정되어 있습니다. 각 스트리밍 요청에는 operation.id로 그룹화되는 2개의 로그 항목이 있습니다. 첫 번째 항목의 operation.firsttrue로 설정되고 마지막 항목의 operation.lasttrue로 설정합니다. protoPayload.metadata.responseTimestamp 객체도 채워집니다.

스트리밍 요청의 요청 지연 시간 계산

스트리밍 요청의 요청 지연 시간을 계산하려면 operation.id를 사용하여 감사 로그를 필터링합니다. 최신 protoPayload.metadata.responseTimestamp와 가장 오래된 protoPayload.requestMetadata.requestAttributes.time의 차이점은 요청 지연 시간입니다.

스트리밍 요청의 샘플 감사 로그

스트리밍 요청의 모든 로그 항목을 찾으려면 로그 탐색기에서 다음 쿼리를 실행하고 OPERATION_ID 변수를 원하는 값으로 바꾸세요.

operation.id="OPERATION_ID"

다음 예시에서는 operation.id15327696495839874591인 스트리밍 요청의 로그 항목을 찾습니다.

operation.id="15327696495839874591"

반환된 첫 번째 로그

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

반환된 마지막 로그

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

요청 지연 시간은 최신 metadata.responseTimestamp에서 가장 오래된 requestAttributes.time을 뺀 값입니다. 결과는 2023-02-27T16:57:40.556138125Z-2023-02 - 2023-02-27T16:57:40.552952297Z, 즉 0.003185828초입니다.

파티션 요청의 요청 지연 시간

클라이언트가 파티션을 나눈 요청을 전송하면 Spanner는 여러 감사 로그를 만듭니다. 엔드 투 엔드 파티션 요청의 요청 지연 시간과 파티션에 대한 후속 호출을 계산하려면 상위 요청과 연결된 감사 로그를 식별합니다.

파티션 요청 감사 로그 항목 인식

PartitionRead 또는 PartitionQuery 요청을 수행하면 PartitionResponse에 파티션 집합이 반환됩니다. 각 파티션에 대해 Read, ExecuteSql 또는 ExecuteStreaming 호출을 실행하면 Spanner는 이러한 메서드의 감사 로그를 기록합니다. 이러한 각 로그에는 protoPayload.metadata.partitionBatchIdentifier라는 그룹화할 식별자가 포함되어 있습니다. protoPayload.metadata.responseTimestamp 객체도 채워집니다.

파티션 요청의 요청 지연 시간 계산

파티션 요청의 요청 지연 시간을 계산하려면 metadata.partitionBatchIdentifier를 사용하여 감사 로그를 필터링하면 됩니다. 최신 metadata.responseTimestamp와 가장 오래된 protoPayload.requestMetadata.requestAttributes.time의 차이점은 요청 지연 시간입니다.

파티션 요청의 샘플 감사 로그

파티션 요청의 모든 로그 항목을 찾으려면 로그 탐색기에서 다음 쿼리를 실행하고 PARTITION_BATCH_ID 변수를 원하는 값으로 바꾸세요.

metadata.partitionBatchIdentifier="PARTITION_BATCH_ID"

다음 예시에서는 15327696495839874591metadata.partitionBatchIdentifier인 파티션 요청의 로그 항목을 찾습니다.

metadata.partitionBatchIdentifier="15327696495839874591"

반환된 첫 번째 로그

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

반환된 두 번째 로그

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

파티션 수에 따라 Spanner는 이 예시보다 더 많은 로그를 기록할 수 있습니다.

반환된 마지막 로그

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

요청 지연 시간은 최신 metadata.responseTimestamp에서 가장 오래된 requestAttributes.time을 뺀 값입니다. 결과는 2023-02-15T18:13:39.441692339Z - 2023-02-15T18:13:39.341584693Z, 즉 0.100107646초입니다.