2013-12-17 6 views
2

많은 파티셔닝 된 테이블 크기가 100GB 이상인 MySQL DB (OLD_DATA)가 있습니다. 서버 성능을 향상시키기 위해 우리는 병렬 DB (NEW_DATA)를 생성하고 NEW_DATA에 새로운 데이터를 수집하기 시작했습니다.대용량 데이터베이스 용 MySQL 메모리 사용량

DB는 MyISAM이고 서버에는 96GB RAM이 있습니다.

이 후에 OLD_DATA는 액세스되지 않습니다.

이 접근 방식은 RAM 및 CPU 사용량 측면에서 서버 성능을 향상시키는 데 도움이됩니까? OLD_DATA의 데이터가 메모리에로드됩니까?

+1

데이터베이스는 일반적으로 전체 데이터베이스를 한 번에 메모리에로드하지 않습니다. 인덱스 (및 기타 클러스터링 기술)를 사용하면 알고리즘 선택과 데이터 액세스가 원활 해집니다. 즉, 필요할 때 필요한 것을 읽을 수 있습니다. – user2864740

+0

새 데이터를 쿼리하는 방법과 현재 가지고있는 인덱스를 설정하는 방법에 따라 달라집니다. 새로운 테이블로 이동하면 성능이 향상되지 않습니다. 메모리가 많으므로 빠른 쿼리를위한 좋은 인덱스를 구축 할 수 있어야합니다. –

+0

의견을 보내 주셔서 감사합니다. 인덱싱과 최적의 쿼리가 필수적이라는 데 동의합니다. 하지만 새로운 DB로 이전하는 방식으로 오래된 DB를 격리하려고 했으므로 오래된 DB는 메모리를 차지하지 않습니다. – user1434805

답변

0

SHOW CREATE TABLE을 제공해주십시오. 당신이 암시하는 것처럼 그것이 PARTITIONed라면, 우리는 그것을 분석에 반영 할 필요가 있습니다.

일반적으로 "오래된"행이 더 이상 액세스되지 않으면 상처를 입지 않으며 수행 한 작업을 수행 할 필요가 없습니다. "천천히"느껴지는 검색어에 대해 자세히 알려주십시오. 가급적이면 EXPLAIN SELECT을 입력하십시오.

MyISAM은 "key_buffer"에서 인덱스 블록을 캐시합니다. 색인이 얼마나 큰가요? key_buffer_size은 (으)로 설정되어 있습니까? 데이터 블록은 OS에 의해 캐시됩니다.

시스템이 RAM의 여러 배인 데이터 세트를 갖고있는 것은 '보통'입니다. 성능은 데이터 세트의 '작업 세트'와 데이터를 얼마나 적극적으로 쿼리하는지에 달려 있습니다. "오래된"행이 사용되지 않으므로 '작업 세트'의 일부가 아닙니다.

"테이블 스캔"이있는 경우 전체 테이블이 작업 세트의 일부입니다. 이러한 쿼리를 변경하는 방법에 대한 조언을 더 잘 할 수 있습니다.