

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Neptune 느린 쿼리 로깅 사용
<a name="slow-query-logs"></a>

실행 속도가 느린 쿼리를 식별, 디버깅, 최적화하는 것은 어려울 수 있습니다. Neptune의 느린 쿼리 로깅을 활성화하면 장기간 실행되는 모든 쿼리의 속성이 자동으로 로깅되므로, 이 프로세스가 더 쉬워집니다.

**참고**  
느린 쿼리 로깅은 Neptune [엔진 릴리스 1.2.1.0](engine-releases-1.2.1.0.md)에 도입되었습니다.

[neptune\$1enable\$1slow\$1query\$1log](parameters.md#parameters-db-cluster-parameters-neptune_enable_slow_query_log) DB 클러스터 파라미터를 사용하여 느린 쿼리 로깅을 활성화합니다. 이 파라미터는 기본적으로 `disabled`로 설정되어 있습니다. `info` 또는 `debug`로 설정하여 느린 쿼리 로깅을 활성화합니다. `info` 설정은 실행 속도가 느린 각 쿼리의 몇 가지 유용한 속성을 로깅하는 반면, `debug` 설정은 사용 가능한 모든 속성을 로깅합니다.

느리게 실행되는 쿼리로 간주되는 쿼리의 임계값을 설정하려면 [neptune\$1slow\$1query\$1log\$1threshold](parameters.md#parameters-db-cluster-parameters-neptune_slow_query_log_threshold) DB 클러스터 파라미터를 사용하여 실행 중인 쿼리가 느린 것으로 간주되어 느린 쿼리 로깅이 활성화되었을 때 로깅되는 시간을 밀리초 단위로 지정합니다. 기본값은 5,000밀리초(5초)입니다.

이러한 DB 클러스터 파라미터는 [AWS Management Console에서](parameter-groups.md#parameters-editgroup) 설정하거나 [modify-db-cluster-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/neptune/modify-db-cluster-parameter-group.html) AWS CLI 명령 또는 [ModifyDBClusterParameterGroup](api-parameters.md#ModifyDBClusterParameterGroup) 관리 함수를 사용하여 설정할 수 있습니다.

**참고**  
느린 쿼리 로깅 파라미터는 동적입니다. 즉, 값을 변경해도 DB 클러스터를 다시 시작할 필요가 없으며 재시작되지도 않습니다.

## 에서 느린 쿼리 로그를 보려면 AWS Management Console
<a name="slow-query-logs-console"></a>

다음과 AWS Management Console같이에서 느린 쿼리 로그를 보고 다운로드할 수 있습니다.

**인스턴스** 페이지에서 DB 인스턴스를 선택한 다음, **로그** 섹션으로 스크롤합니다. 그런 다음 로그 파일을 선택한 후 **다운로드**를 선택하여 다운로드할 수 있습니다.

## Neptune 느린 쿼리 로깅으로 생성된 파일
<a name="slow-query-log-files"></a>

Neptune에서 느린 쿼리 로깅으로 생성되는 로그 파일은 다음과 같은 특징을 갖습니다.
+ 파일이 UTF-8로 인코딩됩니다.
+ 쿼리와 해당 속성이 JSON 형식으로 로깅됩니다.
+ `queryTime` 데이터를 제외하고 null 및 빈 속성은 로깅되지 않습니다.
+ 로그는 여러 파일에 걸쳐 있으며, 수는 인스턴스 크기에 따라 달라집니다.
+ 로그 항목이 순서대로 나열되지 않습니다. 정렬을 위해 `timestamp` 값을 사용할 수 있습니다.
+ 최신 이벤트를 보기 위해 모든 느린 쿼리 로그 파일을 확인해야 하는 경우가 있을 수 있습니다.
+ 로그 파일은 총 100MiB에 도달하면 교체됩니다. 이 제한은 구성할 수 없습니다.

## `info` 모드에서 로깅된 쿼리 속성
<a name="slow-query-log-info-attributes"></a>

`neptune_enable_slow_query_log` DB 클러스터 파라미터가 `info`로 설정된 경우 느린 쿼리에 대해 다음과 같은 속성이 로깅됩니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/slow-query-logs.html)

## `debug` 모드에서 로깅된 쿼리 속성
<a name="slow-query-log-debug-attributes"></a>

`neptune_enable_slow_query_log` DB 클러스터 파라미터가 `debug`로 설정되면 `info` 모드에서 로딩된 속성 외에도 다음과 같은 스토리지 카운터 속성이 로깅됩니다.


| 속성 | 설명 | 
| --- | --- | 
| `statementsScannedInAllIndexes` | 모든 인덱스에서 스캔된 문. | 
| `statementsScannedSPOGIndex` | SPOG 인덱스에서 스캔된 문. | 
| `statementsScannedPOGSIndex` | POGS 인덱스에서 스캔된 문. | 
| `statementsScannedGPSOIndex` | GPSO 인덱스에서 스캔된 문. | 
| `statementsScannedOSGPIndex` | OSGP 인덱스에서 스캔된 문. | 
| `statementsScannedInChunk` | 청크로 함께 스캔된 문. | 
| `postFilteredStatementScans` | 스캔되고 나서 사후 필터링 후 남은 문. | 
| `distinctStatementScans` | 스캔된 고유 문. | 
| `statementsReadInAllIndexes` | 모든 인덱스에서 스캔 사후 필터링 후 읽은 문. | 
| `statementsReadSPOGIndex` | SPOG 인덱스에서 스캔 사후 필터링 후 읽은 문. | 
| `statementsReadPOGSIndex` | POGS 인덱스에서 스캔 사후 필터링 후 읽은 문. | 
| `statementsReadGPSOIndex` | GPSO 인덱스에서 스캔 사후 필터링 후 읽은 문. | 
| `statementsReadOSGPIndex` | OSGP 인덱스에서 스캔 사후 필터링 후 읽은 문. | 
| `accessPathSearches` | 액세스 경로 검색 횟수. | 
| `fullyBoundedAccessPathSearches` | 완전히 바인딩된 키 액세스 경로 검색 횟수. | 
| `accessPathSearchedByPrefix` | 접두사를 기준으로 검색한 액세스 경로 수. | 
| `searchesWhereRecordsWereFound` | 1개 이상의 레코드가 출력된 검색 횟수. | 
| `searchesWhereRecordsWereNotFound` | 레코드가 출력되지 않은 검색 횟수. | 
| `totalRecordsFoundInSearches` | 모든 검색에서 찾은 총 레코드. | 
| `statementsInsertedInAllIndexes` | 모든 인덱스에 삽입된 문 수. | 
| `statementsUpdatedInAllIndexes` | 모든 인덱스에서 업데이트된 문 수. | 
| `statementsDeletedInAllIndexes` | 모든 인덱스에서 삭제된 문 수. | 
| `predicateCount` | 조건자 수. | 
| `dictionaryReadsFromValueToIdTable` | 값에서 ID 표까지 딕셔너리 읽기 수. | 
| `dictionaryReadsFromIdToValueTable` | 값 표 ID의 딕셔너리 읽기 수. | 
| `dictionaryWritesToValueToIdTable` | ID 표까지 값에 대한 딕셔너리 쓰기 수. | 
| `dictionaryWritesToIdToValueTable` | 값 표까지 ID에 대한 딕셔너리 쓰기 수. | 
| `rangeCountsInAllIndexes` | 모든 인덱스의 범위 수. | 
| `deadlockCount` | 쿼리의 교착 상태 수. | 
| `singleCardinalityInserts` | 수행된 단일 카디널리티 삽입의 수. | 
| `singleCardinalityInsertDeletions` | 단일 카디널리티 삽입 중에 삭제된 문 수. | 
| `sharedLocksWaitTimeMillis` | 공유 잠금을 기다리는 데 소요된 밀리초 수입니다. | 
| `exclusiveLocksWaitTimeMillis` | 독점 잠금을 기다리는 데 소요된 밀리초 수입니다. | 

## 느린 쿼리에 대한 디버그 로깅의 예제
<a name="slow-query-log-debug-output-sample"></a>

다음 Gremlin 쿼리는 느린 쿼리에 설정된 임계값보다 실행 시간이 더 오래 걸릴 수 있습니다.

```
gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()
```

그러면 디버그 모드에서 느린 쿼리 로깅을 활성화한 경우 다음과 같은 형식으로 쿼리에 아래의 속성이 로깅됩니다.

```
{
  "requestResponseMetadata": {
    "requestId": "5311e493-0e98-457e-9131-d250a2ce1e12",
    "requestType": "HTTP_GET",
    "responseStatusCode": 200
  },
  "queryStats": {
    "query": "gremlin=g.V().has('code','AUS').repeat(out().simplePath()).until(has('code','AGR')).path().by('code').limit(20).fold()",
    "queryFingerprint": "g.V().has(string0,string1).repeat(__.out().simplePath()).until(__.has(string0,string2)).path().by(string0).limit(long0).fold()",
    "queryLanguage": "Gremlin"
  },
  "memoryStats": {
    "allocatedPermits": 20,
    "approximateUsedMemoryBytes": 14838
  },
  "queryTimeStats": {
    "startTime": "23/02/2023 11:42:52.657",
    "overallRunTimeMs": 2249,
    "executionTimeMs": 2229,
    "serializationTimeMs": 13
  },
  "statementCounters": {
    "read": 69979
  },
  "transactionCounters": {
    "committed": 1
  },
  "concurrentExecutionStats": {
    "acceptedQueryCountAtStart": 1
  },
  "queryBatchStats": {
    "queryProcessingBatchSize": 1000,
    "querySerialisationBatchSize": 1000
  },
  "storageCounters": {
    "statementsScannedInAllIndexes": 69979,
    "statementsScannedSPOGIndex": 44936,
    "statementsScannedPOGSIndex": 4,
    "statementsScannedGPSOIndex": 25039,
    "statementsReadInAllIndexes": 68566,
    "statementsReadSPOGIndex": 43544,
    "statementsReadPOGSIndex": 2,
    "statementsReadGPSOIndex": 25020,
    "accessPathSearches": 27,
    "fullyBoundedAccessPathSearches": 27,
    "dictionaryReadsFromValueToIdTable": 10,
    "dictionaryReadsFromIdToValueTable": 17,
    "rangeCountsInAllIndexes": 4,
    "sharedLocksWaitTimeMillis": 0,
    "exclusiveLocksWaitTimeMillis": 0
  }
}
```