MySQL 8.0.16 릴리즈 노트 2019-04-25 #2

MySQL

[이전글] MySQL 8.0.16 릴리즈 노트 #1

MySQL 8.0.16 릴리즈 노트 #2 내용입니다.

기능 추가 및 변경 (Functionality Added or Changed)

  • InnoDB: TempTable 스토리지 엔진이 사용하는 메모리 양이 temptable_max_ram 변수에 의해 정의된 한도를 초과하면 TempTable 스토리지 엔진은 메모리 매핑된 임시 파일로 내부 메모리 임시 테이블을 위한 공간을 할당합니다. 이제 이 동작은 temptable_use_mmap 변수에 의해 제어되며, TempTable 스토리지 엔진이 디스크 내부 임시 테이블 대신 InnoDB를 사용하도록 비활성화할 수 있습니다. 자세한 내용은 Internal Temporary Table Use in MySQL 을 참조하십시오. (Bug #28944457)
  • InnoDB: 로그 잘라내기 실행 취소와 관련된 백그라운드 작업을 모니터링하기 위해 undopurge 하위 시스템 카운터가 추가되었습니다. 카운터 이름 및 설명을 보려면 INFORMATION_SCHEMA.INNODB_METRICS 테이블을 쿼리하십시오.SELECT NAME, SUBSYSTEM, COMMENT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME LIKE ‘%truncate%’;카운터를 활성화하고 카운터 데이터를 쿼리하는 방법에 대한 자세한 내용은 InnoDB INFORMATION_SCHEMA Metrics Table 을 참조하십시오. (Bug #28813526)
  • InnoDB:innodb_spin_wait_pause_multiplier 변수는 스레드가 뮤텍스 또는 rw-lock 획득을 대기할 때 발생하는 스핀 잠금 폴링 지연 기간을 보다 효과적으로 제어합니다. 이제 지연은 프로세서 아키텍처에 따라 PAUSE 명령 지속 시간의 차이를 고려하여 더 미세하게 조정할 수 있습니다. 자세한 내용은 Configuring Spin Lock Polling 을 참조하십시오.
  • InnoDB: 수정된 페이지의 추적을 지원하기 위해 내부 서비스 인터페이스가 추가되었습니다.
  • InnoDB: 이제 InnoDB data-at-rest 암호화 기능이 mysql 시스템 테이블스페이스 암호화를 지원합니다. mysql 시스템 테이블스페이스에는 mysql 시스템 데이터베이스와 MySQL 데이터 사전 테이블이 포함됩니다.
  • 이전에 런타임에 평가되었던 일부 ‘InnoDB’ 메모리 할당 함수는 이제 컴파일 시 평가되므로 성능이 향상됩니다. (Bug #29370811, Bug #94380)
  • IN 하위 쿼리에 대한 세미조인(semijoin) 최적화는 EXIST 하위 쿼리와 함께 작동하도록 확장되었습니다. 이제 이러한 세미조인(semijoin) 전략은 최초 일치, 구체화, 중복 제거 및 느슨한 인덱스 스캔을 포함하여 IN 하위 쿼리와 동일한 세미조인(semijoin) 전략으로 처리할 수 있습니다.또한, Optimizer는 하위 쿼리에 부착된 WHERE 조건의 3가지 상관 등식 술어를 장식하여, 이러한 술어가 IN 하위 쿼리의 식과 유사하게 처리될 수 있도록 합니다. 이제 IN 하위 쿼리뿐만 아니라 EXISTS 하위 쿼리에 대해서도 장식 관계가 수행됩니다. 세미조인(semijoin) 연산으로 변환되는 IN 하위 쿼리에 적용되는 모든 힌트 및 최적화 스위치는 변환된 EXIST 하위 쿼리에도 적용됩니다. 이러한 IN 하위 쿼리의 최적화에 대한 모든 제한은 변환된 EXIST 하위 쿼리에 적용되므로 예를 들어 집계된 EXIST 하위 쿼리는 변환할 수 없습니다.자세한 정보는 Optimizing IN and EXISTS Subquery Predicates with Semijoin Transformations 을 참조하십시오. (Bug #28805105, Bug #28857990)
  • SQL 표준 및 기타 RDBMS와의 일관성을 위해 테이블 별칭은 이제 단일 테이블 및 다중 테이블 DELETE 문에서 지원됩니다. (Bug #27455809)
  • 그룹 복제용 그룹 통신 엔진(XCOM, Paxos 변형)에는 합의 프로토콜의 일부로 그룹 구성원 간에 교환되는 메시지(및 메타데이터)에 대한 캐시가 포함되어 있습니다. 다른 기능 중에서 메시지 캐시는 다른 그룹 구성원과 통신할 수 없는 기간이 지난 후 그룹으로 돌아온 구성원의 복구에 사용됩니다.이전에는 메시지 캐시의 크기 제한이 1GB 메모리로 고정되었고 캐시의 최대 메시지 수도 고정되었습니다. 그러나 group_replication_member_expel_timeout 시스템 변수(MySQL 8.0.13에 도입됨)는 구성원이 퇴출되지 않고 최대 1시간 동안 그룹으로 돌아올 수 있도록 설정할 수 있으므로 캐시 크기에 대한 고정 1GB 제한이 있으면 이러한 노드가 통신을 다시 설정할 때 누락된 메시지를 복구할 수 없습니다. 이러한 이유로 MySQL 8.0.16부터는 XCom의 메시지 캐시에 포함할 수 있는 메시지 수에 대한 고정 제한이 없으며 사용할 수 있는 메모리 양에 대해 설정된 제한으로만 제한됩니다. 캐시 크기 제한은 이전 MySQL Server 버전에서 사용된 것과 같이 기본 및 최소 설정이 1GB인 새로운 group_replication_message_cache_size 시스템 변수를 사용하여 설정할 수 있습니다. 캐시 크기 제한에 도달하면 XCom은 결정되어 전달된 가장 오래된 항목을 제거합니다. 캐시 크기 제한은 런타임에 동적으로 늘리거나 줄일 수 있습니다. 캐시 크기 제한을 줄이면 XCom은 현재 크기가 제한보다 작을 때까지 결정되어 전달된 가장 오래된 항목을 제거합니다. 그룹 복제의 GCS(그룹 통신 시스템)는 현재 연결할 수 없는 구성원의 복구에 필요한 메시지가 메시지 캐시에서 제거되면 경고 메시지를 통해 사용자에게 경고합니다. (Bug #26482507)
  • 이제 그룹 복제 그룹 구성원 간에 발송된 대용량 메시지는 사용자 정의 임계값 크기를 초과할 때 여러 메시지로 분할할 수 있습니다. 비정상적으로 큰 메시지를 보내면 일부 그룹 구성원이 실패한 것으로 보고되고 그룹에서 제외될 수 있습니다. 이는 그룹 통신 엔진(XCOM, Paxos 변형)에서 사용하는 단일 스레드가 메시지를 처리하는 데 너무 오랜 시간이 걸리기 때문에 일부 그룹 구성원이 수신기를 실패한 것으로 보고할 수 있기 때문입니다.새 시스템 변수 group_replication_communication_max_message_size를 사용하여 그룹 복제 통신의 최대 메시지 크기를 지정할 수 있습니다. 이 크기보다 큰 메시지는 수신인이 별도로 발송하고 재구성하는 조각으로 자동 분할됩니다. 모든 그룹 구성원에 의해 메시지의 모든 조각이 수신되고 재구성되면 단편화된 메시지에 대한 메시지 배달은 완료된 것으로 간주됩니다. 조각화는 기본적으로 적용되며 시스템 변수에 0 값을 지정하여 끌 수 있습니다.이전 MySQL Server 릴리스는 메시지 조각화를 지원하지 않기 때문에 이전 버전과의 호환성을 보장하기 위해 그룹 복제는 이제 그룹에 대한 통신 프로토콜 개념을 갖췄습니다. 통신 프로토콜 버전이 그룹에서 지원하려는 가장 오래된 MySQL 서버 버전을 수용하도록 설정되어 있습니다. 버전 X의 MySQL 서버는 그룹의 통신 프로토콜 버전이 X보다 작거나 같은 경우에만 복제 그룹의 ONLINE 상태에 가입하여 연결할 수 있습니다.그룹이 지원하는 가장 오래된 MySQL Server 버전을 반환하는 새로운 group_replication_get_communication_protocol() 함수를 사용하여 그룹에서 사용 중인 통신 프로토콜을 검사할 수 있습니다. MySQL 5.7.14 버전에서는 메시지 압축을 허용하고 MySQL 8.0.16 버전에서는 메시지 조각화를 허용합니다. 새 구성원은 복제 그룹에 가입하면 그룹의 기존 구성원에 의해 공지되는 통신 프로토콜 버전을 확인합니다. 가입 구성원이 해당 버전을 지원할 경우, 구성원이 추가 통신 기능을 지원하더라도 그룹에 가입하고 그룹이 공지한 통신 프로토콜을 사용합니다. 가입 구성원이 통신 프로토콜 버전을 지원하지 않으면 그룹에서 제외됩니다.이전 릴리스의 구성원이 가입할 수 있도록 그룹의 통신 프로토콜 버전을 변경해야 하는 경우 새 group_replication_set_communication_protocol() 기능을 사용하여 허용할 가장 오래된 멤버의 MySQL Server 버전을 지정합니다. 따라서 가능한 경우 그룹이 호환되는 통신 프로토콜 버전으로 폴백됩니다. 복제 그룹의 모든 구성원을 새 MySQL Server 릴리스로 업그레이드하는 경우 그룹의 통신 프로토콜 버전이 일치하도록 자동으로 업그레이드되지 않습니다. 이전 릴리스에서 더 이상 구성원을 지원할 필요가 없는 경우 group_replication_set_communication_protocol() 기능을 사용하여 구성원을 업그레이드한 새 MySQL Server 버전으로 통신 프로토콜 버전을 설정하십시오. (Bug #26438884, Bug #23240361, Bug #28474580, Bug #91830, Bug #28642504, Bug #26941977, Bug #29240931)
  • 그룹 복제의 경우 새 시스템 변수 group_replication_autorejoin_tries를 사용하여 구성원이 제거되거나 group_replication_unreachable_majority_timeout 설정에 도달하기 전에 대부분의 그룹에 연결할 수 없는 경우 구성원이 그룹에 자동으로 가입하는 시도 횟수를 지정할 수 있습니다. 기본 설정인 0은 구성원이 재가입을 시도하지 않고 group_replication_exit_state_action 시스템 변수에 의해 지정된 작업으로 진행됨을 의미합니다.오래된 읽기 가능성을 허용하고 특히 일시적인 네트워크 문제로 인해 멤버가 제외되는 경우가 많은 경우 수동 개입을 최소화하려면 자동 다시 가입을 활성화하십시오. 시도 횟수를 지정하면 구성원의 제외 또는 도달할 수 없는 최대 시간 제한에 도달하면 멤버는 현재 플러그인 옵션 값을 사용하여 다시 가입을 시도한 다음 지정된 횟수까지 자동 다시 가입 시도를 계속합니다. 자동 재가입 시도가 실패한 후, 구성원은 다음 시도 전에 5분 동안 기다립니다. 자동 다시 가입 절차 동안 구성원은 슈퍼 읽기 전용 모드로 유지되며 복제 그룹의 보기에 ‘ERROR’ 상태를 표시합니다. 구성원은 STOP GROUP_REPLICATION 문을 사용하거나 서버를 종료하여 언제든지 수동으로 중지할 수 있습니다. 구성원이 다시 가입하거나 중지되지 않고 지정된 시도 횟수가 모두 소진되면, 구성원은 group_replication_exit_state_action 시스템 변수에 의해 지정된 작업을 진행합니다. 이 작업은 슈퍼 읽기 전용 모드로 유지되거나 종료될 수 있습니다. (Bug #25673350, Bug #84784, Bug #28732174)
  • 상수 값이 범위를 벗어나거나 열 유형과 관련하여 잘못된 유형의 상수와 열 값을 비교하는 WHERE 조건은 이제 실행이 아닌 최적화 중에 처리됩니다. 예를 들어 유형이 TINYINT UNSIGNED인 열 c가 있는 테이블 t를 지정하면 쿼리 SELECT * FROM t WHERE c < 256의 조건은 이 유형의 열에 대해 256이 범위를 벗어났기 때문에 SELECT * FROM t WHERE TRUE로 접을 수 있습니다. NULL 열과의 비교도 최적화할 수 있습니다. c 열이 NULL일 경우 동일한 쿼리를 SELECT * FROM T WHERE c IS NOT NULL로 최적화할 수 있습니다.이렇게 다룰 수 있는 비교는 >, >=, <, <=, =, <>/!=, 및 <=>. (BETWEENIN은 현재 지원되지 않습니다.) 범위 및 유형을 기준으로 비교를 접을 수 있는 유형에는 정수, 부동 소수점 및 고정 소수점 숫자 유형이 있습니다. BIT은 이 최적화에서 지원되지 않으며 날짜 및 시간 유형의 열도 지원되지 않습니다.자세한 정보는 Constant-Folding Optimization을 참조하십시오. (Bug #90100, Bug #25484743, Bug #29048682, Bug #27703371)참조 : 참조 사항 : Bug #28172538, Bug #29699347.
  • 생성된 반복기 트리를 인쇄하는 “A” 출력에 대한 실험 트리 형식을 추가했으며, 이는 사용자가 실제 실행이 어떻게 설정되었는지 이해하는 데 도움이 됩니다. EXPLAIN FORMAT=TREE는 현재 프로덕션에서 지원되지 않으며 구문과 출력은 MySQL의 후속 버전에서 변경될 수 있습니다.
  • MySQL 서버(binlog_encryption=ON)에서 이진 로그 및 릴레이 로그 암호화를 사용하는 경우 ALTER INSTANCE ROTATE BINLOG MASTER KEY를 발행하여 서버가 실행되는 동안 언제든지 이진 로그 마스터 키를 회전할 수 있습니다. 조직의 보안 정책을 준수하고 현재 또는 이전 이진 로그 마스터 키가 손상된 것으로 의심되는 경우에도 정기적으로 이 작업을 수행할 수 있습니다.이진 로그 마스터 키를 회전할 때 새 마스터 키는 키가 다시 변경될 때까지 새 이진 로그 및 릴레이 로그 파일 및 후속 파일의 파일 암호를 암호화하는 데 사용됩니다. 서버의 기존 암호화된 이진 로그 파일과 릴레이 로그 파일의 파일 암호도 최신 파일부터 시작하여 새 이진 로그 마스터 키를 사용하여 다시 암호화됩니다. 암호화되지 않은 파일은 모두 건너뜁니다. 마지막으로 보존된 이진 로그 파일 또는 릴레이 로그 파일에 더 이상 적용되지 않는 모든 이진 로그 암호화 키가 키 링에서 정리됩니다.
  • 이제 암호화 기본값을 정의하고 적용하여 테이블 암호화를 전체적으로 관리할 수 있습니다. default_table_encryption 변수는 새로 생성된 스키마 및 일반 테이블스페이스에 대한 암호화 기본값을 정의합니다. 스키마를 만들 때 DEFAULT ENCRYPTION절을 사용하여 스키마의 암호화 기본값을 정의할 수도 있습니다. 기본적으로 테이블은 테이블이 작성된 스키마 또는 일반 테이블스페이스의 암호화를 상속합니다.암호화 기본값은 table_encryption_privilege_check 변수를 활성화하여 적용됩니다. 권한 검사는 default_table_encryption 설정과 다른 암호화 설정으로 스키마 또는 일반 테이블스페이스를 만들거나 변경할 때 또는 기본 스키마 암호화와 다른 암호화 설정으로 테이블을 만들거나 변경할 때 발생합니다. TABLE_ENCRYPTION_ADMIN 권한은 table_encryption_privilege_check가 활성화된 경우 기본 암호화 설정을 재정의할 수 있습니다.자세한 정보는 Defining an Encryption Default for Schemas and General Tablespaces 을 참조하십시오.
  • 시스템 변수 group_replication_exit_state_action는 서버 인스턴스가 의도하지 않게 그룹을 이탈하거나, 예를 들어 Applier 오류가 발생한 후 또는 과반수를 상실한 경우 또는 그룹의 다른 구성원이 의심 시간 초과로 인해 해당 인스턴스를 내보낼 때 그룹 복제의 동작을 지정합니다. 시스템 변수가 도입되기 전에 서버의 응답은 시스템 변수 super_read_only를 ON으로 설정하여 MySQL을 슈퍼 읽기 전용 모드로 전환하는 것이었습니다. group_replication_exit_state_action는 서버가 자체적으로 종료되는 대체 옵션을 제공하므로 오래된 읽기 가능성을 최소화하고 서버가 사전 예방적으로 모니터링할 필요가 없습니다.실패에 대비합니다. MySQL 5.7.24 및 MySQL 8.0.12에 시스템 변수가 도입되었을 때 기존 동작과의 호환성을 위해 5.7에서는 기본값이 READ_ONLY로, 8.0에서는 ABORT_SERVER로 설정되었습니다. 사용자 피드백에 따라 MySQL 8.0.16에서 기본값이 READ_ONLY로 변경되었습니다.
  • 분할된 테이블에 삽입, 삭제 또는 업데이트가 이루어지면 이진 로그는 이제 파티션과 행 이벤트가 발생한 하위 파티션(있는 경우)에 대한 정보를 기록합니다. 관련된 테이블이 동일하더라도 다른 파티션 또는 하위 파티션에서 발생하는 수정에 대해 새 행 이벤트가 생성됩니다. 따라서 트랜잭션에 세 개의 파티션 또는 하위 파티션이 포함된 경우 세 개의 행 이벤트가 생성됩니다. 업데이트 이벤트의 경우 파티션 정보는 “전(before)” 이미지와 “후(after)” 이미지 모두에 대해 기록됩니다. mysqlbinlog를 사용하여 이진 로그를 볼 때 -v 또는 --verbose 옵션을 지정하면 파티션 정보가 표시됩니다. 파티션 정보는 행 기반 로깅(binlog_format=ROW)을 사용 중인 경우에만 기록됩니다.