과학적인 데이터 분석을 위해 워크 스테이션에서 MySQL 5.5 서버를 실행하고 있으며 성능 측면에서 최대한 활용하기 위해 MySQL을 구성하는 방법이 궁금합니다. 필자가 일반적으로 실행하는 쿼리 유형에는 10-20 개의 테이블 조인이 포함되며 예외없이 전혀 1 분에서 몇 분 정도 실행될 수 있습니다. 동시에 데이터베이스에 액세스하는 사용자는 거의 없습니다 (최대 5 명). 2.2GHz 듀얼 코어 및 4GB RAM을 갖춘 Lenovo Thinkpad T61에서 수동으로 선택한 구성 요소가있는 다음의 새로운 시스템으로 서버를 옮겼습니다.
- Intel i7 3770, 4x 3.4GHz (@ 4x3.7GHz에서 실행)
- Z77 칩셋
- 16GB의 DDR3 1600 RAM
- Windows 7 Prof 64 비트
- Windows 및 MySQL 서버는 Intel 520 시리즈 SSD 드라이브에서 실행됩니다.
첫 번째 테스트 (두 컴퓨터에서 동일한 쿼리를 실행)는 새로운 테스트의 속도가 확실히 향상되었지만 쿼리에는 여전히 많은 시간이 걸리며 더 많은 향상이 예상되었습니다. 문제의 쿼리는 상당히 최적화되어 있습니다. 즉, 모든 테이블에는 "확장 된 설명"으로 사용되는 적절한 키가 있습니다.
이제 현재 MySQL 설정으로 : 먼저 오래 전에 MyISAM에서 Innodb로 옮겼 음을 언급해야합니다.
my.ini 일부 조정 (예 : 기본 설정에서 출발) :
# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M
general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries
누군가 위의 숫자 또는 내가 모르는 추가 설정을 변경할 것을 제안하고 싶습니다.
도움이 되신 의견에 감사드립니다.
스티브
편집 : 10-20 테이블에서 조인과 관련된 두 가지 쿼리가 있으며 Lenovo 노트북과 새 PC에서 쿼리를 실행했습니다. 쿼리 # 1은 새 컴퓨터에서 3m36s를 사용했고 랩톱에서는 9m11s를 사용했습니다. 쿼리 # 2는 워크 스테이션에서 22.5 초, 랩톱에서 48.5 초를 차지했습니다. 따라서 실행 속도는 대략 2-2.5 배 향상되었습니다. 워크 스테이션에서는 RAM의 50 %조차 사용되지 않았습니다. Windows 작업 관리자가보고 한대로 4 개의 코어에서 평균 CPU로드는 약 13 %에 불과했습니다. 코어 별로드 (Core Temp에 의해보고 된대로)는 ONE 코어의 경우 약 25-40 % 였고 다른 코어의 경우 <= 10 %였으며 이는 MySQL이 단일 쿼리에 여러 코어를 사용하지 않음을 나타냅니다. .