문제

Linux 시스템 (768MB RAM)에 MySQL 5.1x 인스턴스를 설치했습니다. 약 1000 행의 백업을 복원했고 .NET 응용 프로그램 (다른 Windows 웹 서버에 배포 됨)을 통해 특정 읽기 작업을 수행했습니다. 테이블이 색인이 없다고 생각할 때 빠른 작업이 빠릅니다.

그런 다음이 행에서 서버를 지우고 다른 서버의 웹 애플리케이션에서 기능을 사용하여 행을 삽입했습니다 (기본적으로 텍스트 파일에서 텍스트를 읽고 사용자 정의 클래스의 필드에 데이터를 입력 한 다음 저장 프로 시저를 호출합니다. 각 레코드에 대한 이러한 매개 변수와 함께). 로컬 컴퓨터에 웹 사이트와 데이터베이스가 있으면 2500 행을 즉시 삽입합니다 (1 초 미만). 그러나 이제 "생산"환경에서 동일한 2500 행이 삽입되는 데 10 분이 걸립니다. MySQL의 설치와 함께 제공되는 기본 My.cnf를 사용하고 있습니다.

읽기 작업 속도를 손상시키지 않고 쓰기를 최적화 할 수있는 방법이 있습니까? 아니면 내가 분명한 것을 놓치고 있습니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

당신은 보셨습니까? 삽입 속도를위한 MySQL 매뉴얼 페이지? 나에게 떠오르는 첫 번째 추측은 당신이 2500 개의 절차 세트를 거래/커밋을 시작하십시오 성명서, 그래서 MySQL은 2500 개의 조치 각각을 자동으로 구분하고 있습니다.

다른 팁

Mark가 언급 한 문제 (트랜잭션 대신 자동 커밋) 외에도 배치 업데이트를 사용하여 확실히 조사합니다. 로컬 연결과 네트워크 연결 (매우 빠른 연결조차도)의 주요 차이점은 왕복 시간이기 때문입니다.

이 경우 대역폭은 제한 요소가 아니지만 데이터베이스에 2500 네트워크 라운드를 수행하면 로컬 컴퓨터보다 네트워크에서 확실히 더 오래 걸립니다.

배치 업데이트를 사용하면 해당 인서트가 이상적으로 단일 왕복으로 줄어들 수 있으며 실제로는 몇 가지만 줄어 듭니다.

불행히도 .NET 세계에서 배치 업데이트를 수행하는 방법을 알려줄 수 없습니다. PreparedStatement.addBatch(). .NET에 비슷한 것이 있다고 확신합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top