카산드라에서 쿼리 추적을 하고 싶다면 TRACING ON을 실행한다.
consistent level에 따른 쿼리 추적을 잘 확인할 수 있다.
cqlsh> TRACING ON;
Now Tracing is enabled
cqlsh>INSERT INTO "my"."users"\n ("username", "email", "encrypted_password")\n VALUES (\n 'samuel.kim',\n 'aaa@google.com',\n 0x8914977ed729792e403da53024c6069a9158b8c4\n );
Tracing session: 43cd0780-8da5-11e7-b58b-4f93372ce090
activity | timestamp | source | source_elapsed | client
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+-----------+----------------+-----------
Execute CQL3 query | 2017-08-31 02:04:20.475000 | 127.0.0.1 | 0 | 127.0.0.1
Parsing INSERT INTO "my"."users"\n ("username", "email", "encrypted_password")\n VALUES (\n 'samuel.kim',\n 'aaa@google.com',\n 0x8914977ed729792e403da53024c6069a9158b8c4\n ); [Native-Transport-Requests-1] | 2017-08-31 02:04:20.481000 | 127.0.0.1 | 6355 | 127.0.0.1
Preparing statement [Native-Transport-Requests-1] | 2017-08-31 02:04:20.481000 | 127.0.0.1 | 6914 | 127.0.0.1
Determining replicas for mutation [Native-Transport-Requests-1] | 2017-08-31 02:04:20.482000 | 127.0.0.1 | 7411 | 127.0.0.1
Appending to commitlog [MutationStage-3] | 2017-08-31 02:04:20.482000 | 127.0.0.1 | 7726 | 127.0.0.1
Adding to users memtable [MutationStage-3] | 2017-08-31 02:04:20.482000 | 127.0.0.1 | 7895 | 127.0.0.1
Request complete | 2017-08-31 02:04:20.487524 | 127.0.0.1 | 12524 | 127.0.0.1
사실 쿼리 추적은 keyspace system_traces 아래에 존재하는 events 테이블에 저장된다. 또한 모든 쿼리의 요약은 system_traces 키 스페이스 아래에 존재하는 sessions 테이블에 저장된다.
추적 정보는 여러 컬럼으로 구성되어 있는데,
activity, activity가 발생한 타임스탬프,
activity 요청 시작부터 경과 시간을 포함한다.
완료(Request complete)까지 걸리는 시간과 함께 요청 완료 확인을 찾을 수 있다.
또한 source_elapsed 컬럼은 소스 노드에서 이벤트가 발생하기 전의 경과 시간(ms)이다.
일관성 레벨을 변경한 후 검색을 실행하면 요청 완료 시간에 약간의 차이가 있음을 알 수 있다.
요청 완료에 대한 source_elapsed는 일관성 레벨 ALL일 때는 가장 높고 일관성 레벨 1일 때는 가장 낮다.
ALL 일관성 레벨은 클라이언트에게 요청 완료 확인을 보내기 전에 모든 복제본에 확인을 보내야 하기 때문에 경과 시간을 예상할 수 있다.
단일 서버에서 3개의 인스턴스를 실행 중이므로 요청 응답 시간의 차이는 별로 없을 것이다. 상용 클러스터에서 수백 개의 인스턴스로 작업할 때 훨씬 높은 불일치가 존재할 수 있음을 주목해야 한다.