테스트를 위해 약 5 억 개의 행 가비지 데이터를 데이터베이스에 삽입하려고합니다. 지금은 SELECT/INSERT
진술을 각각 TRANSACTION
내부에 반복하는 PHP 스크립트가 있습니다. 이것은 분명히 최선의 해결책은 아닙니다. 테이블은 InnoDB (행 수준 잠금)입니다.포크 MySQL INSERT INTO (InnoDB)
내가 (제대로) 프로세스를 포크하면이 프로세스가 최대 속도가 이 될까요? 그것이 완료 될 때까지 140 시간이 걸릴 것입니다. 나는이 두 가지에 대한 걱정 :
INSERT
문 쓰기 잠금을 획득해야하는 경우, 다음이 분기 렌더링 쓸모없는, 여러 프로세스가 동시에 같은 테이블에 쓸 수 있기 때문에?저는
SELECT...LAST_INSERT_ID()
(TRANSACTION
안에 있음)을 사용하고 있습니다. 여러 프로세스가 데이터베이스에 연결될 때이 논리가 깨지십니까? 각 포크에 대해 새 데이터베이스 연결을 만들 수 있으므로이 문제를 피할 수 있기를 바랍니다.몇 개의 프로세스를 사용해야합니까? 쿼리 자체는 간단하며 일반적인 듀얼 코어 개발 상자에 2GB RAM이 있습니다. 나는 InnoDB를 8 개의 쓰레드 (
innodb_thread_concurrency=8
)를 사용하도록 설정했지만, 8 개의 프로세스를 사용해야하는지, 아니면 이것이 일치하는 방법에 대해서 생각하는 올바른 방법인지는 확실하지 않다.
도움 주셔서 감사합니다.
자세한 답변을 보내 주셔서 감사합니다. 걱정할 이유가별로 없다는 것을 알고 기뻐하십시오. – ash