MySQL 잠금 스케줄링 성능 평가 : Cats vs Fifo
스케줄링은 컴퓨터 시스템 설계에서 중요합니다. 올바른 정책은 더 빠른 기계를 필요로하지 않고 평균 응답 시간을 크게 줄일 수 있으며, 효과적으로 성능을 무료로 향상시킬 수 있습니다. 스케줄링은 또한 사용자 공정성 및 차별화 된 서비스 수준과 같은 다른 메트릭을 최적화하여 일부 구인 클래스가 다른 작업 클래스보다 평균 지연이 낮아 지도록합니다. [1].
MySQL 8.0은 경합 인식 거래 스케줄링 (CATS) 알고리즘을 사용하여 잠금 대기 대기 트랜잭션을 우선 순위로 삼습니다. 동일한 잠금 장치에 대해 여러 거래가 경쟁하면 CATS는 주어진 트랜잭션 블록의 트랜잭션 수에 의해 계산 된 예약 중량에 따라 우선 순위를 결정합니다. 다른 사람들을 차단하는 거래는 더 높은 우선 순위를 얻습니다. 가중치가 같으면 가장 긴 대기 트랜잭션이 먼저갑니다.
교착 상태는 각각 다른 거래가 진행될 수없는 경우 발생합니다.
고양이와 FIFO 성능 비교
MySQL 잠금 스케줄링 알고리즘을 이해 한 후이 알고리즘이 처리량에 어떤 영향을 미치는지 살펴 보겠습니다. 테스트하기 전에 이전 FIFO 알고리즘과 복원 방법을 이해해야합니다. 관련 세부 정보는 아래에 제공된 GIT 로그 설명을 참조하십시오.
이 WL은 FCFS가 중복되는 지점까지 고양이의 구현을 향상시켜 (종종 느리게 느리고, 고양이에서 동일한 일정 가중치를 설정하여 쉽게 “모방하기 쉽다) 코드에서 FCF를 제거하여 LOCK_SYS의 논리를 더욱 단순화합니다.
위의 프롬프트를 기반으로 MySQL에서 FIFO 잠금 스케줄링 알고리즘을 복원하는 것이 간단합니다. 그 후, 처리량은 개선 된 MySQL 8.0.32에서 다양한 동시성 수준을 갖는 Sysbench Pareto 분포 시나리오를 사용하여 테스트되었습니다. 세부 사항은 다음 그림에 제공됩니다.
그림 1. 다양한 동시성 수준에서 처리량에 대한 고양이의 영향.
그림에서 CATS 알고리즘의 처리량이 FIFO 알고리즘의 처리량을 크게 초과한다는 것을 알 수 있습니다. 사용자 응답 시간 측면 에서이 두 알고리즘을 비교하려면 다음 그림을 참조하십시오.
그림 2. 다양한 동시성 수준에서 응답 시간에 고양이의 영향.
그림에서 CATS 알고리즘은 사용자 응답 시간이 훨씬 더 나은 것을 제공한다는 것을 알 수 있습니다.
또한 파레토 배포 테스트 프로세스 중 교착 상태 오류 통계를 비교하면 세부 정보가 다음 그림에서 찾을 수 있습니다.
그림 3. 다양한 동시성 수준에서 무시 된 오류에 대한 고양이의 영향.
비교 분석에 따르면 고양이 알고리즘은 교착 상태를 크게 줄입니다. 교착 상태의 감소는 성능 향상에 중요한 역할을 할 수 있습니다. 이 상관 관계의 이론적 근거는 다음과 같습니다 [2]:
높은 변환 설정에서 대상 시스템의 처리량은 대상 시스템의 동시성 제어 메커니즘에 의해 결정됩니다. 시스템은 조기에 잠금을 해제하거나 중단의 수를 줄일 수있는 시스템은 이러한 설정에서 장점을 갖습니다.
위의 테스트 결과는 MySQL의 공식 결과와 밀접하게 일치합니다. 공식 테스트를 기반으로 다음 두 수치 [3]고양이 알고리즘의 상당한 효과를 보여줍니다.
그림 4. TPS에서 고양이와 FIFO 비교 및 평균 대기 시간 : MySQL 블로그의 통찰력.
또한 CATS 알고리즘을 구현하기위한 MySQL의 공식 요구 사항은 엄격합니다. 특정 세부 사항은 다음 그림에 제공됩니다.
그림 5. 고양이에 대한 공식 작업용 요구 사항.
따라서 CATS 알고리즘을 채택하면 모든 시나리오에서 성능 저하가 없어야합니다. 여기에서 끝나는 것 같지만 Cats 알고리즘의 논문의 요약 [1] 의심을 불러 일으킨다. 세부 사항은 다음 그림에 제공됩니다.
그림 6. 고양이 종이에 대한 의심.
위의 정보에서, 업계가 FIFO에서 잠재적 인 결함을 간과했거나 논문의 평가에 결함이 있으며 FIFO에는 심각한 문제가없는 것으로 추론 될 수 있습니다. 이 모순은 중요한 문제를 강조합니다. 이러한 결론 중 하나는 결함이 있어야합니다. 둘 다 정확할 수 없습니다.
모순은 종종 심층적 인 문제 분석 및 해결에 대한 귀중한 기회를 제시합니다. 그들은 기존의 이해에 도전 할 수있는 영역이나 새로운 통찰력을 얻을 수있는 영역을 강조합니다.
이번에는 개선 된 MySQL 8.0.27에 대한 테스트 결과 심각한 갈등에서 상당한 병목 현상이 나타났습니다. 그만큼 성전 스크린 샷은 다음 그림에 나와 있습니다.
이번에는 개선 된 MySQL 8.0.27에 대한 테스트 결과 MySQL 오류 로그 파일에 많은 오류 로그가 나타났습니다. 아래는 부분 스크린 샷입니다.
그림 7. 수많은 오류 로그의 부분 스크린 샷.
해당 코드의 분석을 계속하면 세부 사항은 다음과 같습니다.
void Deadlock_notifier::notify(const ut::vector &trxs_on_cycle,
const trx_t *victim_trx) {
ut_ad(locksys::owns_exclusive_global_latch());
start_print();
const auto n = trxs_on_cycle.size();
for (size_t i = 0; i lock.wait_lock, trx);
ut_a(blocking_lock);
print_title(i, "TRANSACTION");
print(trx, 3000);
print_title(i, "HOLDS THE LOCK(S)");
print(blocking_lock);
print_title(i, "WAITING FOR THIS LOCK TO BE GRANTED");
print(trx->lock.wait_lock);
}
const auto victim_it =
std::find(trxs_on_cycle.begin(), trxs_on_cycle.end(), victim_trx);
ut_ad(victim_it != trxs_on_cycle.end());
const auto victim_pos = std::distance(trxs_on_cycle.begin(), victim_it);
ut::ostringstream buff;
buff
코드 분석에서 교착 상태가 상당한 양의 로그 출력으로 이어진다는 것은 분명합니다. 테스트 중에 관찰 된 무시 된 오류는 이러한 교착 상태에 연결됩니다. CATS 알고리즘은 무시한 오류 수를 줄여 로그 출력이 적습니다. 이 문제는 일관되게 재현 될 수 있습니다.
이러한 맥락에서 몇 가지 고려 사항이 나타납니다.
1. 성능 테스트에 미치는 영향 : 광범위한 오류 로그와 그로 인한 중단은 성능 평가를 비뚤어 질 수있어 시스템 기능을 부정확하게 평가할 수 있습니다.
2. 고양이 알고리즘의 효과 : CATS 알고리즘의 성능 개선에는 재평가가 필요할 수 있습니다. 오류 로그의 광범위한 출력이 성능에 크게 영향을 미치면 실제 효과가 처음에 믿었던 것만 큼 높지 않을 수 있습니다.
모든 로그를 제거하십시오 Deadlock_Notifier :: 알림 함수, MySQL을 다시 컴파일하고 Pareto 분포에 따라 Sysbench 읽기 쓰기 테스트를 수행하십시오. 세부 사항은 다음 그림에 제공됩니다.
그림 8. 간섭을 제거한 후 개선 된 MySQL 8.0.27을 위해 다양한 동시성 수준에서 처리량에 CAT의 영향.
그림에서, 처리량 비교에는 상당한 변화가 있었음이 분명하다. 심각한 갈등이있는 시나리오에서 CATS 알고리즘은 FIFO 알고리즘보다 약간 성능이 뛰어나지 만 차이는 이전 테스트보다 최소화되고 훨씬 덜 뚜렷합니다. 이 테스트는 개선 된 MySQL 8.0.27에서 수행되었습니다.
Pareto 분포를 사용하여 교착 상태 로그 간섭이 제거 된 개선 된 MySQL 8.0.32에서 성능 비교 테스트를 수행하겠습니다.
그림 9. 간섭을 제거한 후 개선 된 MySQL 8.0.32를 위해 다양한 동시성 수준에서 처리량에 CAT의 영향.
그림에서 간섭을 제거하면 약간의 성능 차이 만 발생합니다. 이 작은 변형으로 인해 FIFO 일정 문제의 심각성이 눈치 채기 어려운 이유를 이해할 수 있습니다. 고양이 저자와 MySQL 공무원의 인식 된 편견은 교착 상태로 인한 광범위한 로그 출력 간섭에서 비롯 될 수 있습니다.
CATS 알고리즘 용지에서와 동일한 32 개의 창고를 사용하여 TPC-C 테스트는 다양한 동시성 수준에서 수행되었습니다. MySQL은 개선 된 MySQL 8.0.27을 기반으로했으며 BenchmarkSQL은 창고 당 100 개의 동시 트랜잭션을 지원하도록 수정되었습니다.
고양이 종이에 따르면, 간섭을 제거한 후 NUMA에서 다른 동시성 수준에서 처리량에 고양이의 영향.
그림에서 Cats 알고리즘이 FIFO 알고리즘보다 더 나빠진다는 것이 분명합니다. NUMA 관련 간섭을 피하기 위해 MySQL은 새로운 처리량 대 동시성 테스트를 위해 NUMA 노드 0에 바인딩되었습니다.
그림 11. CATS 종이에 따르면 간섭을 제거한 후 SMP 하에서 다른 동시성 수준에서 처리량에 대한 고양이의 영향.
이 테스트 라운드에서 FIFO 알고리즘은 Cats 알고리즘보다 계속 성능이 우수했습니다. Sysbench Pareto 테스트의 개선과 비교하여 BenchmarkSQL TPC-C 테스트에서 CATS 알고리즘의 성능 감소는 다음과 같은 이유에 기인 할 수 있습니다.
1. 추가 오버 헤드 : 고양이 알고리즘은 본질적으로 여분의 오버 헤드를 소개합니다.
2. Numa 환경 문제 : CATS 알고리즘은 NUMA 환경에서 최적으로 수행되지 않을 수 있습니다.
3. 갈등 심각도 : TPC-C 테스트의 충돌 심각도는 Sysbench Pareto 테스트보다 덜 두드러집니다.
4. 다른 동시성 시나리오 : Sysbench는 BenchmarkSQL의 것과 크게 다른 동시성 시나리오를 만듭니다.
마지막으로, 표준 TPC-C 테스트는 다양한 동시성 수준에서 1000 개의 창고로 다시 수행되었습니다. 특정 세부 사항은 다음 그림에 표시됩니다.
그림 12. 간섭을 제거한 후 벤치 마크 SQL 처리량에 대한 CAT의 영향.
그림에서, 낮은 분쟁 시나리오에서 두 알고리즘 사이에는 차이가 거의 없다는 것이 분명합니다. 다시 말해, CATS 알고리즘은 충돌이 적은 상황에서 상당한 이점을 제공하지 않습니다.
결론
전반적으로 고양이는 파레토 테스트에서 약간의 개선을 보여 주지만 예상보다 덜 두드러집니다. 성능 테스트 중 교착 상태 로그 출력의 간섭이 결과에 영향을 미쳤습니다. CATS 알고리즘은 트랜잭션 교착 상태를 크게 줄여서 FIFO 알고리즘에 비해 로그 출력이 줄어들고 성능 저하가 줄어 듭니다. 교착 상태 로그가 억제되면 이러한 알고리즘의 차이는 최소화되어 고양이 알고리즘의 성능을 둘러싼 혼란을 명확하게합니다. [4].
데이터베이스 성능 테스트는 본질적으로 복잡하고 오류가 발생하기 쉽습니다 [5]. 데이터만으로 판단 할 수 없으며 논리적 일관성을 보장하기 위해 철저한 조사가 필요합니다.
참조
[1] B. Tian, J. Huang, B. Mozafari 및 G. Schoenebeck. 트랜잭션 데이터베이스에 대한 경합 인식 잠금 스케줄링. PVLDB, 11 (5), 2018.
[2] Y. Wang, M. Yu, Y. Hui, F. Zhou, Y. Huang, R. Zhu 등 15, 아니오. 7.
[3] 맑은 베인. 2017. 성능을 높이기 위해 InnoDB에 도착하는 경쟁 인식 거래 일정.
[4] 빈 왕 (2024). 소프트웨어 엔지니어링에서 문제 해결 기술 : MySQL을 더 좋게 만드는 방법.
[5] M. Raasveldt, P. Holanda, T. Gubner 및 H. Muhleisen. 공정한 벤치마킹은 어려운 것으로 간주됩니다 : 데이터베이스 성능 테스트의 일반적인 함정. 데이터베이스 시스템 테스트에 관한 제 7 차 국제 워크숍에서 DBTEST, 2 : 1–2 : 6, 2018.
Post Comment