• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 1. 최적화 개요
    2. SQL문 최적화
    3. 최적화 및 인덱스
    4. 데이터베이스 구조의 최적화
    5. InnoDB 테이블의 최적화
    6. MyISAM 테이블의 최적화
    7. MEMORY 테이블 최적화
    8. 쿼리 실행 계획의 이해
    9. 버퍼링과 캐시
    10. 잠금 작업의 최적화
    11. MySQL 서버의 최적화
    1. 시스템 요소 및 스타트 업 파라미터의 튜닝
    2. 서버 파라미터의 튜닝
    3. 디스크 I / O 최적화
    4. 메모리 사용 최적화
    5. 네트워크 사용의 최적화
    6. 스레드 풀 플러그인
    1. 스레드 풀 구성 요소 및 설치
    2. 스레드 풀 작업
    3. 스레드 풀 튜닝
    12. 성능 측정
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

8.11.6.3 스레드 풀 튜닝

이 섹션에서는 초당 트랜잭션 수 등의 통계를 사용하여 측정 된 최고의 성능을 위해 스레드 풀 시스템 변수 설정에 대한 지침을 제공합니다.

thread_pool_size 는 스레드 풀의 성능을 제어하는 가장 중요한 변수입니다. 그것은 서버 시작시에만 설정할 수 있습니다. 스레드 풀 테스트의 경험은 다음과 같이 표시됩니다.

  • 기본 스토리지 엔진이 InnoDB 인 경우 최적의 thread_pool_size 설정은 16에서 36 사이가 될 가능성이 가장 일반적인 최적의 값은 24-36 경향이 있습니다. 36 개 이상의 설정이 최적 인 상황은 없었습니다. 16 미만의 값이 최적 인 특별한 경우가있을 수도 있습니다.

    DBT2과 Sysbench 등의 워크로드의 경우, InnoDB 의 최적 값은 보통 36 정도이다 것 같습니다. 상당히 쓰기가 많은 워크로드에서 최적의 설정은 더 적은 수 있습니다.

  • 기본 스토리지 엔진이 MyISAM 인 경우 thread_pool_size 설정은 상당히 작해야합니다. 4-8의 값에서 최적의 성능을 얻을 수있는 경향이 있습니다. 값을 크게하면 성능에 다소 부정적도 극적인 영향을 미치는 경향은 없습니다.

또 다른 시스템 변수 thread_pool_stall_limit 는 차단 된 문 및 장기 실행 문 처리에 중요합니다. MySQL Server를 차단하는 모든 호출 스레드 풀에보고되는 경우 실행 스레드가 차단 될 때마다 알 수 있습니다. 그러나 이것은 항상 들어 맞지 않을 수 있습니다. 예를 들어, 블록은 스레드 풀 콜백에 의해 instrument되지 않은 코드에서 발생할 수 있습니다. 그런 경우 스레드 풀은 차단 된 것으로 보인다 스레드를 식별 할 수 있습니다. 이것은 thread_pool_stall_limit 시스템 변수를 사용하여 튜닝 할 수있는 길이 인 시간을 사용하여 실행됩니다. 이 매개 변수는 서버가 완전히 차단되는 것은 아닙니다. thread_pool_stall_limit 값은 교착 된 서버의 위험을 방지하기 위해 6 초 제한이 있습니다.

thread_pool_stall_limit 하여 스레드 풀은 장기 실행 문을 처리 할 수 있습니다. 장기 실행 문이 스레드 그룹을 차단하는 것이 허용 된 경우 그룹에 할당 된 다른 모든 연결은 차단되고 장기 실행 문이 완료 될 때까지 실행을 시작할 수 없습니다. 최악의 경우이 작업은 몇 시간 또는 며칠이 걸릴 수도 있습니다.

thread_pool_stall_limit 의 값은 그 값 오랫동안 실행 문이 정체중인 것으로 간주하도록 선택해야합니다. 정체중인 문은 추가 컨텍스트 스위치와 경우에 따라서는 추가 스레드 생성이 필요하기 때문에 대량의 추가 오버 헤드를 생성합니다. 한편, thread_pool_stall_limit 매개 변수를 너무 높게 설정하는 것은 장기 실행 문이 필요 이상으로 오랫동안 수많은 단시간 실행 문을 차단하는 것을 의미합니다. 대기의 값이 짧은 스레드가 더 신속하게 시작할 수 있습니다. 짧은 값은 교착 상태 상황을 피하기에 더 적합합니다. 긴 대기 값은 장기 실행 문을 포함하는 워크로드에 유용 현재 문 실​​행시 다수의 새로운 문을 시작하지 않도록합니다.

서버에 부하가 걸려있는 경우에도 서버는 문 99.9 %가 100 밀리 초 이내에 완료 워크로드를 실행하고 나머지 문이 100 밀리 초에서 2 시간 사이에 완전히 고르게 분산 밖으로 걸릴 것으로합니다. 이 경우 thread_pool_stall_limit 10 (100 밀리 세컨드를 나타낸다)로 설정하면 유익하다고 생각됩니다. 60 밀리 초 기본값은 주로 매우 간단한 문을 실행하는 서버에 충분하다.

thread_pool_stall_limit 매개 변수는 서버의 워크로드에 적절한 균형을 잡을 수 있도록 런타임에 변경할 수 있습니다. TP_THREAD_GROUP_STATS 테이블이 활성화되어 있다고하면, 다음의 쿼리를 사용하여 실행 된 문 정체 된 부분을 확인할 수 있습니다.

 SELECT SUM (STALLED_QUERIES_EXECUTED) / SUM (QUERIES_EXECUTED)
 FROM information_schema.TP_THREAD_GROUP_STATS;

이 수치는 가능한 한 작게해야합니다. 문의 정체 가능성을 줄이려면, thread_pool_stall_limit 값을 늘립니다.

문이 도착했을 때, 그것은 실제로 실행을 시작하기까지 연기 할 수있는 최대 시간은 어느 정도입니까? 다음 조건에 해당합니다.

  • 우선 순위가 낮은 대기열에 200 문이 담겨 있습니다.

  • 우선 순위가 높은 큐에 10 문이 담겨 있습니다.

  • thread_pool_prio_kickup_timer 은 10000 (10 초)으로 설정되어 있습니다.

  • thread_pool_stall_limit 100 (1 초)로 설정되어 있습니다.

최악의 경우 10 개의 우선 순위가 높은 문은 장시간 계속 실행 10 개의 트랜잭션을 나타냅니다. 따라서 최악의 경우 우선 순위가 높은 큐는 항상 실행을 대기하고있는 문이 이미 포함되어 있기 때문에이 큐에 문이 이동되지 않습니다. 10 초 후 새로운 문은 우선 순위가 높은 큐로 이동되는 자격을 얻습니다. 그러나 그것이 이동되기 전에 그 전에 모든 문을 이동해야합니다. 우선 순위가 높은 큐로 이동되는 것은 초당 최대 100 문이기 때문에 이것은 또한 2 초 정도 걸릴 수 있습니다. 문이 우선 순위가 높은 큐에 도달했을 때 많은 장기 실행 문이 그 전에있을 수 있습니다. 최악의 경우 그들 모두가 정체 중입니다 다음 문이 우선 순위가 높은 큐에서 때까지 문마다 1 초 정도 걸립니다. 따라서이 시나리오에서는 새로운 문이 ​​실행을 시작하기까지 222 초 정도 걸립니다.

이 예제에서는 응용 프로그램의 최악의 경우를 보여줍니다. 그 처리 방법은 응용 프로그램에 따라 다릅니다. 애플리케이션의 응답 시간에 대한 요구 사항이 높은 경우 아마도 그 자체로 높은 수준의 사용자를 제한하는 것입니다. 그렇지 않은 경우, 스레드 풀 구성 매개 변수를 사용하여 어떠한 최대 대기 시간을 설정할 수 있습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved