Couchbase에서 애플리케이션 성능을 개선하는 방법 중 하나는 일반적인 쿼리에 대한 인덱스를 생성하는 것입니다. 그러나 표준 DSL을 사용하여 Spring 데이터로 작업하는 경우 생성된 쿼리가 명확하지 않아 올바른 인덱스를 생성하기가 조금 더 어렵습니다.
이 문제는 다음을 활성화하여 쉽게 해결할 수 있습니다. DEBUG 클래스의 로그 수준 AbstractN1qlBasedQuery를 클릭하면 생성된 N1QL 쿼리를 활성화하는 것과 매우 유사한 동작으로, 로그에서 속성 show_sql 를 설정합니다. 이 구성을 설정하는 방법은 다음과 같습니다. application.yml
1 2 3 |
로깅: 레벨: org.스프링 프레임워크.데이터.카우치베이스.저장소.쿼리: DEBUG |
다음을 통해서도 활성화할 수 있습니다. 로그백 종속성으로 추가하기만 하면 됩니다:
1 2 3 4 5 |
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>로그백 클래식</artifactId> <version>1.2.3</version> </dependency> |
그런 다음 logback.xml 구성 파일을 리소스 폴더에 저장합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<configuration> <앱더 이름="STDOUT" 클래스="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%쓰레드] %-5레벨 %logger{36} - %msg%n</pattern> </encoder> </appender> <로거 이름="org.springframework.data.couchbase.repository.query" 레벨="debug" /> <root 레벨="정보"> <appender-ref ref="STDOUT" /> </root> </configuration> |
애플리케이션을 다시 실행하면 생성된 N1QL 쿼리가 로그에 인쇄됩니다.
1 2 3 4 |
2018-11-29 14:31:25.999 DEBUG 33427 --- [ 메인] o.s.d.c.r.쿼리.AbstractN1qlBasedQuery : 실행 중 N1QL 쿼리: {"진술":"SELECT META(`test`).id AS _ID, META(`test`).cas AS_CAS, `test`.* FROM `test` WHERE (`username` = \"myuser\") AND `_class` = \"com.bc.test.standalone.model.User\""","스캔 일관성":"statement_plus"} 2018-11-29 14:31:26.079 DEBUG 33427 --- [ 메인] o.s.d.c.r.쿼리.AbstractN1qlBasedQuery : 실행 중 N1QL 쿼리: {"args":["company--1","userId--1"],"진술":"SELECT META(`test`).id AS _ID, META(`test`).cas AS_CAS, `test`.* FROM `test` where `_class` = \"com.bc.test.standalone.model.SecurityGroup\" and companyId = $1 and removed = false AND ARRAY_CONTAINS(users, $2) ","스캔 일관성":"statement_plus"} 2018-11-29 14:31:26.186 DEBUG 33427 --- [ 메인] o.s.d.c.r.쿼리.AbstractN1qlBasedQuery : 실행 중 N1QL 쿼리: {"args":["area--1","company--1"],"진술":"SELECT META(`test`).id AS _ID, META(`test`).cas AS_CAS, `test`.* FROM `test` where `_class` = \"com.bc.test.standalone.model.BusinessUnity\", companyId = $2 및 $1 within `test`"","스캔 일관성":"statement_plus"} 2018-11-29 14:31:26.827 DEBUG 33427 --- [ 메인] o.s.d.c.r.쿼리.AbstractN1qlBasedQuery : 실행 중 N1QL 쿼리: {"진술":"SELECT META(`test`).id AS _ID, META(`test`).cas AS_CAS, `test`.* FROM `test` WHERE (`companyId` = \"company--1\" AND `removed` = false AND `familyId` = \"famillyrsc--FamiliaTeste\") AND `_class` = \"com.bc.test.standalone.model.MaintenancePlan\"","스캔 일관성":"statement_plus"} |
궁금한 점이 있으면 다음 주소로 문의해 주세요. @deniswsrosa
스프링 데이터 카우치베이스 4.1.1을 사용하는 SpringBoot 2.4에서 작동하나요? 로그백-spring.xml 아래에서 리포지토리 쿼리에 대한 로깅을 활성화할 수 없나요?
%d{HH:mm:ss} [%thread] %-5레벨 %logger{36} - %msg%n
%d{HH:mm:ss} [%thread] %-5레벨 %logger{36} - %msg%n
댓글을 편집하거나 삭제할 수없는 것 같습니다.로그백 xml이 왜곡되어 있지만 예제와 동일합니다.
https://github.com/spring-projects/spring-data-couchbase/issues/1045
안녕하세요! 스프링 데이터 4부터는 org.springframework.data.couchbase.core.query 패키지를 사용해 주세요.
https://www.couchbase.com/how-to-log-queries-generated-by-spring-data/