멀티 코어 및 MySQL 성능


38

RAM의 중요성은 확립 ​​된 사실이지만 MySQL의 CPU 사용과 관련하여 코어 및 멀티 스레딩의 중요성에 대한 자료는 훨씬 적습니다. 4cores에서 6cores vs 8cores에서 MySQL을 실행하는 것의 차이점에 대해 이야기하고 있습니다.

다른 스토리지 엔진이 CPU를 다르게 사용합니까?



멀티 코어 CPU에 대한 다른 스토리지 엔진의 동작을 다루지는 않습니다.
Rick James

1
과연. 그렇기 때문에 "중복으로 마감"투표가없는 이유는 ...
gbn

이곳은 훌륭한 커뮤니티입니다. 저는이 사이트를 어떻게 사용하는지 아직도 배우고 있습니다.
Rick James

안녕하세요 여기를 살펴 버디 : mysql-cluster-blog.com 당신은 적어도 뭔가를 찾을 수

답변:


30

MySQL의 경우 두 가지 기본 범주에 속한다는 점을 제외하고 스토리지 엔진간에 비교는 없습니다.

MySQL은 여러 스토리지 엔진을 사용합니다.

나열된 스토리지 엔진의 경우 ACID를 준수하는 유일한 엔진은 InnoDB 및 NDB입니다. 왜이 importatnt가 언급됩니까? 두 가지 이유 :

  • 다른 스토리지 엔진에는 기본 디스크 I / O, CPU 사용량 및 전체 처리량 외에 더 많은 코어가 있으면 그다지 이점이 없습니다.
  • 스토리지 엔진에 관계없이 기본적으로 14 개의 내부 작업을 지시하는 각 비 트랜잭션 스토리지 엔진의 코드는 여러 코어의 액세스를 활용하도록 설계되지 않았습니다.

MySQL 5.5의 InnoDB, InnoDB Plugin) 및 Percona Server의 XtraDB에는 여러 코어에 액세스하기 위해 설정할 수있는 옵션이 있습니다 (Percona Server는 더 오래 사용함). 실제로 Percona는 MySQL 소스 코드의 새로운 GA 릴리스마다 InnoDB의 성능 향상을 위해 약 30,000 줄의 코드를 삽입합니다. 오라클은 멀티 코어 운영을 위해 InnoDB 내에서 실행하기 위해 자체 싱크 탱크에서 자체 개선 사항을 포함했는지 확인할 수 있습니다 (MySQL 5.1.38부터).

행 / 페이지 잠금과 함께 데이터에 대해 MVCC 를 수행해야하므로 트랜잭션 성능을 계측, 측정 및 구성 할 수 있습니다.

여러 코어를 사용하는 방법에 대해 배운 것이 있다면 InnoDB에 의존하지 않고 InnoDB를 효과적으로 튜닝해야 한다는 입니다.

업데이트 2011-09-20 08:03 EDT

모든 코어로부터 혜택을받는 InnoDB와 관련하여, 우리는 일을 박해해야합니다. 코어는 데이터베이스 서버의 다른 문제 (OS, 디스크, 메모리, 응용 프로그램, 모니터링 등)에도 집중해야합니다. 예산이 적당하지 않은 사람들에게는 데이터베이스 서버가 NFS를 제공하고 Munin의 모니터링, JBoss, PHP에 대한 앱 지원을 제공하는 경향이 있습니다. MySQL, 특히 InnoDB에서 더 많은 코어를 사용 하려면 데이터베이스 서버를 MySQL 전용으로 사용해야하고 OS / 디스크 / 메모리는 MySQL 만 사용해야합니다 . 이러한 관점에서 InnoDB는 의심의 여지없이 더 많은 코어를 참여시킬 것 입니다.

InnoDB Plugin에 관해서는 MySQL의 일부에서 더 나은 InnoDB를 갖기위한 초기 계획을 보여주기 위해 언급되었다. 더 많은 핵심 활동을 소환하는 새로운 변수는 MySQL 5.1.38에서 분명해졌습니다.

예를 들어, innodb_read_io_threadsinnodb_write_io_threads (MySQL 5.1.38 이후)는 읽기 및 쓰기에 지정된 수의 스레드를 할당합니다. 기본값은 4이고 최대 값은 기본 및 최대 설정이 너무 다른 것 64입니다 (4-64) 보여줍니다 당신이 그것을 구성으로 멀티 스레드 및 집중 핵심으로 이노입니다 !

Pernoa는 InnoDB로 더 많은 코어에 액세스하기 위해 MySQL 커뮤니티의 요구를 해결했습니다. 결과적으로 MySQL은 그에 따라 시작했습니다. Oracle (yuck)이 더 많은 핵심 활동을 위해 필요한 개선을했다는 것을 인정해야합니다.


위에서 제안한대로 MySQL 5.5에서 InnoDB를 조정하면 모든 코어에서 혜택을 볼 수 있습니까? {InnoDB 플러그인에 대한 혼란 스러움}
Rick James

@Rick-답변에 대한 귀하의 의견을 더 처리했습니다
RolandoMySQLDBA

여기서는 완전히 다른 이야기 인 것처럼 보이고 MyISAM은 멀티 코어를 사용할 때 얼굴이 평평 해 보이지만 dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb의 다른 측면에서 MyISAM은 장점. 따라서 어떤 길을 갈 것인지 결정하는 것이 넥타이 인 것 같습니다.
Rick James

2
그것은 모두 MyISAM 또는 InnoDB 사용 목적에 달려 있습니다. 무엇을 얼마나 많이 캐시 하시겠습니까? 데이터 검색을 위해 MySQL 또는 기타 캐싱 메커니즘 (예 : 니스 및 memcached)을 사용하십니까? 하드웨어가 InnoDB에 맞게 확장 되었습니까? SQL SELECT의 98 %가 있습니까? 테이블이 고속 읽기에 가장 적합한 형식입니까? 이러한 질문에 대답하면 스토리지 엔진 선택, 적절한 구성, 하드웨어 선택, 고 가용성, DB 토폴로지, 읽기 / 쓰기 분할과 같은 더 깊게 도달 할 수있는이 목록에 대해 안내해야합니다.
RolandoMySQLDBA

9

코어를 사용 하는 스토리지 엔진에 대한 이야기는 초보자에게는 오해의 소지가 있습니다. 프로그램이 충분히 다중 스레드 인 경우 운영 체제는 가능한 한 많은 코어에서 프로그램을 예약합니다.

CPU 스케일링을 제한하는 특정 문제는 내부 잠금 코드 ( 뮤텍스 )에 경합이 있고 스레드가 동시에 실행되지 않는 경우입니다. 모든 스토리지 엔진에는 뮤텍스가 필요하지만, MyISAM에는 핫 엔진이 있습니다.

우리가 잠시 동안 뮤텍스 경합을 무시하고 주요 질문으로 돌아 가면 많은 코어를 갖는 것이 얼마나 중요합니까? -

사용자 대면 요청을 처리하는 워크로드를위한 많은 코어를 보유하고 있습니다. 값이 많으면 쿼리 시간 간의 차이를 줄일 수 있습니다. 이것을 12 개의 통로가 열려있는 것과 2 개의 통로가있는 수퍼 마켓에 줄 지어있는 것처럼 생각하십시오.

업데이트 : 수직 확장 성 (멀티 코어)이 중요한 이유에 대한 블로그 게시물 을 작성했습니다 .


5
방에있는 코끼리를 언급하기 위해 +1 : 뮤텍스 경쟁
cerd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.