기본적으로 내 문제는 제가 17000000 개 정도의 제품으로 구성된 대규모 테이블을 가지고있어 많은 업데이트를 신속하게 적용해야한다는 것입니다.Mysql InnoDB와 신속하게 대형 업데이트 적용
테이블에 int (10) AUTO_INCREMENT로 설정된 ID가있는 열이 30 개 있습니다.
이 테이블에 대한 모든 업데이트가 저장되는 다른 테이블이 있습니다.이 업데이트는 계산하는 데 며칠이 걸리므로 미리 계산해야합니다. 이 테이블의 형식은 [product_id int (10), update_value int (10)]입니다.
이 1700 만 건의 업데이트를 신속하게 발표하기 위해 취하는 전략은 이러한 모든 업데이트를 루비 스크립트의 메모리에로드하고 배열의 해시로 그룹화하여 각 update_value가 키이고 각 배열이 정렬 된 product_id의 목록.
{
150: => [1,2,3,4,5,6],
160: => [7,8,9,10]
}
업데이트는 그때 PRODUCT_ID 년대의 분류 배치에 업데이트를 실행하는 것이 최적의 방법이 될 것을 나는 의미에서 올바르게하고 있어요 확신
UPDATE product SET update_value = 150 WHERE product_id IN (1,2,3,4,5,6);
UPDATE product SET update_value = 160 WHERE product_id IN (7,8,9,10);
의 형식으로 발행된다 mysql/innodb와 함께 해보자.
1300 만개의 레코드를 업데이트 할 때 테스트 할 때 약 45 분이 소요되는 이상한 문제가 발생했습니다. 이제 나는 더 많은 데이터, 약 1,700 만 건의 레코드로 테스트하고 있으며 업데이트는 120 분 가까이에 있습니다. 나는 여기에 어떤 종류의 속도 저하가있을 것이라고 기대 했었지만 내가 보는 정도는 아니었다.
내가이 속도를 높이거나이 더 큰 레코드 세트로 나를 감속시킬 수있는 방법에 대한 조언이 있으십니까?
서버 사양이 올라간다면 메모리/CPU 용량이 꽤 많으며 전체 DB는 메모리가 충분 해져야 성장할 수 있습니다.
innodb_ * 설정을 조정하여 "메모리 힙"을 활용할 수 있습니까? – hexist
그래, 서버 직원들은 꽤 잘 조정했다. – Marklar