[server] InnoDB (5GB 데이터베이스) 만 사용하는 8GB RAM 전용 MySQL 서버에 대한 최상의 MySQL 캐시 설정

성능을 위해 MySQL을 설정할 때 꽤 멍청한 놈입니다. 그리고 솔직히 MySQL에서 성능의 마지막 부분을 짜기위한 미세 조정에 대해 걱정하지 않지만 최상의 결과를 제공하는 가장 중요한 것은 캐시 / 버퍼를 올바르게 설정하는 것입니다.

스토리지 엔진으로 InnoDB 만 사용하여 일을 단순하게 유지하려고 노력했습니다. 그리고 MySQL 전용 서버가 있습니다. 8GB의 RAM이 있는데 성능을 최대화하려면 어떻게 할당해야합니까? 최고의 성능을 위해 전체 데이터베이스를 메모리에 맞출 수 있기를 원합니다. 데이터베이스는 약 5GB입니다. 이것이 가능한가?

쿼리 캐시에 얼마나 많은 메모리를 할당해야합니까? InnoDB 버퍼 풀은 얼마입니까? 컴퓨터의 나머지 부분 (예 : 비 MySQL 관련 프로세스)은 얼마입니까? 기타.

MyISAM을 사용하지 않기 때문에 키 캐시에 많은 메모리를 넣을 필요가 없습니까?



답변

데이터베이스 자체에 대해 많이 알지 못하면 어렵습니다. 알아야 할 몇 가지 도구가 있습니다.

전체 데이터베이스를 메모리에 저장하는 방법 데이터베이스에서 변경을 수행하는 모든 쿼리는 디스크에서 쓰기가 수행 될 때까지 열린 상태로 유지됩니다. 디스크의 병목 현상을 피할 수있는 유일한 방법은 쓰기 캐시가있는 디스크 컨트롤러입니다.

기본값에서 다음과 같이 변경합니다.

key_buffer_size = 128M
thread_stack = 128K
thread_cache_size = 8
table_cache = 8192
max_heap_table_size = 256M
query_cache_limit = 4M
query_cache_size = 512M

innodb_buffer_pool_size = 4G

# This is crucial to avoid checkpointing all the time:
innodb_log_file_size = 512M

# If you have control on who consumes the DB, and you don't use hostnames when you've set up permissions - this can help as well.
skip_name_resolve

그런 다음 상황이 어떻게 진행되는지 살펴보고 위에서 언급 한 도구의 출력을 기반으로 다른 것을 시도해보십시오. 또한 Munin 또는 Cacti 와 같은 모니터링 도구를 사용하여 트렌드를 그래프로 작성하여 실제로 처리중인 워크로드 유형을 확인합니다. 개인적으로 Munin과 함께 제공되는 MySQL 플러그인에 대한 훌륭한 경험이 있습니다.


답변

당신이 함께 갈 수 있어야 IMHO

innodb_buffer_pool_size=5G

서버 OS에 충분한 양의 RAM과 DB 연결을위한 메모리가있는 RAM의 62.5 %

@kvisle은 mysqltuner.pl을 사용하는 것이 좋습니다. 이 스크립트는 join_buffer_size, sort_buffer_size, read_buffer_size 및 read_rnd_buffer_size 전용으로 RAM의 양을 판단하는 데 탁월합니다. 함께 추가 된 4 개의 버퍼에 max_connections를 곱합니다. 이 답변은 정적 버퍼 (innodb_buffer_pool_size + key_buffer_size)에 추가됩니다. 합산 합계가보고됩니다. 그 합이 RAM의 80 %를 초과하면 버퍼 크기를 줄여야합니다. mysqltuner.pl은 이와 관련하여 매우 도움이 될 것입니다.

모든 데이터가 InnoDB이므로 key_buffer_size (MyISAM 인덱스 용 키 캐시 버퍼)를 매우 낮게 만들 수 있습니다 (64M 권장).

다음은 권장 크기 innodb_buffer_pool_size를 계산하기 위해 DBA StackExchange에서 작성한 게시물 입니다.

업데이트 2011-10-15 19:55 EDT

5GB의 데이터가 있다는 것을 알고 있다면 첫 번째 권장 사항은 정상입니다. 그러나 한 가지를 추가하는 것을 잊었습니다.

[mysqld]
innodb_buffer_pool_size=5G
innodb_log_file_size=1280M

로그 파일 크기는 InnoDB 버퍼 풀의 25 % 여야합니다.

업데이트 2011-10-16 13:36 EDT

25 % 규칙은 두 개의 로그 파일 사용을 엄격하게 기반으로합니다. 여러 개의 innodb 로그 파일을 사용할 수 있지만 일반적으로 두 개가 가장 효과적입니다.

다른 사람들은 25 %를 사용하여 표현했습니다

그러나 모든 공정성에서, 원래 InnoBase Oy 회사의 누군가는 더 큰 InnoDB 버퍼 풀을 가지고 있기 때문에 25 % 규칙을 사용하지 않는다고 표현했습니다 .

당연히, 많은 양의 RAM이 있으면 25 % 규칙이 작동하지 않습니다. 실제로 2 개의 로그 파일 만 사용하여 허용되는 가장 큰 innodb_log_file_size는 2047M입니다. 로그 파일의 결합 된 크기는 4G (4096M)보다 작아야하기 때문입니다.

사례 : 내 고용주의 클라이언트 중 하나에 RAM이 192GB 인 DB 서버가 있습니다. 48G 로그 파일을 가질 방법이 없습니다. innodb 로그 파일, 최대 2047M에 최대 파일 크기를 사용합니다. 내 대답에 대한 @Kvisle의 의견은 단순히 두 개의 로그 파일로 자신을 제한 할 필요가 없다는 링크를 제공합니다. N 개의 로그 파일이 있으면 총 4G를 가질 수 없습니다. 내 25 % 규칙은 완벽한 세상에 있습니다 (8GB 이하의 DB 서버).


답변