Amazon Neptune 느린 쿼리 로깅 사용 - Amazon Neptune

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

Amazon Neptune 느린 쿼리 로깅 사용

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

참고

느린 쿼리 로깅은 Neptune 엔진 릴리스 1.2.1.0에 도입되었습니다.

neptune_enable_slow_query_log DB 클러스터 파라미터를 사용하여 느린 쿼리 로깅을 활성화합니다. 이 파라미터는 기본적으로 disabled로 설정되어 있습니다. info 또는 debug로 설정하여 느린 쿼리 로깅을 활성화합니다. info 설정은 실행 속도가 느린 각 쿼리의 몇 가지 유용한 속성을 로깅하는 반면, debug 설정은 사용 가능한 모든 속성을 로깅합니다.

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

이러한 DB 클러스터 파라미터는 에서 또는 AWS CLI modify-db-cluster-parameter-group 명령 또는 ModifyDB 그룹 관리 함수를 사용하여 설정할 수 있습니다. AWS Management Console ClusterParameter

참고

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

슬로우 쿼리 로그를 보려면 AWS Management Console

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

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

Neptune 느린 쿼리 로깅으로 생성된 파일

Neptune에서 느린 쿼리 로깅으로 생성되는 로그 파일은 다음과 같은 특징을 갖습니다.

  • 파일이 UTF-8로 인코딩됩니다.

  • 쿼리와 해당 속성이 JSON 형식으로 로깅됩니다.

  • queryTime 데이터를 제외하고 null 및 빈 속성은 로깅되지 않습니다.

  • 로그는 여러 파일에 걸쳐 있으며, 수는 인스턴스 크기에 따라 달라집니다.

  • 로그 항목이 순서대로 나열되지 않습니다. 정렬을 위해 timestamp 값을 사용할 수 있습니다.

  • 최신 이벤트를 보기 위해 모든 느린 쿼리 로그 파일을 확인해야 하는 경우가 있을 수 있습니다.

  • 로그 파일은 총 100MiB에 도달하면 교체됩니다. 이 제한은 구성할 수 없습니다.

info 모드에서 로깅된 쿼리 속성

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

그룹 속성 설명

요청 ResponseMetadata

requestId

쿼리의 요청 ID.

requestType

요청 유형 (예: HTTP 또는 WebSocket

responseStatusCode

쿼리 응답 상태 코드(예: 200).

exceptionClass

쿼리 실행 후 반환된 오류의 예외 클래스.

queryStats

query

쿼리 문자열.

queryFingerprint

쿼리의 핑거프린트.

queryLanguage

쿼리 언어(예: Gremlin, SPARQL 또는 openCypher).

memoryStats

allocatedPermits

쿼리에 할당된 권한.

approximateUsedMemoryBytes

실행 중 쿼리에 사용된 대략적인 메모리.

queryTime

startTime

쿼리 시작 시간(UTC).

overallRunTimeMs

총 쿼리 실행 시간(밀리초).

parsingTimeMs

쿼리 구문 분석 시간(밀리초).

waitingTimeMs

쿼리 Gremlin/SPARQL/openCypher 대기열 대기 시간(밀리초).

executionTimeMs

쿼리 실행 시간(밀리초).

serializationTimeMs

쿼리 직렬화 시간(밀리초).

statementCounters

scanned

스캔한 문 수.

written

작성한 문 수.

deleted

삭제된 문 수.

transactionCounters

committed

커밋된 트랜잭션 수.

rolledBack

롤백된 트랜잭션 수.

vertexCounters

added

추가된 버텍스 수.

removed

제거된 버텍스 수.

propertiesAdded

추가된 버텍스 속성 수.

propertiesRemoved

제거된 버텍스 속성 수.

edgeCounters

added

추가된 엣지 수.

removed

제거된 엣지 수.

propertiesAdded

추가된 엣지 속성 수.

propertiesRemoved

제거된 엣지 속성 수.

resultCache

hitCount

결과 캐시 적중 횟수.

missCount

결과 캐시 실패 횟수.

putCount

결과 캐시 입력 횟수.

concurrentExecution

acceptedQueryCountAtStart

시작 시 현재 쿼리 실행과 함께 허용되는 병렬 쿼리.

runningQueryCountAtStart

시작 시 현재 쿼리 실행과 함께 실행되는 병렬 쿼리.

acceptedQueryCountAtEnd

종료 시 현재 쿼리 실행과 함께 허용되는 병렬 쿼리.

runningQueryCountAtEnd

종료 시 현재 쿼리 실행과 함께 실행되는 병렬 쿼리.

queryBatch

queryProcessingBatchSize

쿼리 처리 중 배치 크기.

querySerialisationBatchSize

쿼리 직렬화 중 배치 크기.

debug 모드에서 로깅된 쿼리 속성

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

단일 카디널리티 삽입 중에 삭제된 문 수.

느린 쿼리에 대한 디버그 로깅의 예제

다음 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 } }