중화사전망 - 자전 검색 - Mysql 은 동시 테스트에서 성능 병목 현상을 만나 온라인으로 도움을 요청했습니다.
Mysql 은 동시 테스트에서 성능 병목 현상을 만나 온라인으로 도움을 요청했습니다.
가능한 한 행 레벨 잠금을 지원하는 스토리지 엔진을 사용합니다. 예를 들어 InnoDB 는 읽기 작업이 쓰기 작업보다 훨씬 많은 장면 (예: 데이터 웨어하우스 클래스 응용 프로그램) 에서만 MyISAM 과 같은 테이블 레벨 잠금을 사용하는 스토리지 엔진을 사용합니다.
2. hot gaint 잠금 가능성을 줄이고 글로벌 뮤텍스를 최대한 피하십시오.
주요 영역 (단일 스레드만 액세스할 수 있는 리소스) 은 MySQL 시스템의 동시성을 크게 감소시킵니다. InnoDB 버퍼 풀과 데이터 사전은 일반적인 핵심 영역입니다. 다행히 새 버전의 InnoDB 는 멀티 코어 프로세서에서 잘 작동하며 innodb_buffer_pool_instances 서버 변수를 사용하여 여러 버퍼 풀 인스턴스 설정을 지원합니다. 각 버퍼 풀 인스턴스는 자체 사용 가능한 목록, 목록 새로 고침, LRU 및 기타 버퍼 풀 관련 데이터 구조를 관리하며 자체 상호 배타적인 잠금으로 보호됩니다.
3. 다중 I/O 스레드를 병렬로 실행합니다.
Innodb_io_capacity 서버 변수를 통해 디스크 I/O 스레드 수를 늘리면 SELECT 와 같은 프런트엔드 작업의 성능이 향상되지만 디스크 I/O 스레드 수는 디스크의 IOPS 를 초과할 수 없습니다 (7200rpm 아래 단일 디스크 하드웨어의 IOPs 는 일반적으로/kloct 에 있음)
또한 비동기식 I/O 는 시스템의 동시성을 어느 정도 향상시킬 수 있습니다. Linux 시스템에서 InnoDB 는 MySQL 서버 변수 innodb_use_native_aio 의 값을 ON 으로 설정하여 Linux 의 비동기 I/O 하위 시스템을 사용할 수 있습니다.
4. 병렬 백엔드 작업
기본적으로 MySQL 의 purge 작업 (삭제 표시된 레코드 삭제) 은 InnoDB 의 주 스레드에 의해 수행되므로 내부 자원 경합 확률을 줄여 MySQL 서비스의 확장성을 높일 수 있습니다. 그러나 InnoDB 내부 경쟁이 심화됨에 따라 이러한 설정의 성능 이점은 거의 미미합니다. 따라서 프로덕션 환경에서는 innodb_purge_threads 의 서버 변수를 on 으로 설정하여 주 스레드를 정리 스레드와 별도로 실행해야 합니다.
단일 스레드 복제 모델의 SQL 스레드는 핫스팟입니다.
서버에서 여러 SQL 스레드를 병렬로 실행하면 MySQL 슬레이브 서버의 성능을 효과적으로 향상시킬 수 있으며 MySQL 5.6 은 다중 스레드 복제 (라이브러리당 복제 스레드 1 개) 를 지원합니다.