엄밀히 말하면 RAM 문제일까요?


4

수십억 개의 레코드가있는 초대형 테이블을 가지고 있지만 두 필드 만 하나는 ID로하고 다른 하나는 텍스트를 사용하는 프로젝트에서 작업해야합니다.

그리고 ID는 BIGINT와 PK로 설정 될 것입니다. 그런 다음 행당 8 + 2 (오버 헤드 용으로 2 바이트 추가) 바이트가 색인으로 사용되는 경우 64GB RAM은 최소 50 억 개의 레코드 색인을 보유 할만큼 충분해야합니다.

그러나 내가 고려하고있는 유일한 요소.

내가 고려해야 할 다른 요소가 있다고 생각합니까?

그리고 RAM 크기는 필요할 경우 증가 될 수 있습니다. 그리고 그 테이블은 쓰기가 거의없고 읽기가 많은 가장 바쁜 테이블입니다.

+1

이 프로젝트에 대한 좀 더 자세한 정보를 요청해도 될까요?이 테이블은 어떤 용도로 사용 되나요?어떤 문제를 해결하려고합니까? 15 sep. 112011-09-15 07:14:14

3

MySQL은 각 스토리지 엔진마다 다르게 캐시하기 때문에 프로젝트에 사용할 스토리지 엔진을 고려해야합니다.

MyISAM은 인덱스 페이지 만 캐시합니다.InnoDB는 데이터와 인덱스 페이지를 캐시한다.

큰 ID를 가진 테이블을 가지고 있다면 MyISAM을 사용하기를 바랍니다.

다음은 최상의 key_buffer_size를 결정하는 데 도움이되는 쿼리입니다.

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

현재 데이터 세트가 주어지면 MyISAM 키 캐시 (key_buffer_size) 권장 설정이 제공됩니다 (the query will cap the recommendation at 4G (4096M). 32 비트 OS의 경우 4GB가 한계 the query will cap the recommendation at 4G (4096M). , 64 비트, 8GB의 경우).

업데이트 2011-09-16 14:49 EDT

InnoDB를 사용하고 있다면, key_buffer_size 크기를 조정하는 것이 도움이되지 않습니다.InnoDB and MyISAM cache differently .

다음은 InnoDB 버퍼 풀의 크기를 결정하는 동일한 종류의 쿼리입니다.

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
  0

흥미롭게도로드 하에서 더 잘 작동하기 때문에 InnoDB를 사용할 생각이다.그래서, 내가 당신의 대답에서 배웠던 것은 충분한 키 캐시가있는 한입니다.DB 크기는 중요하지 않습니까? 16 sep. 112011-09-16 16:56:43

  0

InnoDB를 사용하여 해결할 답변을 업데이트했습니다. 16 sep. 112011-09-16 18:49:40

  0

그러나 MyISAM의 최대 용량이 8GB라고 언급 했으므로 RAM 리소스가 효율적으로 활용되지 않을 것입니다.{너무 늦게 묻어서 죄송합니다.} 01 oct. 112011-10-01 22:14:09

+1

@ 게리 : 당신 말이 맞아요.key_buffer_size에 대해 8GB를 초과하여 할당 된 메모리는 낭비됩니다.MyISAM을 위해서 인덱스 페이지 만 캐시되기 때문에 이것은 중요합니다.특정 MyISAM 테이블 전용 키 캐시를 만들 수 있습니다 : http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 oct. 112011-10-01 22:41:42