MySQL 5.7.33 릴리즈 노트 2021-01-18

MySQL

MySQL 5.7.33 릴리즈 노트 입니다.

최적화 노트 (Optimizer Notes)

  • MySQL은 LIMIT 절이 있는ORDER BY 또는 GROUP BY 쿼리에 대해 순서가 지정된 인덱스를 사용하려고 하며, 이렇게 하면 실행 속도가 빨라진다고 판단될 때마다 최적화 프로그램에서 선택한 다른 항목을 무시합니다. 이 결정을 위한 알고리즘은 데이터 분포 및 기타 조건에 대한 특정 가정을 하기 때문에 항상 정확하지는 않을 수 있으며, 경우에 따라 이러한 쿼리에 대해 다른 최적화를 선택하면 더 나은 성능을 제공할 수 있습니다. 이러한 상황을 처리하려면 optimizer_switch 시스템 변수의 prefer_ordering_index 플래그를 off로 설정하여 이 최적화를 비활성화할 수 있습니다. 이 플래그와 그 사용 예에 대한 자세한 내용은 Switchable OptimizationsLIMIT Query Optimization를 참조하십시오.Jeremy Cole님께 감사합니다. (Bug #31686878)참조: 참고 사항: Bug #97001, Bug #30348211.

보안 노트 (Security Notes)

기능 추가 및 변경 (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 는 공유 잠금을 추가하고 불필요한 잠금 획득을 방지합니다. 플러그인을 제거하려면 이 시스템 변수를 사용하지 않도록 설정해야 합니다.
    두 시스템 변수 모두 반동기 복제 플러그인을 설치하기 전이나 후에 사용할 수 있으며, 복제가 실행되는 동안 사용할 수 있습니다. 반동기 복제 원본 서버는 복제본과 동일한 잠금 메커니즘을 사용하므로, 이러한 시스템 변수를 사용 가능으로 설정하면 성능상의 이점도 얻을 수 있습니다. (Bug #30519928)
  • 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)