이 페이지에서는 MySQL용 Cloud SQL 5.7에서 MySQL용 Cloud SQL 8.0으로 메이저 버전을 업그레이드한 후 발생할 수 있는 알려진 문제와 비호환성을 설명합니다.
메이저 버전 업그레이드에 대한 자세한 내용은 데이터베이스 주 버전 인플레이스 업그레이드를 참고하세요. 오류 로그에 대한 자세한 내용은 오류 로그 보기를 참고하세요.
성능 문제
다음 섹션에서는 알려진 성능 문제를 다룹니다.
SELECT DISTINCT 쿼리 관련 문제
MySQL 8.0.18~MySQL 8.0.20에서 SELECT DISTINCT 쿼리를 사용하는 경우 성능이 저하될 수 있습니다. MySQL 5.7과 비교할 때 쿼리 실행 시간이 3배 더 길어질 수 있습니다.
자세한 내용은 MySQL 버그 #99593을 참고하세요.
이 문제를 해결하려면 다음 문제 해결 권장사항을 따르세요.
- MySQL 8.0.21, 이후 마이너 버전 또는 최신 버전으로 업데이트합니다.
- MySQL 8.0.18~MySQL 8.0.20을 사용하는 경우
internal_tmp_mem_storage_engine데이터베이스 플래그의 값을memory로 업데이트합니다.SET SESSION internal_tmp_mem_storage_engine='memory' ;
GROUP BY 쿼리 관련 문제
MySQL 8.0.36 이하에서 SELECT... GROUP BY 쿼리를 사용하는 경우 성능이 저하되고 쿼리 실행 시간이 늘어날 수 있습니다.
쿼리에서 TempTable 엔진을 사용하는 경우 발생할 수 있습니다.
자세한 내용은 MySQL 버그 #107700을 참고하세요.
이 문제를 해결하려면 다음 문제 해결 권장사항을 따르세요.
- MySQL 8.0.37, 이후 마이너 버전 또는 최신 버전으로 업데이트합니다.
- MySQL 8.0.36 이하를 사용하는 경우 임시 테이블 엔진 대신 메모리 엔진을 사용하도록
internal_tmp_mem_storage_engine데이터베이스 플래그를 업데이트합니다.SET SESSION internal_tmp_mem_storage_engine='memory' ;
동시 실행이 낮은 스레드의 문제
동시 실행 스레드가 낮은 클라이언트 애플리케이션을 지원하는 MySQL 8.0.22 이상에서 생성된 인스턴스에서 성능 문제와 쿼리 실행 시간 증가가 발생할 수 있습니다.
MySQL 8.0.22에서는 동시성이 높은 시스템의 성능을 개선하기 위해 innodb_log_writer_threads 플래그가 도입되었습니다. 이 플래그는 기본적으로 사용 설정되어 있습니다. 동시성 스레드가 낮은 클라이언트 애플리케이션을 지원하는 MySQL 8.0.22 이상에서 생성된 인스턴스가 있는 경우 innodb_log_writer_threads 플래그를 사용 중지하는 것이 좋습니다.
자세한 내용은 MySQL 버그 #93734를 참고하세요.
JOINS 관련 문제
MySQL 8.0.29~MySQL 8.0.32를 사용하는 인스턴스에서 eq_ref 뷰와 함께 JOIN 쿼리를 사용하는 경우 심각한 성능 문제가 발생할 수 있습니다.
자세한 내용은 MySQL 버그 #109361을 참고하세요.
이 문제를 해결하려면 MySQL 8.0.33, 이후 마이너 버전 또는 최신 버전으로 업데이트하세요.
LIMIT 및 ORDER BY 절 관련 문제
MySQL 8.0.32 이하에서 LIMIT 및 ORDER BY 절을 사용하여 쿼리를 실행하면 성능 문제가 발생할 수 있습니다. 경우에 따라 MySQL 8.0에서는 동일한 쿼리에 대해 MySQL 5.7과 다른 쿼리 계획이 사용될 수 있습니다.
자세한 내용은 MySQL 8.0.33의 변경사항을 참고하세요.
이 문제를 해결하려면 MySQL 8.0.33, 이후 마이너 버전 또는 최신 버전으로 업데이트하세요.
MySQL 8.0의 메모리 누수 문제
다음 섹션에서는 MySQL 8.0 이상의 알려진 메모리 누수 문제를 다룹니다. 이러한 문제는 인스턴스 성능에도 영향을 미칠 수 있습니다.
범위 쿼리로 인한 메모리 누수
MySQL 8.0.16~MySQL 8.0.28이 있는 인스턴스에서 범위 최적화 도구를 사용하는 경우 코드 파일과 함수 memory/sql/THD::main_mem_root에 의해 메모리 소비가 높게 발생할 수 있습니다. 이로 인해 인스턴스에 메모리 부족 (OOM)이 발생할 수 있습니다.
자세한 내용은 MySQL 버그 #105331을 참고하세요.
이 문제를 해결하려면 MySQL 8.0.29, 이후 마이너 버전 또는 최신 버전으로 업데이트하세요.
저장 프로시저와 관련된 메모리 누수
MySQL 8.0.27~8.0.31이 설치된 인스턴스의 저장 프로시저에서 쿼리를 실행하면 memory/sql/sp_head::execute_mem_root 코드 파일 및 함수에서 쿼리가 매우 많은 양의 메모리를 사용할 수 있습니다.
자세한 내용은 MySQL 버그 #107327을 참고하세요.
이 문제를 해결하려면 MySQL 8.0.32, 이후 마이너 버전 또는 최신 버전으로 업데이트하세요.
SELECT를 사용하여 뷰에 액세스하여 발생하는 메모리 누수
MySQL 8.0.35 이하에서 SELECT 쿼리를 사용하고 애플리케이션에서 뷰 호출을 많이 사용하는 경우 눈에 띄는 메모리 누수가 발생할 수 있습니다.
또한 DEFINER 뷰가 root@'%' 또는 cloudsqlsuperuser 역할에서 파생된 사용자로 설정된 경우 메모리 누수가 발생할 수 있습니다. 이는 cloudsqlsuperuser 역할에 일부 취소 권한이 있기 때문입니다.
자세한 내용은 MySQL 버그 #103133을 참고하세요.
이 문제를 해결하려면 다음 문제 해결 권장사항을 따르세요.
- MySQL 8.0.36, 이후 마이너 버전 또는 최신 버전으로 업데이트합니다.
- MySQL 8.0.35 이하를 사용하는 경우
DEFINER뷰에 별도의 사용자를 사용합니다. 특히 부분 취소 권한이 없는 사용자를 사용합니다.root@'%'사용자 또는cloudsqlsuperuser역할을 사용해야 하는 경우 관리 프로세스에만 사용하고 애플리케이션 쿼리에는 사용하지 않아야 합니다. 메모리 누수가 지속되면 MySQL 8.0.36, 이후 마이너 버전 또는 최신 버전으로 업그레이드해야 합니다.
복제 문제
다음 섹션에서는 복제와 관련된 알려진 문제를 설명합니다.
병렬 복제 관련 문제
slave_preserve_commit_order 구성요소가 사용 설정된 멀티 스레드 복제본에서 병렬 복제를 사용하고 인스턴스가 쓰기 작업이 많은 워크로드에 사용되는 경우, 교착 상태와 누적된 복제 지연 시간으로 인해 인스턴스 작업이 무기한 일시중지될 수 있습니다.
이 문제는 MySQL 8.0.27~MySQL 8.0.32에서 발생합니다.
자세한 내용은 MySQL 버그 #95863 및 MySQL 버그 #103636을 참고하세요.
이 문제를 해결하려면 다음 문제 해결 권장사항을 따르세요.
- MySQL 8.0.33, 이후 마이너 버전 또는 최신 버전으로 업데이트합니다.
- 이 문제의 원인을 확인하려면 병렬 복제를 사용 중지한 후 적절한 업그레이드를 예약하세요. 병렬 복제를 사용 중지하면 일시적으로 문제가 해결될 수 있지만 장기적인 해결 방법으로는 권장되지 않습니다.
권한 문제
다음 섹션에서는 권한과 관련된 알려진 문제를 설명합니다.
권한 변경사항
MySQL에서 MySQL 8.0의 보안 및 계정 관리 시스템을 변경했습니다.
MySQL 8.0으로 업그레이드한 후 MySQL 5.7에서 생성된 사용자에게는 MySQL 8.0에서 생성된 사용자와 동일한 권한과 액세스 권한이 없을 수 있습니다. 따라서 MySQL 5.7에서 생성된 사용자는 다음 시나리오에서 액세스 거부 오류 메시지를 받을 수 있습니다.
- MySQL 5.7에서 업그레이드된 사용자에게는
CREATE ROLE권한과DROP ROLE권한이 없을 수 있습니다. MySQL 5.7에 이러한 권한이 없기 때문입니다. - MySQL 5.7에서 업그레이드된 사용자는
KILL명령어를 실행하지 못할 수 있습니다. 이제 MySQL 8.0에서 작동하려면CONNECTION_ADMIN권한이 필요하기 때문입니다.
자세한 내용은 MySQL 8.0에서 사용할 수 있는 모든 권한을 확인하세요.
오류 메시지의 예는 다음과 같습니다.
ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
기존 사용자에게 이러한 업데이트된 권한을 직접 할당할 수는 없습니다.
이 문제를 해결하려면 GRANT OPTION 권한이 있는 관리자가 업그레이드 후 사용자 권한을 재설정하여 메이저 버전 업그레이드를 완료해야 합니다.
자세한 내용은 데이터베이스 주 버전 인플레이스 업그레이드를 참조하세요.
권한 변경으로 인해 액세스 거부 오류가 발생함
MySQL 8.0으로 업그레이드된 MySQL 5.7에서 생성된 사용자는 권한 문제로 인해 데이터베이스에 연결하지 못할 수 있습니다. 이러한 경우 사용자에게 다음과 같은 오류 메시지가 표시될 수 있습니다.
Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
MySQL 8.0.16에서는 partial_revokes 데이터베이스 플래그가 도입되었으며 기본적으로 사용 설정되어 사용자 권한을 부분적으로 취소할 수 있습니다.
MySQL 5.7에서 생성된 사용자가 와일드 카드 문자를 사용하여 정의된 경우 해당 사용자가 데이터베이스에 연결하지 못할 수 있습니다. MySQL 8.0.16 이상에서는 와일드 카드 문자가 더 이상 지원되지 않습니다. 즉, MySQL에서 데이터베이스와 사용자의 정확한 일치 항목을 찾을 수 없으므로 업그레이드 시 기존 권한 할당이 누락될 수 있습니다.
이 문제는 MySQL 8.0.16 이상에 영향을 미칩니다.
자세한 내용은 데이터베이스 플래그 구성 및 보안 및 계정 관리를 참고하세요.
이 문제를 해결하려면 관리자가 MySQL 8.0에서 사용자에게 권한을 수동으로 할당해야 합니다.
MySQL 5.7과 MySQL 8.0 간 플래그 값 변경사항
MySQL 5.7에서 MySQL 8.0으로 업그레이드하면 버전 간 기본값 변경으로 인해 일부 데이터베이스 플래그 값이 변경될 수 있습니다. 이 동작으로 인해 성능 문제가 발생할 수 있습니다.
자세한 내용은 MySQL 8.0의 새로운 기본값을 참고하세요.
이 문제를 해결하려면 MySQL 5.7에서 수동으로 할당된 데이터베이스 플래그 값이 MySQL 8.0 이상으로 업그레이드된 후에도 계속 적용되는지 확인하세요. 시스템 플래그에 할당된 기본값을 그대로 두는 것이 좋습니다.