온더플라이 뮤테이션
SELECT 쿼리는 변경된 값을 자동으로 반환합니다. 온더플라이 뮤테이션이 활성화되지 않은 경우에는 변경된 값을 확인하려면 백그라운드 프로세스를 통해 뮤테이션이 적용될 때까지 기다려야 할 수 있습니다.
온더플라이 뮤테이션은 쿼리 수준 설정 apply_mutations_on_fly를 활성화하면 MergeTree 계열 테이블에서 사용할 수 있습니다.
예시
SELECT 쿼리로 업데이트 결과를 확인해 보겠습니다:
SELECT 쿼리는 이제 뮤테이션이 적용될 때까지 기다릴 필요 없이 올바른 결과를 즉시 반환합니다:
성능 영향
SELECT 쿼리 시에만 적용됩니다. 다만 뮤테이션은 여전히 백그라운드에서 비동기적으로 구체화되며, 이 과정은 리소스 부담이 큰 작업이라는 점에 유의하십시오.
일정 인터벌 동안 제출되는 뮤테이션 수가 백그라운드에서 처리되는 뮤테이션 수를 지속적으로 초과하면, 적용 대기 중인 미구체화 뮤테이션 큐가 계속 증가하게 됩니다. 그 결과 시간이 지날수록 SELECT 쿼리 성능이 저하됩니다.
미구체화 뮤테이션이 무한정 증가하는 것을 제한하려면 apply_mutations_on_fly 설정을 number_of_mutations_to_throw, number_of_mutations_to_delay와 같은 다른 MergeTree 수준 설정과 함께 활성화하는 것이 좋습니다.
서브쿼리 및 비결정적 함수 지원
mutations_max_literal_size_to_replace로 제어됨), 상수 비결정적 함수만 지원됩니다(예: now() 함수).
이러한 동작은 다음 설정으로 제어됩니다:
mutations_execute_nondeterministic_on_initiator- true이면 비결정적 함수가 initiator 레플리카에서 실행되고UPDATE및DELETE쿼리에서는 리터럴로 대체됩니다. 기본값:false.mutations_execute_subqueries_on_initiator- true이면 스칼라 서브쿼리가 initiator 레플리카에서 실행되고UPDATE및DELETE쿼리에서는 리터럴로 대체됩니다. 기본값:false.mutations_max_literal_size_to_replace-UPDATE및DELETE쿼리에서 대체할 직렬화된 리터럴의 최대 크기(바이트)입니다. 기본값:16384(16 KiB).