3024: Query execution was interrupted, maximum statement execution time exceeded (쿼리 실행이 중단됨. 최대 문장 실행 시간 초과)
MySQL의미
SELECT 쿼리가 정의된 최대 실행 시간(max_execution_time / MAX_EXECUTION_TIME 힌트)을 초과해 MySQL이 중단했다. 장시간 실행 쿼리가 리소스를 점유하지 않도록 하는 타임아웃 안전장치다.
원인
쿼리가 세션/전역 max_execution_time 값이나 SELECT의 MAX_EXECUTION_TIME(N) 옵티마이저 힌트보다 오래 실행되었다. 보통 비효율적인 실행 계획, 누락된 인덱스, 대규모 스캔, 높은 동시성에서의 지연이 원인이다. (읽기 전용 SELECT에만 적용된다.)
해결 방법
EXPLAIN으로 쿼리를 분석하고 최적화한다(적절한 인덱스, 더 선택적인 조건, full table scan 감소). 쿼리가 정당하게 오래 실행되어야 한다면 해당 SELECT의 MAX_EXECUTION_TIME 힌트나 세션 max_execution_time을 늘린다. 무거운 분석 쿼리는 오프라인/replica에서 실행한다.
같은 데이터베이스의 다른 항목
- 1030Got error N from storage engine
- 1197Multi-statement transaction required more than 'max_binlog_cache_size' (다중 문장 트랜잭션이 'max_binlog_cache_size'보다 많은 공간을 요구함)
- 1785Statement violates GTID consistency
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled) (함수에 DETERMINISTIC, NO SQL, READS SQL DATA 중 어느 것도 없음)
- 1231Variable can't be set to the value of ... (변수를 해당 값으로 설정할 수 없음)