Loading...
MySQL 9.5 Reference Manual 9.5의 A.15 MySQL 9.5 FAQ: MySQL Enterprise Thread Pool의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
A.15.1. Thread Pool은 무엇이며 어떤 문제를 해결합니까?
A.15.2. Thread Pool은 어떻게 동시 session과 transaction을 제한하고 관리하여 최적의 성능과 처리량을 보장합니까?
A.15.3. Thread Pool은 client 측 Connection Pool과 어떻게 다릅니까?
A.15.4. 언제 Thread Pool을 사용해야 합니까?
A.15.5. 권장되는 Thread Pool configuration이 있습니까?
| Property | Value |
|---|---|
| A.15.1. | Thread Pool은 무엇이며 어떤 문제를 해결합니까? |
| MySQL Thread Pool은 MySQL 서버 플러그인으로, MySQL 서버의 기본 연결 처리 기능을 확장하여 동시에 실행되는 문/쿼리와 트랜잭션의 수를 제한함으로써, 각 문과 트랜잭션이 자신의 작업을 수행하는 데 충분한 CPU 및 메모리 리소스를 확보할 수 있도록 합니다. MySQL 9.5에서 Thread Pool 플러그인은 상용 제품인 MySQL Enterprise Edition에 포함되어 있습니다.<br> <br>MySQL Server의 기본 스레드 처리 모델은 클라이언트 연결당 하나의 스레드를 사용하여 문을 실행합니다. 더 많은 클라이언트가 서버에 연결하여 문을 실행할수록 전체적인 성능은 저하됩니다. Thread Pool 플러그인은 오버헤드를 줄이고 성능을 향상시키도록 설계된 대체 스레드 처리 모델을 제공합니다. Thread Pool 플러그인은 특히 최신 멀티 CPU/코어 시스템에서 다수의 클라이언트 연결에 대한 문 실행 스레드를 효율적으로 관리함으로써 서버 성능을 향상시킵니다.<br> <br>자세한 내용은 Section 7.6.3, “MySQL Enterprise Thread Pool”을 참조하십시오. | |
| A.15.2. | Thread Pool은 어떻게 동시 session과 transaction을 제한하고 관리하여 최적의 성능과 처리량을 보장합니까? |
| Thread Pool은 동시성을 제한하고 균형을 맞추기 위해 “divide and conquer” 접근 방식을 사용합니다. MySQL Server의 기본 연결 처리와 달리 Thread Pool은 연결과 스레드를 분리하므로, 연결과 해당 연결에서 수신된 문을 실행하는 스레드 사이에는 고정된 관계가 없습니다. 그다음 Thread Pool은 설정 가능한 스레드 그룹 내에서 클라이언트 연결을 관리하며, 수행하도록 제출된 작업의 특성에 따라 우선순위를 부여하고 큐에 넣습니다.<br> <br>자세한 내용은 Section 7.6.3.3, “Thread Pool Operation”을 참조하십시오. | |
| A.15.3. | Thread Pool은 client 측 Connection Pool과 어떻게 다릅니까? |
| MySQL Connection Pool은 MySQL 클라이언트가 MySQL 서버에 지속적으로 연결 및 연결 해제하는 일을 방지하기 위해 클라이언트 측에서 동작합니다. 이는 유휴 연결을 MySQL 클라이언트 내에 캐시하여, 필요 시 다른 사용자가 사용할 수 있도록 설계되었습니다. 이렇게 함으로써 쿼리가 MySQL 서버로 제출될 때 연결을 설정하고 해제하는 데 드는 오버헤드와 비용을 최소화합니다. MySQL Connection Pool은 백엔드 MySQL 서버의 쿼리 처리 능력이나 부하에 대해서는 아무런 가시성이 없습니다. 반면 Thread Pool은 MySQL 서버 측에서 동작하며, 백엔드 MySQL 데이터베이스에 접근하는 클라이언트 연결으로부터 수신되는 인바운드 동시 연결과 쿼리의 실행을 관리하도록 설계되었습니다. 역할이 분리되어 있기 때문에 MySQL Connection Pool과 Thread Pool은 서로 독립적이며, 각각을 독립적으로 사용할 수 있습니다.<br> <br>MySQL Connector를 통한 MySQL Connection Pooling에 대해서는 Chapter 31, Connectors and APIs에서 다룹니다. | |
| A.15.4. | 언제 Thread Pool을 사용해야 합니까? |
최적의 Thread Pool 사용 사례를 위해 고려해야 할 몇 가지 경험 규칙이 있습니다:<br> <br>MySQL Threads_running 변수는 현재 MySQL Server에서 동시에 실행 중인 문의 수를 추적합니다. 이 변수가 서버가 최적으로 동작하지 않는 영역(일반적으로 InnoDB 워크로드의 경우 40을 초과하는 경우)을 지속적으로 초과한다면, 특히 극단적인 병렬 오버로드 상황에서 Thread Pool은 유용할 것입니다.<br> <br>동시에 실행되는 문의 수를 제한하기 위해 innodb_thread_concurrency를 사용 중이라면, Thread Pool이 같은 문제를 더 잘 해결한다는 것을 알 수 있을 것입니다. Thread Pool은 연결을 스레드 그룹에 할당한 다음, 트랜잭션 내용, 사용자 정의 지정 등과 같은 요소를 기반으로 실행을 큐에 넣습니다.<br> <br>마지막으로, 워크로드가 주로 짧은 쿼리로 구성되어 있다면 Thread Pool은 유용할 것입니다.<br> <br>자세한 내용을 알아보려면 Section 7.6.3.4, “Thread Pool Tuning”을 참조하십시오. | |
| A.15.5. | 권장되는 Thread Pool configuration이 있습니까? |
| Thread Pool에는 성능에 영향을 미치는 사용 사례 기반 설정 파라미터가 다수 존재합니다. 이러한 파라미터와 튜닝 팁에 대해 알아보려면 Section 7.6.3.4, “Thread Pool Tuning”을 참조하십시오. |
A.14 MySQL 9.5 FAQ: Replication
A.16 MySQL 9.5 FAQ: InnoDB Change Buffer