MySQL이 64GB RAM을 효과적으로 활용할 수 있습니까?


22

약 5 천만 개의 행이 있고 인덱스 크기가 4GB (테이블 크기가 약 6GB) 인 테이블을 쿼리하면 데이터베이스 서버가 메모리를 스왑하고 속도가 크게 저하되는 문제가 발생했습니다. 나는 이것이 임시 테이블 크기를 초과하고 디스크로 교체되는 것과 관련이 있다고 확신합니다.

데이터베이스 서버를 32GB RAM에서 64GB RAM으로 업그레이드 한 경우 MySQL 데이터베이스가이 추가 메모리를 완전히 활용할 수 있는지와 스왑이 아닌지 궁금합니다. 몇 가지 변수 (예 : KEY_BUFFER_SIZE 등)를 살펴본 결과 64GB 이상의 값 설정을 지원하는 것 같습니다. 그러나 MySQL 설명서에 따르면 tmp_table_size는 최대 4GB입니다.

그렇다면 메모리 업그레이드가 가치가 있습니까? "querying-large-table"문제가 이것으로부터 혜택을 받습니까, 아니면 4GB 제한 때문에 도움이되지 않습니까? 테이블을 다른 방식으로 분할하도록 재구성하는 것과 같은 다른 솔루션이있을 수 있지만 테이블에 대해 아무것도 변경하지 않으면 추가 메모리가 도움이됩니까?

또한 일반적으로 32GB에서 64GB RAM으로 이동할 때 MySQL이 이용할 수없는 다른 메모리 관련 변수가 있습니까?

우리는 데이터베이스 서버로 64 비트 리눅스 (우분투)를 사용하고 있습니다.

고마워, 갈렌

답변:


5

InnoDB를 사용하는 경우 설정해야 할 가장 중요한 변수는 innodb_buffer_pool_size입니다. 시스템 메모리의 약 80 %로 설정합니다. 사용 후 캐시가 예열되면 가장 활동적인 데이터 (작업 데이터 세트)는 메모리 (innodb_buffer_pool_size)에 있으며 작업 속도가 매우 빠릅니다. 64GB의 메모리를 사용하면 확실히 많은 것을 맞출 수 있습니다. 메모리는 항상 DB 서버에 적합합니다.


11

예-InnoDB를 사용하고 읽기 집약적 인 워크로드를 보유한 경우 대량의 RAM을 활용할 수 있습니다 (데이터 세트가 mem에 적합하다고 가정하면 서버가 엄청나게 빠릅니다).

메모리에 작업 세트에 맞는 8-16GB 서버에서 InnoDB 스토리지와 함께 MySQL을 사용하고 있습니다.


64GB 박스에서 InnoDB를 실행하면 좋습니다.
James

9

아마도 메모리에 돈을 소비하기 전에 시스템이 교체되는 원인을 조사하는 데 약간의 시간과 노력을 들일 가치가 있습니까?

32GB의 메모리는 전체 테이블, 인덱스 및 최대 temp_table을 메모리에로드 한 후에도 사용 가능한 메모리를 많이 남겨 둡니다. 빠른 검색으로 관련이있을 수있는 다음 두 가지 문서가 나타납니다.


0

매우 큰 임시 테이블이 작성되었다고 생각되면 임시 테이블을 피하기 위해 쿼리를 개선 할 수있는 방법을 고려할 수 있습니다.

Stackoverflow에 스키마, 쿼리, 설명 계획 및 문제에 대한 세부 정보가 포함 된 게시물을 게시 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.