[CBRD-25230] rev: Extending result-cache to uncorrelated subqueries
http://jira.cubrid.org/browse/CBRD-25230
[1] 서브 쿼리 실행에서 에러가 발생한 경우, 메인 쿼리를 실행하지 않도록 코드 추가
AS-IS:
서브쿼리가 실행될 때, 에러가 발생한 경우, result cache를 사용하지 않고 재실행.
TO-BE:
서브쿼리를 실행에서, 에러가 발생한 경우, 에러로 처리.
error code: ER_QPROC_RESULT_CACHE_INVALID
[2] msg에 에러 코드와 에러 메시지 추가
[3] MERGE INTO 구문의 USING에 사용된 SQL의 subquery cache 올바르게 처리
이후 RESULT CACHE 없이 재실행할 수 있는 구조로 변경되는 경우, 이 PR에서 추가하는 에러 코드와 에러 메시지를 다시 제거해야 합니다. 만약 릴리즈 전 다른 이슈에서 해결한다면 새로운 에러 코드를 도입하는 것 보다 INTERNAL ERROR 메시지로 우선 처리한 후, 이후 이슈에서 수정하면 좋을 것 같습니다.
이후 RESULT CACHE 없이 재실행할 수 있는 구조로 변경되는 경우, 이 PR에서 추가하는 에러 코드와 에러 메시지를 다시 제거해야 합니다. 만약 릴리즈 전 다른 이슈에서 해결한다면 새로운 에러 코드를 도입하는 것 보다 INTERNAL ERROR 메시지로 우선 처리한 후, 이후 이슈에서 수정하면 좋을 것 같습니다.
ER_QPROC_RESULT_CACHE_INVALID 에러에 대해 재실행하도록 코드가 수정되었으며, 재실행 과정에서도 동일한 오류가 발생할 경우에 대비해 에러 메시지 추가가 필요합니다.
서브쿼리를 실행에서, 에러가 발생한 경우, 에러로 처리.
위와 같이 수정할 경우, 실질적으로 외부에서는 서부쿼리 캐시를 사용할 수 없고, 사용하더라도 문제 발생 시 버그로 인식할 것입니다. 다음에 개선하신다고 하셨는데, 그 시점이 릴리즈 이후라면 서브쿼리 캐시 기능은 공개하지 않고 숨겨야 할 것 같습니다. 이런 의미에서 1번의 수정은 약간 무의미해 보이네요.
서브쿼리를 실행에서, 에러가 발생한 경우, 에러로 처리.위와 같이 수정할 경우, 실질적으로 외부에서는 서부쿼리 캐시를 사용할 수 없고, 사용하더라도 문제 발생 시 버그로 인식할 것입니다. 다음에 개선하신다고 하셨는데, 그 시점이 릴리즈 이후라면 서브쿼리 캐시 기능은 공개하지 않고 숨겨야 할 것 같습니다. 이런 의미에서 1번의 수정은 약간 무의미해 보이네요.
스펙을 조정했습니다. 서브 쿼리 result-cache에서 에러가 발생할 경우, 재실행할 수 있도록 했습니다. 앞선 커멘트 내용 참조하기 바랍니다.
서브쿼리를 실행에서, 에러가 발생한 경우, 에러로 처리.위와 같이 수정할 경우, 실질적으로 외부에서는 서부쿼리 캐시를 사용할 수 없고, 사용하더라도 문제 발생 시 버그로 인식할 것입니다. 다음에 개선하신다고 하셨는데, 그 시점이 릴리즈 이후라면 서브쿼리 캐시 기능은 공개하지 않고 숨겨야 할 것 같습니다. 이런 의미에서 1번의 수정은 약간 무의미해 보이네요.
스펙을 조정했습니다. 서브 쿼리 result-cache에서 에러가 발생할 경우, 재실행할 수 있도록 했습니다. 앞선 커멘트 내용 참조하기 바랍니다.
조정된 스펙으로 본문 내용을 수정해주세요.
전 리뷰에도 적었지만, 프로그램 수정을 통해서 전체 부질의에 대해서 result cache가 적용되게 수정하고 SQL 테스트를 진행했으면 좋겠습니다. 최대한 검증할 수 있는 부분은 검증을 부탁드립니다.
전 리뷰에도 적었지만, 프로그램 수정을 통해서 전체 부질의에 대해서 result cache가 적용되게 수정하고 SQL 테스트를 진행했으면 좋겠습니다. 최대한 검증할 수 있는 부분은 검증을 부탁드립니다.
네, 이 부분은 힌트와 상관 없이 동작하도록 코드를 일부 수정해서 검증할 예정입니다.
전 리뷰에도 적었지만, 프로그램 수정을 통해서 전체 부질의에 대해서 result cache가 적용되게 수정하고 SQL 테스트를 진행했으면 좋겠습니다. 최대한 검증할 수 있는 부분은 검증을 부탁드립니다.
서브 쿼리에 강제로 QUERY_CACHE를 넣어서 1차 검증을 진행했습니다. 진행 중 문제점을 파악하여, 코드 수정을 하였으며, DML 구문에 서브쿼리 캐시가 설정된 경우 AUTO COMMIT 모드가 아닌 경우, 서브 쿼리가 실제로 result-cache를 하지 않습니다. 이 때, DML 구문을 재실행하게 되는데 의견 주신대로 재실생 시 서브쿼리 캐시 설정 없이 recompile하여 실행하도록 했습니다.