2016-08-14 2 views
2

laravel 5.1을 사용하고 있으며 거의 ​​0.2 백만 행이있는 mysql 테이블을 업데이트하려고합니다. 거의 25000 개의 행을 업데이트하고 이후에는 업데이트하지 않습니다. 이것을 업데이트하는 데 거의 1 시간 30 분이 걸립니다.Laravel artisan 명령이 잠시 후 중지됩니다.

제안 사항?

답변

0

먼저 확인하고 싶은 것이 몇 가지 있습니다. 당신이 당신의 MySQL의 오류 로그에서 얻을 당신이 당신의 PHP 오류 로그의 내용물 오류

  • (메모리 오류 등의 부족, 시간 초과 오류를 ...)
  • 어떤 오류가
  • 는 장기 실행을 죽이는 커널인가 프로세스 (예 : extreme resource starvation)

스크립트가 동일한 위치에서 일관되게 업데이트를 중지하면 예를 들어 해당 특정 문에서 SQL에 오류가 발생할 수 있습니다. 따라서 mysql이 PHP로 반환 한 에러를 체크하고 있는지 확인하십시오. 에러 핸들링에 대한 매뉴얼은 PDOMySQLi입니다.

PHP를 통해 200,000 개의 서로 다른 SQL 쿼리를 실행하는 경우 SQL 파서, 쿼리 실행 및 각 쿼리에서 결과 페치 단계를 수행하기 때문에 한 번에 하나씩 실행 속도가 느립니다. 예를 들어, LOAD DATA INFILE과 같은 더 빠른 대안이 있습니다. 예를 들어 MySQL의 전체 구문 분석기와 쿼리 실행 단계를 건너 뛰기 때문에 CSV에서 데이터베이스 개체 파일에 직접 쓸 수 있습니다. 이는 대용량 데이터를 데이터베이스에 한 번에 빠르게로드하는 데 유용합니다.

+0

처음에는 초당 6-7 개의 행을 업데이트하고 속도는 지속적으로 감소하며 거의 0으로 이동합니다. –

0

당신은 오류 로그를 확인합니다. 내 생각에, 당신은 25000 개의 원시가 잘 업데이트되고 그 후에 멈추었다 고 말했습니다. 업데이트 할 때 일부 데이터베이스 행 통과 오류가 발생할 수 있습니다. 파트별로 업데이트 테이블을 확인할 수 있으면이를 확인할 수 있습니다.

예 : 처음 업데이트 1-2000, 다음 2000-40000. 업데이트 20000-250000 범위 만 오류를 전달하면 프로그램이 정상이며 db 항목이 error.but 블록을 현명하게 통과 함을 의미합니다. load.it을 늘리면 프로그램이로드를 처리 할 수 ​​있는지 테스트 할 수 있습니다. 이것은 일종의 테스트 방법입니다.

엄청난 양의 데이터가 있고 컴퓨터 또는 서버 또는 개발 환경 성능에 따라 프로그램이 느려질 수 있습니다. 다시 요소를 시도하거나 코드를 최적화하여 성능을 향상 시키십시오. 또한 관계없는 데이터베이스 (mongodb)를 사용해보십시오. 많은 데이터를 처리 할 때 좋은 시간을 줄 수 있습니다. 나는 이것이 당신의 문제를 해결하는 데 도움이 될 것이라고 생각합니다.

+0

처음에는 초당 6-7 개의 행을 업데이트하고 속도는 지속적으로 감소하며 거의 0으로 이동합니다. –

관련 문제