큰 텍스트 파일이 4GB, 800 만 라인 이상 있습니다.이 파일을 한 행씩 읽고, 일부 처리하고 sybase에 정보를 업데이트하는 perl 스크립트를 작성하고 있습니다. 내가 배치 방식으로, 업데이트 커밋을 위해 배치 당 1000 라인을했는데, 여기에 문제가 생겼다. 처음에는 배치가 10 ~ 20 초 밖에 들지 않지만, 처리가 진행되면 배치 업데이트가 느려지고 느려진다. 3 ~ 4 분의 비용이 소요됩니다. 왜 이런 일이 벌어지고 있는지 전혀 알 수 없습니다! 어떤 몸이라도 분석가가 원인이 될 수있는 것을 도울 수 있습니까? 내 무릎에 사전에 감사 ...sybase 업데이트 속도가 느려지고 느려집니다.
1
A
답변
0
염두에 포인트 아래에 보관하십시오.==> 나는
을 SYBASE하기 위해 정보를하시기 바랍니다, 라인별로이 파일 라인을 읽을 일부 처리를하고 업데이트하는 펄 스크립트를 쓰고 있어요 한 번에 전체 처리를 수행하면 한 번에 소스 파일을 처리 할 수 있습니다. 요구 사항에 따라 해시, 배열을 사용하여 데이터 구조를 준비한 다음 데이터베이스에 데이터를 삽입하기 시작합니다. 데이터베이스에 대용량 데이터를 삽입하는 동안
1- 각 열 데이터가 너무 크지 않으면 전체 데이터를 한 번에 삽입 할 수 있습니다. 처리해야하는 데이터 집합에 따라 크기가 다른 RAM이 필요할 수 있습니다.
2 한 번에 데이터를 삽입 할 수 있도록 perl DBI의 execute_array를 사용해야합니다.
3- 데이터를 삽입하기에 충분한 RAM이없는 경우 데이터를 삭제하십시오 (매회 8 줄, 1 백만 줄 수 있음).
4- 또한 문장을 한 번 준비해야합니다. 모든 작업에서 새로운 데이터 세트로 실행 중입니다.
5- auto_commit을 해제하십시오.
perl DBI의 execute_array를 사용하는 샘플 코드. 나는 mysql에 약 1 천만 개의 데이터를 삽입하기 위해 이것을 사용했다.
ur 데이터는 배열 형태로 다음과 같은 배열로 보관하십시오. @ column1_data, @ column2_data, @ column3_data
print $logfile_handle, "Total records to insert--".scalar(@column1_data);
print $logfile_handle, "Inserting data into database";
my $sth = $$dbh_ref->prepare("INSERT INTO $tablename (column1,column2,column3) VALUES (?,?,?)")
or print ($logfile_handle, "ERROR- Couldn't prepare statement: " . $$dbh_ref->errsr) && exit;
my $tuples = $sth->execute_array(
{ ArrayTupleStatus => \my @tuple_status },
\@column1_data,
\@column2_data,
\@column3_data
);
$$dbh_ref->do("commit");
print ($logfile_handle,"Data Insertion Completed.");
if ($tuples) {
print ($logfile_handle,"Successfully inserted $tuples records\n");
} else {
##print Error log or those linese which are not inserted
my $status = $tuple_status[$tuple];
$status = [0, "Skipped"] unless defined $status;
next unless ref $status;
print ($logfile_handle, "ERROR- Failed to insert (%s,%s,%s): %s\n",
$column1_data[$tuple], $column2_data[$tuple],$column3_data[$tuple], $status->[1]);
}
}
관련 문제
- 1. watchOS2 animateWithDuration이 느려지고 속도가 올라갑니다.
- 2. mongoDB의 속도가 느려지고 느려짐
- 3. IIS없이 인터넷 속도가 느려집니다.
- 4. 콘솔 속도가 느려집니다
- 5. tsql 병합 속도가 느려집니다.
- 6. 페이지 확대 속도가 느려집니다.
- 7. 다운로드 속도가 느려집니다.
- 8. 소켓을 사용하면 속도가 느려지고 있습니다.
- 9. QFileDialog로 인해 응답 속도가 느려집니다.
- 10. QTcpSocket 고주파 쓰기 속도가 느려집니다.
- 11. 응용 프로그램의 Win 속도가 느려집니다.
- 12. ARC를 보유/해제하면 속도가 느려집니다
- 13. ASP.NET 응용 프로그램이로드 속도가 느려집니다.
- 14. TCP 서버 처리 속도가 느려집니다.
- 15. 수식 속도가 느려집니다. 이 줄이없는
- 16. addsubview를 다시 호출하면 속도가 느려집니다.
- 17. 서블릿 : response.setContentLength() 다운로드 속도가 느려집니다.
- 18. BerkeleyDB-JE에 데이터를 삽입하는 속도가 느려지고 느려짐
- 19. Java 알고리즘을 처음 시작한 후 속도가 느려지고 느려지는 원인은 무엇입니까?
- 20. fetchall에서 Python 속도가 느려지고 fetchall이 응답하지 않습니다
- 21. AndroidFFmpeg 사용시 동영상 재생 속도가 느려지고 지연됩니다.
- 22. MongoDB map-reduce 속도가 느려지고 메모리가 부족합니다.
- 23. 외부 뷰가 렌더링 속도가 느려지고 있습니다.
- 24. Magento - 확장 프로그램이 크롤링 속도가 느려지고 있습니다.
- 25. 무한 스크롤 속도가 느려지고 새 콘텐츠가로드되지 않습니다.
- 26. 많은 수의 UPDATE 쿼리가 페이지 속도가 느려집니다.
- 27. Lucene 색인 생성이 실행될 때마다 속도가 느려지고 느려짐
- 28. 인스턴스 렌더링을 사용할 때 OpenGL의 속도가 느려집니다.
- 29. 웹 서버의 대용량 파일을 압축하여 속도가 느려집니다.
- 30. 화면이 꺼져있을 때 Android가 "속도가 느려집니다"
답장을 보내 주셔서 감사합니다. – user2922670