MySQL 8.0 Release Note

8.0.40 변경 사항 (2024-10-15 GA)

Estimated reading: 2 minutes 99 views

공식 문서: Changes in MySQL 8.0.40 (2024-10-15, General Availability)

C API 관련 사항

비동기 인터페이스는 상태 정보를 저장하기 위해 안전하지 않은 정적 로컬 변수를 사용했습니다. (버그 #115703, 버그 #36891894)

컴파일 관련 사항

MySQL이 Fedora 41에서 컴파일되지 않았습니다. (버그 #37046924)

MySQL이 Ubuntu 24.10에서 컴파일되지 않았습니다. (버그 #37042308)

Oracle의 오픈 소스 지침을 준수하기 위해 MySQL 소스에 CONTRIBUTING.mdSECURITY.md 파일이 추가되었습니다. (버그 #36998165)

CMAKE_MINIMUM_REQUIRED가 올바른 CMake 버전(3.14.6)과 MySQL에서 사용되는 타사 라이브러리에 대한 CMake 정책에 맞게 조정되었습니다. (버그 #36978193)

시스템 curl 라이브러리에 링크하지 않고 curl을 포함하는 바이너리 패키지가 curl 8.9.1 버전으로 업그레이드되었습니다. curl 8.9.1에서 수정된 중요한 문제는 https://curl.se/docs/security.html에서 설명되어 있습니다. (버그 #36967379, 버그 #36955197)

포함된 zlib 라이브러리가 1.2.13 버전에서 1.3.1 버전으로 업그레이드되었습니다. (버그 #36950863)

CMake 옵션 BUILD_SHARED_LIBSCMAKE_SKIP_INSTALL_ALL_DEPENDENCY가 빌드 최상위 레벨에서 이제 OFF로 설정되었습니다. (버그 #36930664)

번들로 제공되는 libcurl 라이브러리가 8.9.0 버전으로 업그레이드되었습니다. (버그 #36886877)

번들로 제공되는 lz4 라이브러리가 1.10.0 버전으로 업그레이드되었습니다. (버그 #36886747)

CMake의 -DWITHOUT_SERVER 옵션이 Enterprise Linux 7에서 작동하지 않았습니다. (버그 #36824515)

MySQL에서 사용되는 libfido 버전이 1.15.0으로 업그레이드되었습니다. (버그 #36752604)

MySQL 코드베이스에 사용되는 clang-format 버전이 10에서 15로 업그레이드되었습니다. (버그 #36500268)

번들로 제공되는 TI-RPC 버전이 1.3.5로 업그레이드되었습니다. (버그 #115698, 버그 #36886602)

Protobuf 22 또는 그 이후 버전을 사용하여 MySQL을 빌드할 수 없었습니다.
기여해주신 Gordon Wang에게 감사드립니다. (버그 #115163, 버그 #36678092)

SQL 함수 및 연산자 관련 사항

DATABASE() 함수가 UNION 쿼리의 일부로 사용될 때 출력이 잘렸습니다. (버그 #36871927)

sys 스키마 관련 사항

이번 릴리스에서 innodb_lock_waits 뷰의 성능이 향상되었습니다. (버그 #36337708)

스레드 풀 관련 사항

일부 동시 연결 시도가 올바르게 처리되지 않았습니다. (버그 #36625082)

추가 및 변경된 기능

중요 변경 사항: OpenSSL 라이브러리가 번들된 플랫폼에서 MySQL 서버에 연결된 OpenSSL 라이브러리가 3.0.15 버전으로 업데이트되었습니다. 자세한 내용은 OpenSSL 3.0 시리즈 릴리스 노트OpenSSL 보안 권고 [2024년 9월 3일]을 참조하십시오. (버그 #37021075)

mysql 클라이언트에 system 클라이언트 명령어를 활성화 또는 비활성화할 수 있는 --system-command 옵션이 추가되었습니다.
이 옵션은 기본적으로 활성화되어 있습니다. 이를 비활성화하려면 --system-command=OFF 또는 --skip-system-command를 사용하면 system 명령어가 오류와 함께 거부됩니다. (버그 #36377685, WL #16482)
참고: 관련 항목으로는 버그 #36248967이 있습니다.

버그 수정

성능; InnoDB: MySQL 8.0.28에서 인라인으로 정의되었던 InnoDB 내부의 여러 함수가, MySQL 8.0.33에서는 인라인으로 유지되지 않은 것으로 확인되었습니다. 이는 부분적으로 MySQL 8.0.30에서 InnoDB 적응형 해시 인덱스의 성능을 개선하기 위해 동반된 리팩토링 때문이었으며, 이로 인해 InnoDB 테이블에서 조인을 사용하는 쿼리 성능에 부정적인 영향을 미쳤습니다. (버그 #111538, 버그 #35531293)
참고: 이 문제는 다음 버그의 회귀 문제입니다: 버그 #81814, 버그 #16739204, 버그 #23584861.

InnoDB: INSTANT 알고리즘을 사용하여 NULL을 기본값으로 설정한 REDUNDANT 테이블 열을 업데이트할 수 없었으며, 대신 MySQL이 예기치 않게 중단되었습니다. (버그 #36840107)

InnoDB: log_files_truncate를 사용하여 리두 로그 용량을 줄일 때, 드물게 file.end_lsnlog_sys->write_lsn과 같아져 이후의 리두 로그 쓰기를 불가능하게 했습니다. (버그 #36730830)

InnoDB: INSTANT 알고리즘을 사용하여 열을 삭제한 후, DELETE 또는 UPDATE 문을 실행할 때 MySQL 서버가 예기치 않게 중단될 수 있었습니다. (버그 #36723117)

InnoDB: FTS 인덱스 최적화가 정렬 순서는 같지만 바이트가 다른 토큰과 함께 제대로 작동하지 않는 경우가 있었습니다. (버그 #36652127)

InnoDB: 컴파일 중 최적화되지 않도록 std::this_thread::sleep_for(std::chrono::seconds(0)) 사용을 std::this_thread::yield()로 대체했습니다. (버그 #36522343)

InnoDB: MySQL 5.7에서 사용자 정의 FTS_DOC_ID 열을 기본 키로 사용하여 생성된 전문 검색 인덱스가 포함된 데이터베이스를 업그레이드하는 과정에서 예기치 않게 중단되었습니다.
이 수정에 기여해주신 Alibaba의 Huaxiong Song과 팀에 감사드립니다. (버그 #36496164)

InnoDB: 다중 값 가상 열에 대한 범위 조건이 있는 인덱스에 대해 옵티마이저가 비활성화되었습니다. (버그 #36341532)

InnoDB: Windows에서 파일 액세스를 느리게 만드는 더블라이트 버퍼 회귀 문제가 수정되었으며, 파일을 열 때 FILE_FLAG_OVERLAPPED 플래그 사용이 리팩토링되었습니다. (버그 #36259487)

InnoDB: 테이블을 생성할 때와 다른 sql_mode에서 테이블을 가져올 때 스키마 불일치가 발생할 수 있었습니다. 이는 엄격 모드가 테이블의 보조 인덱스에서 nullable 열의 수에 영향을 미치기 때문입니다. 이제 테이블스페이스를 가져온 후 보조 인덱스 트리도 손상 여부를 확인합니다. (버그 #35799038)

InnoDB: FTS 인덱스가 있는 테이블에서 테이블스페이스가 삭제될 때 해당 FTS 테이블도 삭제됩니다. 이 테이블을 지우는 작업을 수행할 때, 코드가 FTS 인덱스가 테이블 메타데이터에 존재할 경우 FTS 테이블도 반드시 존재해야 한다고 잘못 가정했습니다. (버그 #35343458)

InnoDB: FusionIO의 다른 섹터 크기 지원 여부를 확인할 때, 시스템에서 innodb_flush_methodO_DIRECT 또는 O_DIRECT_NO_FSYNC로 설정한 경우, 초기화되지 않은 버퍼가 임시 파일에 기록되었습니다. (버그 #115229, 버그 #36705034)

InnoDB: 보조 인덱스를 포함한 테이블 재구성 작업이 MySQL 8.0.26에 비해 InnoDB 임시 파일에 대해 더 많은 파일 I/O를 요구하여 쿼리 성능이 저하되었습니다. (버그 #114465, 버그 #36444172)

InnoDB: 병렬 인덱스 빌더로 인덱스를 추가할 때 Alter_stage 클래스의 문제로 인해 퍼포먼스 스키마가 활성화된 상태에서 훨씬 더 느리게 작동했습니다. (버그 #113505, 버그 #36163502)

InnoDB: 최근 옵티마이저 변경 사항을 더 잘 반영하도록 innodb.parallel_read_kill 관련 유닛 테스트가 수정되었으며, innodb.ddl_kill 유닛 테스트와 해당 매크로 사용이 수정되었습니다.
이 수정에 기여해주신 Percona의 Dmitry Lenev와 팀에 감사드립니다. (버그 #113002, 버그 #115416, 버그 #35992036, 버그 #36764973)
참고: 관련 항목으로는 버그 #112767이 있습니다.

파티셔닝: ALTER TABLE이 파티셔닝된 테이블에서 항상 올바르게 작동하지 않았습니다. (버그 #36677952)

그룹 복제: 특정 조건에서 기본 호스트에서 잠시 네트워크 비활성 상태가 발생한 후 모든 보조 노드가 예기치 않게 종료되었습니다. (버그 #35642087)
참고: 관련 항목으로는 버그 #32673639, 버그 #34565855가 있습니다.

그룹 복제: 스레드가 보고한 메모리 총합이 다른 스레드에 의해 해제된 memory/sql/Gtid_set::Interval_chunk 메모리를 포함하지 않아, 그룹 복제 스레드 thread/group_rpl/THD_applier_module_receiver가 리소스를 점점 더 많이 소모하게 되었습니다.
보고된 전역 메모리는 performance_schema.memory_summary_global_by_event_name에서 이 문제의 영향을 받지 않았습니다. (버그 #34819861)

그룹 복제: xcom\network\xcom_network_provider_native_lib.cc에서 잠재적인 메모리 누수가 제거되었습니다. (버그 #115162, 버그 #36673883)

서버가 스레드 풀과 감사 로그 플러그인을 함께 실행할 때 연결을 항상 올바르게 처리하지 않았습니다. (버그 #37039422)

Debian 기반 시스템에 대한 패키지가 이제 WITH_ZLIB=system으로 빌드되며, 디버그 빌드를 위한 MYSQL_MAINTAINER_MODE가 비활성화됩니다. (버그 #37038213)

상용 빌드에 번들된 Kerberos 라이브러리가 1.21.3 버전으로 업데이트되었습니다. 자세한 내용은 Kerberos 5 1.21.x 릴리스 노트를 참조하십시오. (버그 #37034600)

regexp::Regexp_facade::~Regexp_facade()에서 heap-use-after-free 경고가 제거되었습니다. (버그 #36867806)

mysqldump가 테이블스페이스를 덤프하는 동안 일부 SQL 문을 올바르게 이스케이프하지 않았습니다. 또한, 덤프는 이제 LOGFILE GROUP, TABLESPACE, ENGINE과 같은 식별자를 백틱으로 감쌉니다. (버그 #36816986)

sql/sql_executor.cc에서 발생한 이전 문제의 수정 사항이 const_item() 대신 const_for_execution()을 검사했습니다. (버그 #36804785)
참고: 이 문제는 버그 #34951115의 회귀 문제입니다.

IndexRangeScanIterator를 사용하여 인덱스 범위 스캔을 실행할 때, 리팩토링 중 IndexRangeScanIterator::m_expected_rows에 사용된 데이터 유형이 더블에서 불리언으로 변경되었기 때문에 레코드 버퍼가 설정되지 않았습니다. 이 의도치 않은 변경 사항이 복구되었습니다.
추가로, 인덱스 범위 스캔에서 레코드 버퍼가 활성화되었을 때, 다중 값 인덱스를 사용한 커버링 스캔에 문제가 발생했습니다. (이 문제는 인덱스 병합 스캔의 일부로 다중 값 인덱스가 사용될 때만 발생하며, 인덱스 병합 스캔은 커버링 인덱스 스캔을 강제합니다.) 문제의 원인은 Field_typed_array::key_cmp() 구현이 인덱스 표현식의 생성된 열 값을 필요로 하지만, 다중 값 인덱스에서는 이 열이 존재하지 않아 스토리지 엔진이 커버링 스캔의 레코드 버퍼를 채울 때 끝 범위 조건을 안전하게 평가할 수 없다는 데 있었습니다. 이를 해결하기 위해, 이제 다중 값 인덱스가 커버링 인덱스 범위 스캔에 사용될 때 레코드 버퍼를 비활성화했습니다. (버그 #36775910)
참고: 관련 항목으로는 버그 #36341532가 있습니다.

특정 트리거와 저장 프로시저가 올바르게 처리되지 않았습니다. (버그 #36775910)

외부 테이블을 참조할 때 발생한 일부 오류가 올바르게 처리되지 않았습니다. (버그 #36758378)

Debian에서 libmysqlclient.a의 스트리핑을 중지하여 LTO 빌드 호환성을 높였습니다. (버그 #36737581)

내부 함수 my_convert_internal()이 의도된 값 대신 포인터를 반환하는 경우가 있었습니다. (버그 #36684463)
참고: 이 문제는 버그 #36479091의 회귀 문제입니다.

서버 구성 요소에서 메모리 문제가 제거되었습니다. (버그 #36600205)

mysql 클라이언트에서 메모리 누수가 수정되었습니다. (버그 #36600203)

AES_ENCRYPT() 함수가 항상 유효한 결과를 반환하지 않았습니다. (버그 #36593265)

매우 많은 행과 다수의 테이블을 포함하는 조인이 올바르게 처리되지 않은 경우가 있었습니다. (버그 #36562979)

동일한 트랜잭션 내에서 FULLTEXT 인덱스를 추가한 상태로 DROP INDEX를 실행하면 서버가 예기치 않게 종료되는 경우가 있었습니다. (버그 #36559642)

일부 옵티마이저 힌트 조합이 올바르게 작동하지 않았습니다. (버그 #36492114)

이전 문제에 대한 수정 이후, GROUP BY의 일부이며 선택 목록에 없는 const 항목이 필드 목록에 숨겨진 항목으로 추가되지 않았습니다. 이로 인해 ROLLUP 작업과 관련된 표현식 대체를 검사하는 과정에서 문제가 발생했습니다. 이를 해결하기 위해, 필드 목록에서 찾을 수 없는 항목이 const 항목인지 확인하고, 그렇다면 동일한 항목을 대체로 사용합니다. (버그 #36444257)
참고: 이 문제는 버그 #34951115의 회귀 문제입니다.

gen_rnd_pan()mask_ssn() 데이터 마스킹 함수 테스트 중 발견된 어설션이 제거되었습니다. (버그 #36397869, 버그 #36398272)
참고: 관련 항목으로는 버그 #36398221이 있습니다.

FTS 비교와 관련된 문제가 수정되었습니다.
이 수정에 기여해주신 Alibaba의 Shaohua Wang과 팀에 감사드립니다. (버그 #36210202)

RelWithDebInfo 빌드는 이제 “-g1” 플래그 없이 컴파일되며, 그 결과 더 많은 디버깅 정보와 파일 크기가 증가합니다. (버그 #36111629)
참고: 관련 항목으로는 버그 #33664929가 있습니다.

--skip-grant-tables 옵션으로 서버를 실행할 때 발생할 수 있는 잠재적인 오작동이 수정되었습니다. (버그 #36043213)

외부 쿼리 블록의 테이블 열을 참조하는 조인의 ON 조건과 관련된 이전 문제 수정에서 회귀 문제가 발생했습니다. (버그 #35854686)
참고: 이 문제는 버그 #96946, 버그 #30350696의 회귀 문제입니다.

외래 키가 있는 테이블을 생성할 때 드문 경우로 CREATE TABLE 문이 올바르게 처리되지 않았습니다. (버그 #35553557)

SHOW INDEX 및 생성된 열과 관련된 문제가 수정되었습니다. (버그 #35497623)

일부 경우에 준비된 문(statement) 내의 테이블 DDL이 올바르게 처리되지 않았습니다. (버그 #35221658)

SLES 15 대상 플랫폼이 openSUSE 15.5에서 15.6으로 변경되었으며, 이에 따라 GCC 12 대신 GCC 13을 사용하고 시스템의 OpenSSL 3.x를 기반으로 빌드됩니다. (버그 #115535, 버그 #36934913)

Debian 패키지 설명에서 오타가 수정되었습니다.
이 수정에 기여해주신 Henning Pöttker에게 감사드립니다. (버그 #115363, 버그 #36749142)

prefer_ordering_index=off 설정에서 참조 키가 없는 쿼리가 원래 테이블을 스캔하고 정렬하는 것으로 되돌아갔습니다. 이는 정렬을 피할 수 있었던 경우에도 발생했습니다.
이 수정에 기여해주신 Daniel Nichter에게 감사드립니다. (버그 #113699, 버그 #36213938)

퍼포먼스 스키마 data_locksdata_lock_waits 테이블이 다시 설계되어, 이제 쿼리 시 트랜잭션이나 잠금 시스템에 대한 전역 뮤텍스를 독점적으로 요구하지 않습니다. 이제 잠금을 보유하는 해시 테이블의 버킷을 반복 처리하며, 이전에는 트랜잭션을 반복 처리했습니다. 이 변경 사항은 속도와 메모리 측면에서 반복 로직의 복잡성을 개선하여 이러한 쿼리가 시스템에 미치는 영향을 줄여줍니다.
쿼리 결과는 두 버킷을 방문하는 동안 트랜잭션이 커밋되거나 시작되거나 보유한 잠금 세트가 변경된 경우 불완전한 트랜잭션 잠금 목록을 표시할 수 있습니다. 이는 이전 방식과 다르며, 이전에는 개별 트랜잭션이 보유한 잠금의 일관된 스냅샷을 항상 보여주었지만, 두 개의 다른 트랜잭션은 서로 다른 시점에 표시될 수 있었습니다. 새 방식은 대기 중인 잠금과 충돌하는 잠금을 일관되게 보여주며, 이는 항상 같은 버킷에 있기 때문입니다. 반면, 이전 방식은 충돌하는 잠금이 다른 트랜잭션에 속해 있을 경우 이를 놓칠 수 있었습니다. 이전 방식은 보고된 트랜잭션이 보유한 다른 잠금은 모두 보여주었지만, 충돌하는 다른 트랜잭션의 잠금은 놓칠 수 있었습니다. (버그 #112035, 버그 #113761, 버그 #36302624, 버그 #36015586, 버그 #36690035, 버그 #35712638, 버그 #36891888)

다중 값 인덱스를 사용한 > 또는 < 비교를 포함한 쿼리가 동일한 인덱스를 사용한 = 비교보다 훨씬 느리게 실행되었습니다. (버그 #104897, 버그 #33334911)

부하가 심한 인스턴스에서 SELECT * FROM sys.innodb_lock_waits;를 실행하면 서버 성능에 영향을 미쳤습니다.
이번 릴리스에서는 SELECT * FROM sys.innodb_lock_waits;가 각 대기마다 두 개의 잠금만 가져오도록 변경되어 모든 잠금을 두 번 스캔하지 않습니다.
이 수정의 일환으로 DATA_LOCKSDATA_LOCK_WAITS에 기본 키가 추가되었습니다. (버그 #100537, 버그 #31763497)

Leave a Comment



이 문서 공유

8.0.40 변경 사항 (2024-10-15 GA)

링크 복사

CONTENTS