8.3.2. 쿼리 관리 절차

이 섹션에서는 Neo4j에서 현재 쿼리에 맞춰 실행되는 절차에 대해 알아봅니다.

명시되지 않는 한, 이 섹션의 절차 내에 있는 모든 변수는 제공되어야 합니다.

8.3.2.1. 전문 용어

관리자 관리자는 admin 역할을 맡은 유저입니다. 유저와 그 역할에 관련된 내용은 섹션 7.1.4,"네이티브 사용자와 역할 관리"를 참조하십시오.

현재 사용자 '현재 사용자'는 이 섹션에서 설명된 명령어를 호출하고 현재 로그인한 유저입니다.

유저

  • 유저는 유저 이름과 자격으로 구성되고, 자격은 비밀번호와 같은 정보 단위로 구성되어 개인 신원을 확인할 수 있습니다.
  • 유저는 인간, 어플리케이션 등을 나타냅니다.

8.3.2.2. 실행되는 모든 쿼리 나열

관리자는 현재 인스턴스 내에 실행되는 모든 쿼리를 확인할 수 있습니다. 대신에 현재 유저는 자신의 실행되는 모든 쿼리를 확인할 수 있습니다.

문법: CALL dbms.listQueries()

반환 값:

이름 타입 설명
queryId String 쿼리의 ID입니다.
username String 쿼리를 실행하는 유저의 이름입니다.
metaData Map 트랜잭션과 관련된 모든 메타데이터 입니다.
query String 쿼리 그 자체입니다.
parameters Map 쿼리에서 사용되는 모든 변수를 포함하는 맵(map) 입니다.
planner String 쿼리에서 사용되는 플래너 입니다.
runtime String 쿼리에서 사용되는 런타임입니다.
indexes List 쿼리에서 사용되는 인덱스입니다.
startTime String 쿼리가 시작된 시간입니다.
elapsedTime String elapsedTimeMillis 을 대신 사용합니다. 쿼리가 시작된 이후 경과된 시간입니다.
connectionDetails String requestScheme,clientAddress,requestUri 을 대신 사용합니다. 쿼리와 관련된 세부 연결 정보입니다.
protocol String 쿼리를 실행하는 연결에서 사용되는 프로토콜입니다.
clientAddress String 쿼리를 실행하는 연결에서 사용되는 클라이언트 주소입니다.
requestUri String 쿼리를 실행하는 클라이언트 연결에서 사용되는 URI 요청입니다.
status String 실행중인 쿼리의 상태입니다.
resourceInformation Map 실행중인 쿼리의 상태입니다.
activeLockCount Integer 쿼리를 실행하는 트랙잭션이 보유한 활성화된 잠금 개수입니다.
elapsedTimeMillis Integer 쿼리가 시작된 후 경과된 초단위 시간입니다.
cpuTimeMillis Integer 쿼리를 실행하는데 경과된 CPU 초단위 시간입니다.
waitTimeMillis Integer 잠금하기까지 흐른 초단위의 대기 시간
idleTimeMillis Integer 초단위의 유휴시간
allocatedBytes Integer 실행중인 쿼리에 할당 된 바이트 수는 쿼리 기간 동안 누적됩니다. 즉 메모리가 많거나 오래 실행되는 쿼리의 경우 값은 현재 메모리 할당보다 클 수 있습니다.
pageHits Integer 실행하는 동안 발생한 페이지 히트
pageFaults Integer 실행하는동안 발생한 페이지 오류

예 8.5. 현재 실행되는 쿼리 보기

아래의 예는 유저 'alwood'가 현재 특정 변수를 생성하는 dbms.listQueries(), 즉 queryId, username,query,elapsedTimeMillis,requestUri,그리고 status를 실행하고 있음을 보여줍니다.

CALL dbms.listQueries() YIELD queryId, username, query, elapsedTimeMillis, requestUri, status
╒══════════╤═══════════╤══════════════════════════════╤════════════════════╤════════════════╤═══════════════════╕
│"queryId" │"username" │"query"                       │"elapsedTimeMillis" │"requestUri"    │"status"           │
╞══════════╪═══════════╪══════════════════════════════╪════════════════════╪════════════════╪═══════════════════╡
│"query-33"│"alwood"   │"CALL dbms.listQueries() YIELD│"1"                 │"127.0.0.1:7687"│{"state":"RUNNING"}│
│          │           │ queryId, username, query, ela│                    │                │                   │
│          │           │psedTime, requestUri, status" │                    │                │                   │
└──────────┴───────────┴──────────────────────────────┴────────────────────┴────────────────┴───────────────────┘
1 row

8.3.2.3. 쿼리에 대한 모든 활성 잠금 나열

관리자는 트랙잭션 실행 쿼리의 queryId을 사용해서 모든 활성 잠금을 확인할 수 있습니다.

문법

CALL dbms.listActiveLocks(queryId)

반환 값

이름 타입 설명
mode String 트랜잭션에 해당하는 잠금 모드
resourceType String 잠금 리소스의 종류
resourceId Integer 잠금 리소스의 아이디

예 8.6. 쿼리에 대한 활성 잠금 확인

아래 예는 쿼리를 아이디 query-614을 사용하여 트랜잭션을 실행하는 쿼리가 가진 활성 잠금을 보여줍니다.

CALL dbms.listActiveLocks( "query-614" )
╒════════╤══════════════╤════════════╕
│"mode"  │"resourceType"│"resourceId"│
╞════════╪══════════════╪════════════╡
│"SHARED"│"SCHEMA"      │"0"         │
└────────┴──────────────┴────────────┘
1 row

아래 예는 dbms.listQueries절차에서 queryId생성하여 현재 실행 되는 모든 쿼리에 대한 활성 잠금을 보여줍니다.

CALL dbms.listQueries() YIELD queryId, query
CALL dbms.listActiveLocks( queryId ) YIELD resourceType, resourceId, mode
RETURN queryId, query, resourceType, resourceId, mode
╒═══════════╤══════════════════════════════╤══════════════╤════════════╤════════╕
│"queryId"  │"query"                       │"resourceType"│"resourceId"│"mode"  │
╞═══════════╪══════════════════════════════╪══════════════╪════════════╪════════╡
│"query-614"│"match (n), (m), (o), (p), (q)│"SCHEMA"      │"0"         │"SHARED"│
│           │ return count(*)"             │              │            │        │
├───────────┼──────────────────────────────┼──────────────┼────────────┼────────┤
│"query-684"│"CALL dbms.listQueries() YIELD│"SCHEMA"      │"0"         │"SHARED"│
│           │ .."                          │              │            │        │
└───────────┴──────────────────────────────┴──────────────┴────────────┴────────┘
2 rows

8.3.2.4. 여러 쿼리 종료

관리자는 주어진 모든 쿼리 ID중 하나를 사용하여 인스턴스의 모든 트랙잭션에서 실행되는 쿼리를 종료할 수 있습니다. 대안으로, 현재 유저는 주어진 쿼리 ID중 임의의 쿼리 ID를 갖는 유저의 모든 트랜잭션을 종료시킬 수 있습니다.

문법:

CALL dbms.killQueries(ids)

변수:

이름 종류 설명
ids List 종료되는 모든 쿼리 ID 리스트

반환 값:

이름 종류 설명
queryId String 종료된 쿼리의 ID입니다.
username String 쿼리(현재는 종료된)를 실행하는 사용자의 이름입니다.

예 8.7. 여러 쿼리 종료

아래의 예는 유저가 'query-378' 와 'query-765' 아이디로 종료하고, 각각 'joesmith'와 'annebrown'로 로그인한 사용자를 나타냅니다.

CALL dbms.killQueries(['query-378','query-765'])
+---------------------------+
| queryId     | username    |
+---------------------------+
| "query-378" | "joesmith"  |
| "query-765" | "annebrown" |
+---------------------------+
2 rows

8.3.2.5. 단일 쿼리 종료

관리자는 ID가 주어진 실행중인 모든 트랜잭션을 인스턴스에서 종료할 수 있습니다. 대안으로 현재 유저는 자신의 주어진 ID로 쿼리를 실행하여 트랜잭션을 종료할 수 있습니다.

문법:

CALL dbms.killQuery(id)

변수:

이름 타입 설명
id String 쿼리를 종료시키는 ID입니다.

반환 값:

이름 종류 설명
queryId String 종료된 쿼리의 ID입니다.
username String 쿼리(현재는 종료된)를 실행하던 사용자의 이름입니다.
message String 쿼리가 검색 성공 여부를 나타내는 메시지입니다.

예 8.8. 단일 쿼리 종료

아래는 사용자 'joesmith' 가 그의 쿼리를 아이디 'query-502'로 종료한 예 입니다.

CALL dbms.killQuery('query-502')
+-----------------------------------------+
| queryId     | username    | message     |
+-----------------------------------------+
| "query-502" | "joesmith"  | Query found |
+-----------------------------------------+
1 row

아래는 존재하지 않는 아이디로 쿼리를 kill할 때 결과를 보여주는 예 입니다.

CALL dbms.killQuery('query-502')
+---------------------------------------------------------+
| queryId     | username    | message                     |
+---------------------------------------------------------+
| "query-502" | "n/a"       | No Query found with this id |
+---------------------------------------------------------+
1 row

results matching ""

    No results matching ""