
MySQL 5.7.33 릴리즈 노트 입니다.
- 최적화 노트 (Optimizer Notes)
- 보안 노트 (Security Notes)
- 기능 추가 및 변경 (Functionality Added or Changed)
- 버그 수정 (Bugs Fixed)
최적화 노트 (Optimizer Notes)
- MySQL은
LIMIT
절이 있는ORDER BY
또는GROUP BY
쿼리에 대해 순서가 지정된 인덱스를 사용하려고 하며, 이렇게 하면 실행 속도가 빨라진다고 판단될 때마다 최적화 프로그램에서 선택한 다른 항목을 무시합니다. 이 결정을 위한 알고리즘은 데이터 분포 및 기타 조건에 대한 특정 가정을 하기 때문에 항상 정확하지는 않을 수 있으며, 경우에 따라 이러한 쿼리에 대해 다른 최적화를 선택하면 더 나은 성능을 제공할 수 있습니다. 이러한 상황을 처리하려면optimizer_switch
시스템 변수의prefer_ordering_index
플래그를off
로 설정하여 이 최적화를 비활성화할 수 있습니다. 이 플래그와 그 사용 예에 대한 자세한 내용은 Switchable Optimizations 및 LIMIT Query Optimization를 참조하십시오.Jeremy Cole님께 감사합니다. (Bug #31686878)참조: 참고 사항: Bug #97001, Bug #30348211.
보안 노트 (Security Notes)
- MySQL Server의 연결된 OpenSSL 라이브러리가 버전 1.1.1i로 업데이트되었습니다. 새 OpenSSL 버전에서 해결된 문제는 https://www.openssl.org/news/cl111.txt 및 https://www.openssl.org/news/vulnerabilities.html에서 설명합니다. (Bug #32260610)
기능 추가 및 변경 (Functionality Added or Changed)
--all-databases
옵션으로 호출되면 mysql 데이터베이스가 먼저 덤프되므로 덤프 파일이 다시 로드될 때 다른 개체의DEFINER
절에 이름이 지정된 계정이 이미 생성되어 있습니다. (Bug #32141046)
버그 수정 (Bugs Fixed)
- InnoDB: 전체 텍스트(full-text) 검색 동기화 스레드가 인덱스 캐시에서 이전에 해제된 단어를 읽으려고 했습니다. (Bug #31310404)
- InnoDB:
numa_all_nodes_ptr
에 대한 호출이numa_get_mems_allowed()
함수로 대체되었습니다. Daniel Black님에게 감사합니다.(Bug #24693086, Bug #83044) - Replication: 시스템 변수
transaction_write_set_extraction=XXHASH64
가 MySQL 8.0의 기본값이며 그룹 복제의 요구 사항으로 설정된 경우 트랜잭션에 대한 쓰기 모음에는 이전에는 상한 크기 제한이 없었습니다. 이제 표준 소스 간 복제의 경우binlog_transaction_dependency_history_size
로 지정된 쓰기 집합에 대한 숫자 제한이 적용되며, 그 이후에는 쓰기 세트 정보가 삭제되지만 트랜잭션은 계속 실행됩니다.그런 다음 종속성 계산에 쓰기 집합 정보를 사용할 수 없으므로 트랜잭션은 비동시성으로 표시되고 복제본에서 순차적으로 처리됩니다. 그룹 복제의 경우 모든 그룹 구성원에 대한 충돌 탐지 및 인증을 위해 트랜잭션에서 쓰기를 추출하는 프로세스가 필요하므로 트랜잭션이 완료될 경우 쓰기 집합 정보를 삭제할 수 없습니다. 숫자 한계 대신group_replication_transaction_size_limit
로 설정된 바이트 한계가 적용되며 한계를 초과하면 트랜잭션이 실행되지 않습니다. (Bug #32019842) - Replication: 반동기 원본 서버에서 복제하는 복제본 수가 증가함에 따라, 잠금 경합으로 인해 성능이 저하될 수 있습니다. 가능한 경우 공유 잠금을 사용하고 불필요한 잠금 획득을 방지하며 콜백을 제한하도록 플러그인에 사용되는 잠금 메커니즘이 변경되었습니다. 다음 시스템 변수를 활성화하여 새 동작을 구현할 수 있습니다.
replication_sender_observe_commit_only=1
은 콜백을 제한합니다.replication_optimize_for_static_plugin_config=1
는 공유 잠금을 추가하고 불필요한 잠금 획득을 방지합니다. 플러그인을 제거하려면 이 시스템 변수를 사용하지 않도록 설정해야 합니다.
- Replication: 커밋 순서가 보존되는 다중 스레드 복제본에서 작업자 스레드는 자체 트랜잭션을 커밋하기 전에 릴레이 로그의 앞부분에 있는 모든 트랜잭션이 커밋될 때까지 기다려야 합니다. 커밋 순서에서 트랜잭션을 커밋하기 위해 대기 중인 스레드가 커밋 순서에서 트랜잭션에 필요한 행을 잠갔기 때문에 교착 상태가 발생하는 경우, 교착 감지 알고리즘은 대기 스레드가 트랜잭션을 롤백하도록 신호를 보냅니다. 이전에는 트랜잭션 재시도를 사용할 수 없는 경우 트랜잭션을 롤백한 작업자 스레드가 커밋 순서로 다른 작업자 스레드에 신호를 보내지 않고 즉시 종료되어 복제가 중지될 수 있습니다. 이 상황에서 작업자 스레드는 이제 롤백 함수를 호출할 차례를 기다립니다. 즉, 다른 스레드에 올바르게 신호를 보냅니다. (Bug #26883680, Bug #87796)
- Replication: GTID는 서명된 64비트 정수(2 – 1의 거듭제곱)에 대한 음수가 아닌 값 수까지의 서버 인스턴스에서만 사용할 수 있습니다.
gtid_purged
값을 이 제한에 근접하는 숫자로 설정하면 후속 커밋으로 인해 서버의 GTID가 부족해지고binlog_error_action
에서 지정한 작업을 수행할 수 있습니다. MySQL 8.0.23부터는 서버 인스턴스가 제한에 가까워지면 주의 메시지가 표시됩니다. (Bug #26035544) - Microsoft Windows: Windows에서 MySQL 서버를 서비스로 실행하면 공유 메모리 연결이 실패합니다. (Bug #32009251)
- MRR 반복자는 일반적으로
impossible_null_ref()
를 확인하여 ‘NULL’ 키를 걸러내지만, 결합 조건이 ‘IS NULL’ 술어를 포함하거나 ‘NULL’-safe equality 연산자≪=>
를 사용할 경우, 옵티마이저는 결합 조건이 결합 조건의 일부로 술어 용어를 사용하는지 여부를 확인하고 내부 플래그HA_MRR_NO_NULL_ENDPOINTS
를 설정하지 않아야 합니다. 이제 비트마스크를 사용하여 키의 각 열이 ‘NULL’을 거부하는지 여부를 확인합니다. 이 경우 추가 검사 없이HA_MRR_NO_NULL_ENDPOINTS
를 설정할 수 있습니다. (Bug #32774281) - 서버가
WHERE_CODENTION
최적화의 모든 경우를 올바르게 처리하지 못했습니다.(Bug #31905199) - 기본 키 확장을 지원하는 엔진의 경우, 총 키 길이가 ‘MAX_KEY_LENGH’를 초과하거나 키 부품 수가 ‘MAX_REF_PARTS’를 초과할 경우, 이러한 제한에 맞지 않는 기본 키의 주요 부분은 보조 키에 추가되지 않고 무조건 보조 키의 일부로 표시되었습니다.이로 인해 보조 키가 커버링 인덱스로 처리되는 상황이 발생했으며, 이는 잘못된 액세스 방법이 선택되었음을 의미했습니다.이 문제는 앞서 언급한 제한에 맞지 않는 기본 키의 주요 부분을 삭제하도록 보조 키에 추가하는 방법을 수정하여 해결되었습니다. (Bug #31617858)
- 일부 ‘INFORMATION_SCHEMA’ 테이블에 대한 권한이 잘못 확인되었습니다.(Bug #31553323)
- 경우에 따라 서버가 다중 중첩 하위 쿼리를 올바르게 처리하지 못했습니다. (Bug #31472704)
skip_name_resolve
시스템 변수가 활성화된 경우 특정 계정은 서버 시작에 실패할 수 있습니다. (Bug #31018510)- 통신 패킷에 잘못된 데이터가 포함된 경우 클라이언트 프로그램이 예기치 않게 종료될 수 있습니다. (Bug #30890850)
- 클라이언트 라이브러리의 버퍼 오버플로가 수정되었습니다. (Bug #30885987)
- mysql_config_mysql에서 암호 값의 ‘#’을(를) 주석 문자로 잘못 처리했습니다. (Bug #29861961, Bug #95597)