단일 코어 이상을 사용하지 않는 일부 전용 MySQL 서버가 제공되었습니다. MySQL 용 DBA보다 개발자이므로 도움이 필요합니다.
설정
서버는 OLAP / DataWarehouse (DW) 유형로드로 상당히 무겁습니다.
- 기본 : 96GB RAM, 8 코어 + 단일 RAID 10 어레이
- 테스트 : 4 코어 32GB RAM
- 가장 큰 DB는 540GB이고, 전체는 약 1.1TB이며 대부분 InnoDB 테이블
- 솔라리스 10 Intel-64
- MySQL 5.5.x
참고 : 가장 큰 DB는 OLTP DR 서버에서 복제 된 데이터베이스이며 DW는이 데이터베이스에서로드됩니다. 전체 DW는 아닙니다. 단지 6 개월에서 6 주까지 지속되므로 OLTP DB보다 작습니다.
테스트 서버에서의 관찰
- 3 개의 개별 연결
- 각각은 동시에 (그리고 다른)
ALTER TABLE...DROP KEY...ADD INDEX
- 3 개의 테이블은 2.5, 3.8, 450 만 행
- CPU 사용량이 최대 25 % (한 코어가 최대로 초과) 이상으로 증가하지 않음
- 3 개의 ALTER는 12-25 분이 소요됩니다 (가장 작은 것에는 4.5가 걸립니다)
질문
- 둘 이상의 코어를 사용하려면 어떤 설정 또는 패치가 필요합니까?
즉, MySQL이 사용 가능한 모든 코어를 사용하지 않는 이유는 무엇입니까? (다른 RDBMS와 마찬가지로) - 복제의 결과입니까?
기타 노트
- RDBMS "스레드"와 OS "스레드"의 차이점을 이해합니다
- 나는 어떤 형태의 병렬 처리를 요구하지 않습니다.
- InnoDB 및 스레드에 대한 일부 시스템 변수는 차선책입니다
(빠른 승리를 기대 함) - 단기적으로 디스크 레이아웃을 변경할 수 없습니다
- 필요한 경우 OS를 조정할 수 있습니다
- 가장 작은 테이블의 단일 ALTER TABLE은 4.5 분이 걸립니다 (충격 IMO).
편집 1
- innodb_thread_concurrency는 둘 다에서 8로 설정됩니다. 예, 잘못되었지만 MySQL이 다중 코어를 사용하지는 않습니다.
- innodb_buffer_pool_size는 기본에서 80GB이고 테스트에서 10GB입니다 (다른 인스턴스가 종료 됨). 지금은 괜찮습니다.
- innodb_file_per_table = ON
편집 2
- innodb_flush_log_at_trx_commit = 2
- innodb_use_sys_malloc = ON
- innodb_flush_method는 O_DIRECT 여야하지만 SHOW VARIABLES는이를 표시하지 않습니다.
- innodb_doublewrite = OFF
- 파일 시스템 = ZFS (그리고 내 sysadmin이 이것을 찾았습니다 : http://blogs.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices )
테스트
- innodb_flush_method는 O_DIRECT로 표시되지 않습니다.
- RolandoMySQLDBA의 설정을 따릅니다.
중요한 것을 놓친 경우 알려주세요
건배
최신 정보
RolandoMySQLDBA의 응답에서 innodb_flush_method + 3 x 스레드 설정 변경
결과 :> 테스트에 사용 된 1 코어 = 긍정적 인 결과
\G
. 또한 5.5 SHOW INNODB STATUS
에서는 유리하게 사용되지 않는다고 생각합니다 SHOW ENGINE INNODB STATUS
(명령 행에서 전자를 실행하는 중에 오류가 발생합니다)