2012-02-12 1 views
1

우리는 mysql을 사용하고 있습니다. 우리는 10 억 개의 행을 포함하는 거대한 테이블을 가지고 있습니다. 엔진은 InnoDB입니다. 그리고 우리는 50 % SELECT, 30 % UPDATE, 기타 분당 20 %를 가지고 있습니다. 우리는 성능을 향상시키기 위해 단일 테이블을 다중 테이블로 분할했습니다. 그러나 분할하여 성능이 약간 향상되지는 않았 음을 확인했습니다. 왜? 분할 표가 성능을 향상시키는 것이 상식입니까?데이터를 다중 테이블로 분할해도 성능이 향상되지 않는 이유는 무엇입니까?

서버는 4 코어, SCSI RAID 5 하드 디스크, 32GB 메모리입니다. 단 하나의 단일 서버.

+0

사용 사례에 대한 추가 정보가 필요하십니까? 나는 일반적으로 행을 분할하는 것이 최근 테이블 (훨씬 적은 수의 레코드가 있음)과 아카이브 테이블이있을 때 성능이 향상된다고 생각합니다. 이는 훨씬 드문 경우에 맞았습니다. 귀하의 신용 카드를 온라인으로보고 생각하고 있습니다. 최근 변환은 표 1에 있고 표 2는 최근 과거의 전체 기록을 갖습니다. 당신은 최근에 항상 보지만 역사는 훨씬 적습니다. 아카이브를 살펴볼 필요가 없을 때는 아무런 개선도 없었습니다. – Prescott

+0

테이블은 사용자 가입 정보로 사용됩니다. 새로운 사용자 (핸드폰 번호)가 서비스를 구독하면이 테이블에 행을 삽입합니다. 사용자가 이미 Google 플랫폼에있는 경우 테이블을 업데이트하고 사용자가 서비스 가입을 취소하려면 해당 사용자의 레코드도 업데이트하십시오. – Gao

+3

사용자를 삽입하려면 두 테이블을 통해 사용자가 존재하는지 확인해야합니까? 업데이트하려면 두 테이블을 모두 확인하여 사용자가 있는지 확인한 다음 삽입하십시오. 어떻게 테이블을 나누는거야? 그게 네 방법이야? – Prescott

답변

0

질문에 대한 정보를 바탕으로 : 단일 RAID 세트가 있습니다.

그래서 하나의 테이블이 있었을 때 그 RAID 세트에있었습니다. 테이블을 분할 할 때 새 테이블은 모두 동일한 RAID 세트에있었습니다. 따라서 성능 이점이 없습니다.

이제 2 개의 테이블을 처리해야하므로 실제로 성능이 저하됩니다.

성능을 향상 시키려면 데이터를 다른 디스크에 저장하는 데 필요한 최소의 성능이 필요합니다. 샤딩을 사용하여 다른 서버에 데이터를 배치하는 것이 바람직합니다.

일부 비교 참조 : http://xeround.com/blog/2011/11/mysql-sharding-vs-mysql-partitioning

관련 문제