기능 소개
클라우드 데이터베이스 MySQL의 핫스팟 업데이트 기능은 대기열 메커니즘에 기반하여 트랜잭션 병합 개념을 도입하여 강화판 핫스팟 업데이트 기능을 출시했습니다.
핫스팟 업데이트 보호 작업 생성 후 시스템은 단일 행의 핫스팟 업데이트 발생 여부를 자동으로 탐지합니다. 발생할 경우 해당 핫스팟 행 업데이트 충돌 트랜잭션을 논리적으로 여러 그룹(group)으로 분할합니다. 동일 그룹 내 트랜잭션들은 핫스팟 행 업데이트 문 외에 다른 문을 병렬로 실행하여 대량 행 잠금으로 인한 동시성 성능 저하를 줄이고, 고동시성 시나리오에서의 데이터베이스 성능을 향상시킵니다. DBbrain 콘솔을 통해 핫스팟 업데이트 보호 작업 생성, 조회, 종료 및 삭제가 가능합니다. 이 기능의 핵심 작동 원리는 다음과 같은 프로세스로 간단히 이해할 수 있습니다.
1. 자동 탐지: 시스템은 데이터베이스 업데이트 작업을 실시간으로 모니터링하여 고빈도로 업데이트되는 특정 데이터 행을 자동으로 식별합니다.
2. 요청 대기열: 핫스팟 행이 식별되면 시스템은 해당 행에 대한 후속 동시 업데이트 요청을 대기 큐에 넣습니다.
3. 트랜잭션 대기 및 깨우기: 논리적 그룹화 후 그룹 내 트랜잭션은 핫스팟 업데이트 문 실행 시에만 직렬 처리를 요청하며, 다른 문을 실행할 때는 병렬로 처리됩니다.
지원 버전
커널 버전 MySQL 5.7 20250330 이상에서는 기본 키 및 고유 키 기반의 핫스팟 업데이트 최적화를 지원합니다.
커널 버전 MySQL 8.0 20241001 이상에서는 기본 키 기반의 핫스팟 업데이트 최적화를 지원합니다.
적용 시나리오
본 기능은 초단기 판매(Flash Sale), 한정 시간 특가 등 비즈니스 시나리오에서 대량 사용자가 동시에 동일 데이터(예: 재고)를 업데이트할 때 발생하는 데이터베이스 성능 병목 현상을 해결하기 위해 주로 사용됩니다.
트랜잭션의 원래 실행 시간이 비교적 길거나 긴 트랜잭션과 짧은 트랜잭션이 혼합된 시나리오에서 이 기능을 사용하면 실행 성능을 향상시킬 수 있습니다.
기능 장점
애플리케이션 수정이 필요 없습니다.
보다 광범위한 SQL 호환성을 갖추어 하나의 트랜잭션 내에서 다중 SELECT FOR UPDATE, UPDATE 또는 INSERT SQL을 지원할 수 있습니다.
이전 트랜잭션이 제출된 후에야 핫스팟 행 업데이트를 시작할 수 있었던 트랜잭션은 이제 이전 트랜잭션이 업데이트를 완료한 후에 실행하기만 하면 되므로, 트랜잭션의 락 대기 시간이 크게 단축됩니다.
성능 데이터
인스턴스 사양 구성: MySQL 8.0 전용형 - 32코어 256000MB, 저장 공간 200GB.
핫스팟 업데이트 기능을 활성화하면 클라우드 데이터베이스 MySQL의 TPS가 약 3만 수준으로 안정화되어 실제 비즈니스 수요를 충족할 수 있습니다.
기능 사용 시 주의사항
적용 가능한 트랜잭션 모드는 다음과 같으며, 여기서 a는 인덱스 키가 되어서는 안 됩니다. 그렇지 않으면 효과가 사라집니다.
BEGIN;
xxx
UPDATE table_name SET a=? WHERE id/pk=?;
yyy
COMMIT;
고유 키 핫스팟 업데이트 사용 방법은 SQL에 힌트 /*+ TXSQL_UK_HOT_UPDATE */를 추가하는 것이며, 예시는 다음과 같습니다.
UPDATE table_name SET a=? WHERE uk=?;
핫스팟 업데이트 기능을 사용할 때는 thread_handling 매개변수 값을 one-thread-per-connection으로 설정하십시오.
기능 사용 제한
부하 제한
하나의 트랜잭션에서 동일한 핫스팟 레코드에 대해 여러 번의 UPDATE 작업을 허용하지 않습니다.
트랜잭션 UPDATE 핫스팟 완료 후 후속 문장에서 충돌이 발생해서는 안 됩니다. 비록 핫스팟을 구성하지 않더라도 중단 현상이 발생할 수 있습니다.
동일한 트랜잭션 내에서 다수의 핫스팟을 업데이트할 수 없습니다.
핫스팟 업데이트 부하 발생 중에는 핫스팟 행을 삭제할 수 없습니다.
파라미터 제한
스레드 풀 모드는 아직 지원하지 않습니다.
Binlog을 활성화하고 binlog_order_commits 매개변수를 ON으로 설정해야 합니다. Binlog을 비활성화하면 innodb_hot_update_detect 매개변수를 켤 수 없습니다. innodb_hot_update_detect 매개변수가 활성화된 상태에서 부하에 여전히 핫스팟이 존재하는 경우 Binlog을 비활성화할 수 없습니다.
innodb_hot_update_detect 매개변수를 비활성화하려면 현재 부하에서 핫스팟 업데이트가 종료될 때까지 반드시 기다려야 합니다.
SELECT FOR UPDATE 제한
SELECT FOR UPDATE와 UPDATE는 모두 기본 키 인덱스를 기반으로 단일 행 업데이트를 수행하며 업데이트 조건이 동일합니다.
SELECT FOR UPDATE는 UPDATE 이전에 있어야 합니다.
유니크 키 제한
UK FOR UPDATE 후에 UK를 UPDATE하는 트랜잭션 모드는 지원하지 않습니다.
동일한 트랜잭션 내에서 먼저 기본 키를 사용한 후 고유 키로 핫스팟 행을 업데이트하는 트랜잭션 모드는 지원하지 않습니다. 반면 트랜잭션1이 기본 키를 사용하고 트랜잭션2가 고유 키로 동일한 행을 업데이트하는 혼합 업데이트 방식은 지원됩니다.
기능 사용 방법
클라우드 데이터베이스 MySQL은 핫스팟 업데이트 기능을 활성화하기 위해 다음과 같은 두 가지 방법을 제공합니다.
방법 1: DBbrain 콘솔을 통해 활성화
방법 2: 매개변수를 통해 활성화
innodb_hot_update_detect 매개변수 값을 ON으로 설정하여 핫스팟 업데이트 기능을 활성화합니다.
관련 파라미터 설명
|
innodb_hot_update_detect | yes | string | OFF | ON/OFF | 핫스팟 업데이트 기능을 활성화할지 여부. ON: 활성화를 의미합니다. OFF: 비활성화를 의미합니다. |