Loading...
MySQL 9.5 Reference Manual 9.5의 6.2.8 Connection Compression Control의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
클라이언트와 서버 사이의 트래픽에 대해 서버에 대한 커넥션은 압축을 사용하여 커넥션을 통해 전송되는 바이트 수를 줄일 수 있습니다. 기본적으로 커넥션은 압축되지 않지만, 서버와 클라이언트가 상호 허용되는 압축 알고리즘에 동의하는 경우 압축될 수 있습니다.
압축된 커넥션은 클라이언트 측에서 시작되지만, 양쪽에서 압축 및 압축 해제 작업을 수행하므로 클라이언트와 서버 양쪽 모두의 CPU 부하에 영향을 미칩니다. 압축을 활성화하면 성능이 저하되므로, 이점은 주로 네트워크 대역폭이 낮고, 네트워크 전송 시간이 압축 및 압축 해제 작업 비용을 지배하며, 결과 집합이 큰 경우에 발생합니다.
이 섹션은 사용 가능한 압축 제어 구성 파라미터와 압축 사용을 모니터링하기 위한 정보 소스에 대해 설명합니다. 이는 클래식 MySQL 프로토콜 커넥션에 적용됩니다.
압축 제어는 클라이언트 프로그램과 소스/레플리카 복제 또는 Group Replication에 참여하는 서버의 서버에 대한 커넥션에 적용됩니다. 압축 제어는 FEDERATED 테이블에 대한 커넥션에는 적용되지 않습니다. 다음 설명에서 “클라이언트 커넥션”은 컨텍스트가 특정 커넥션 유형을 가리키지 않는 한, 압축이 지원되는 모든 소스에서 시작되는 서버에 대한 커넥션을 의미하는 약칭입니다.
참고
MySQL 서버 인스턴스에 대한 X Protocol 커넥션은 압축을 지원하지만, X Protocol 커넥션에 대한 압축은 여기에서 설명하는 클래식 MySQL 프로토콜 커넥션에 대한 압축과 독립적으로 동작하며 별도로 제어됩니다. X Protocol 커넥션 압축에 대한 정보는 Section 22.5.5, “Connection Compression with X Plugin”을 참조하십시오.
커넥션 압축을 제어하기 위해 사용할 수 있는 구성 파라미터는 다음과 같습니다:
protocol_compression_algorithms 시스템 변수는 서버가 인커밍 커넥션에 대해 허용하는 압축 알고리즘을 설정합니다.
--compression-algorithms 및 --zstd-compression-level 커맨드라인 옵션은 다음 클라이언트 프로그램에 대해 허용되는 압축 알고리즘과 zstd 압축 레벨을 설정합니다: mysql,
mysqladmin,
mysqlbinlog,
mysqlcheck,
mysqldump,
mysqlimport,
mysqlshow,
mysqlslap,
및 mysqltest. MySQL Shell 또한 이러한 커맨드라인 옵션을 제공합니다.
mysql_options() 함수에 대한 MYSQL_OPT_COMPRESSION_ALGORITHMS 및
MYSQL_OPT_ZSTD_COMPRESSION_LEVEL 옵션은 MySQL C API를 사용하는 클라이언트 프로그램에 대해 허용되는 압축 알고리즘과 zstd 압축 레벨을 설정합니다.
CHANGE REPLICATION SOURCE TO 문에 대한 SOURCE_COMPRESSION_ALGORITHMS 및
SOURCE_ZSTD_COMPRESSION_LEVEL 옵션은 소스/레플리카 복제에 참여하는 레플리카 서버에 대해 허용되는 압축 알고리즘과 zstd 압축 레벨을 설정합니다.
group_replication_recovery_compression_algorithms 및
group_replication_recovery_zstd_compression_level 시스템 변수는 새로운 멤버가 그룹에 조인하여 donor에 접속할 때 Group Replication 복구 커넥션에 대해 허용되는 압축 알고리즘과 zstd 압축 레벨을 설정합니다.
압축 알고리즘을 지정할 수 있도록 하는 구성 파라미터는 문자열 값을 가지며, 다음 항목에서 (대소문자 구분 없음) 하나 이상의 압축 알고리즘 이름을 쉼표로 구분한 목록을 어떤 순서로든 받습니다:
zlib: zlib 압축 알고리즘을 사용하는 커넥션을 허용합니다.
zstd: zstd 압축 알고리즘을 사용하는 커넥션을 허용합니다.
uncompressed: 압축되지 않은 커넥션을 허용합니다.
참고
uncompressed는 설정될 수도 있고 설정되지 않을 수도 있는 알고리즘 이름이므로, MySQL을 구성하여 압축되지 않은 커넥션을 허용하지 않도록 설정하는 것이 가능합니다.
예:
protocol_compression_algorithms 시스템 변수를 설정합니다. 기본적으로 서버는 사용 가능한 모든 알고리즘을 허용합니다. 해당 설정을 시작 시에 명시적으로 구성하려면, 서버 my.cnf 파일에 다음과 같이 작성합니다:1[mysqld] 2protocol_compression_algorithms=zlib,zstd,uncompressed
런타임에 protocol_compression_algorithms 시스템 변수를 해당 값으로 설정하고 영구적으로 유지하려면 다음 문을 사용합니다:
1SET PERSIST protocol_compression_algorithms='zlib,zstd,uncompressed';
SET PERSIST는 실행 중인 MySQL 인스턴스에 대한 값을 설정합니다. 또한 그 값을 저장하여 이후 서버 재시작 시에도 이어지도록 합니다.
실행 중인 MySQL 인스턴스에 대한 값을 변경하되 이후 재시작까지 이어지지 않게 하려면 PERSIST 대신 GLOBAL 키워드를 사용하십시오. Section 15.7.6.1, “SET Syntax for Variable Assignment”를 참조하십시오.
zstd 압축만 사용하는 인커밍 커넥션만 허용하려면, 서버를 시작 시 다음과 같이 구성합니다:1[mysqld] 2protocol_compression_algorithms=zstd
또는, 런타임에 변경하려면:
1SET PERSIST protocol_compression_algorithms='zstd';
zlib 또는 uncompressed 커넥션을 시작하도록 허용하려면, 다음과 같이 실행합니다:1mysql --compression-algorithms=zlib,uncompressed
zlib 또는 zstd 커넥션으로 접속하도록 구성하고, zstd 커넥션에 대해 압축 레벨 7을 사용하려면, 다음과 같은 CHANGE REPLICATION SOURCE TO 문을 사용합니다:1CHANGE REPLICATION SOURCE TO 2 SOURCE_COMPRESSION_ALGORITHMS = 'zlib,zstd', 3 SOURCE_ZSTD_COMPRESSION_LEVEL = 7;
이는 replica_compressed_protocol 시스템 변수가 비활성화되어 있다고 가정합니다. 그 이유는 Configuring Legacy Connection Compression에 설명되어 있습니다.
커넥션 설정이 성공하려면, 커넥션의 양쪽 모두가 상호 허용되는 압축 알고리즘에 동의해야 합니다. 알고리즘 협상 과정은 zlib, 그다음 zstd, 그다음 uncompressed 순으로 사용을 시도합니다. 양쪽이 공통 알고리즘을 찾지 못하면, 커넥션 시도는 실패합니다.
커넥션의 양쪽 모두가 압축 알고리즘에 동의해야 하고, uncompressed는 반드시 허용되는 것은 아닌 알고리즘 값이기 때문에, 압축되지 않은 커넥션으로의 폴백이 반드시 발생하는 것은 아닙니다. 예를 들어, 서버가 zstd만 허용하도록 구성되고, 클라이언트가 zlib,uncompressed를 허용하도록 구성된 경우, 클라이언트는 전혀 접속할 수 없습니다. 이 경우 양쪽 모두에 공통인 알고리즘이 없으므로 커넥션 시도는 실패합니다.
zstd 압축 레벨을 지정할 수 있도록 하는 구성 파라미터는 1에서 22까지의 정수 값을 받으며, 값이 클수록 압축 수준이 증가함을 의미합니다. 기본 zstd 압축 레벨은 3입니다. 압축 레벨 설정은 zstd 압축을 사용하지 않는 커넥션에는 영향을 주지 않습니다.
구성 가능한 zstd 압축 레벨을 사용하면, 더 적은 네트워크 트래픽과 더 높은 CPU 부하, 혹은 더 많은 네트워크 트래픽과 더 낮은 CPU 부하 사이에서 선택할 수 있습니다. 더 높은 압축 레벨은 네트워크 혼잡을 줄이지만, 추가적인 CPU 부하로 인해 서버 성능이 저하될 수 있습니다.
MySQL 8.0.18 이전에는 커넥션 압축을 제어하기 위해 다음 구성 파라미터를 사용할 수 있습니다:
클라이언트 프로그램은 서버에 대한 커넥션에서 압축 사용을 지정하는 --compress 커맨드라인 옵션을 지원합니다.
MySQL C API를 사용하는 프로그램의 경우, mysql_options() 함수에 대해 MYSQL_OPT_COMPRESS 옵션을 활성화하면 서버에 대한 커넥션에서 압축 사용을 지정합니다.
소스/레플리카 복제의 경우, replica_compressed_protocol 시스템 변수를 활성화하면 소스에 대한 레플리카 커넥션에서 압축 사용을 지정합니다.
각 경우에 압축 사용이 지정되면, 양쪽 모두가 허용하는 경우 커넥션은 zlib 압축 알고리즘을 사용하고, 그렇지 않으면 압축되지 않은 커넥션으로 폴백합니다.
MySQL 8.0.18부터, 커넥션 압축에 대한 보다 많은 제어를 위해 도입된 추가 압축 파라미터( Configuring Connection Compression에 설명됨) 때문에, 방금 설명한 압축 파라미터는 레거시 파라미터가 됩니다. 예외는 MySQL Shell로, 여기서는 --compress 커맨드라인 옵션이 여전히 현재 옵션으로 남아 있으며, 압축 알고리즘을 선택하지 않고 압축을 요청하는 데 사용할 수 있습니다. MySQL Shell의 커넥션 압축 제어에 대한 정보는 Using Compressed Connections를 참조하십시오.
레거시 압축 파라미터는 신규 파라미터와 상호 작용하며, 그 시맨틱은 다음과 같이 변경됩니다:
레거시 --compress 옵션의 의미는 --compression-algorithms이 지정되었는지 여부에 따라 달라집니다:
--compression-algorithms이 지정되지 않은 경우, --compress는 클라이언트 측 알고리즘 집합을 zlib,uncompressed로 지정한 것과 동일합니다.
--compression-algorithms이 지정된 경우, --compress는 알고리즘 집합을 zlib로 지정한 것과 동일하며, 전체 클라이언트 측 알고리즘 집합은 zlib plus --compression-algorithms로 지정된 알고리즘의 합집합입니다. 예를 들어, --compress와 --compression-algorithms=zlib,zstd를 모두 사용하면, 허용되는 알고리즘 집합은 zlib plus zlib,zstd, 즉 zlib,zstd입니다. --compress와 --compression-algorithms=zstd,uncompressed를 모두 사용하면, 허용되는 알고리즘 집합은 zlib plus zstd,uncompressed, 즉 zlib,zstd,uncompressed입니다.
동일한 유형의 상호 작용이 레거시 MYSQL_OPT_COMPRESS 옵션과 mysql_options() C API 함수에 대한 MYSQL_OPT_COMPRESSION_ALGORITHMS 옵션 사이에서도 발생합니다.
replica_compressed_protocol 시스템 변수가 활성화된 경우, 이는 SOURCE_COMPRESSION_ALGORITHMS보다 우선하며, 소스와 레플리카 양쪽이 해당 알고리즘을 허용하는 경우 소스에 대한 커넥션은 zlib 압축을 사용합니다. replica_compressed_protocol이 비활성화된 경우, SOURCE_COMPRESSION_ALGORITHMS 값이 적용됩니다.
Compression 상태 변수는 현재 커넥션이 압축을 사용하는지 여부를 나타내기 위해 ON 또는 OFF 값을 가집니다.
mysql 클라이언트의 \status 명령은 압축이 현재 커넥션에 대해 활성화된 경우 Protocol: Compressed라는 라인을 표시합니다. 해당 라인이 없으면 커넥션은 압축되지 않은 상태입니다.
MySQL Shell의 \status 명령은 커넥션이 압축되었는지 여부를 나타내기 위해 Disabled 또는 Enabled라고 표시하는 Compression: 라인을 표시합니다.
커넥션 압축을 모니터링하기 위해 사용할 수 있는 추가 정보 소스는 다음과 같습니다:
클라이언트 커넥션에서 사용 중인 압축을 모니터링하려면, Compression_algorithm 및 Compression_level 상태 변수를 사용하십시오. 현재 커넥션에 대해 이들의 값은 각각 압축 알고리즘과 압축 레벨을 나타냅니다.
서버가 인커밍 커넥션에 대해 허용하도록 구성된 압축 알고리즘을 확인하려면, protocol_compression_algorithms 시스템 변수를 확인하십시오.
소스/레플리카 복제 커넥션의 경우, 구성된 압축 알고리즘과 압축 레벨은 여러 소스에서 확인할 수 있습니다:
Performance Schema replication_connection_configuration 테이블에는 COMPRESSION_ALGORITHMS 및 ZSTD_COMPRESSION_LEVEL 컬럼이 있습니다.
mysql.slave_master_info 시스템 테이블에는 Master_compression_algorithms 및
Master_zstd_compression_level 컬럼이 있습니다. master.info 파일이 존재하는 경우, 그 안에도 해당 값에 대한 라인이 포함되어 있습니다.
6.2.7 Connection Transport Protocols
6.2.9 Setting Environment Variables