-1

내 웹 사이트에서 내 사용자에게 대량 초대장을 보내고 있습니다. 그 때문에 나는 mysql에 저장된 프로 시저에 전자 메일이 들어있는 쉼표로 구분 된 문자열을 전달하고있다. 이 저장 프로 시저에서 while 루프는 각 전자 메일을 구문 분석하고 (substring()을 쉼표로 구분하여 사용) 기존 데이터베이스를 검사 한 다음 테이블에 삽입하면 부재 중일 경우 또는 해당 전자 메일이 이미 존재하는 경우 guid가있는 전자 메일 링크를 생성합니다. 프로세스가 작은 배치 (예 : 200-250 전자 메일 미만)에서는 제대로 작동하지만 배치가 더 크면 (250 개 이상의 전자 메일) 전체 프로세스가 멈추고 다음 요청이 교착 상태 오류가 발생합니다 (원래 오류는 다음과 같습니다. 잠금 해제, 트랜잭션 재시작 시도 "). 그래서, 내 자바 스크립트 또는 C# 파일 (프로그래밍 언어 파일)에서 while 루프를 수행하고 각 전자 메일을 저장 프로 시저에 보내도록 계획했습니다. 위의 시나리오에서 mysql 연결 수가 증가하고 최대 연결 오류가 발생할 수 있습니다.잠금을 시도 할 때 교착 상태가 발견되었습니다. 거래를 다시 시작하십시오.

그래서, mysql을 사용하여 이런 종류의 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

0

나는 한 번에 프로 시저 하나에 이메일을주는 것이 정확한 해결책이지만 아직 각 항목에 대해 새로운 연결이나 새 요청을 할 필요가 없다고 생각합니다. 대부분의 언어는 준비된 명령문 실행 (and here's the answer on how to use them in C#)을 지원합니다.

교착 상태는 자신의 코드로 인해 발생할 수 있지만이를 알려주는 것은 어렵지 않습니다. 어쩌면 당신의 절차가 재진입 적이 아니거나 데이터가 다른 장소에서 액세스 될 수 있습니다.

+0

@kworr에게 감사하지만 매우 느리게 수행 중이며 교착 상태에 대해 오류가 발생하고 있습니다. –

+0

실제로 준비된 문은 매번 SQL을 구문 분석 할 필요가 없으므로 훨씬 빠르다. mysql에서 전체 문자열을 더 빠르게 분할 할 수도 있습니다. – kworr

+0

참조 용으로 다른 게시물 (http://stackoverflow.com/questions/19091968/deadlock-found-when-trying-to-get-lock-try-restarting-transaction-2nd-try)을 게시했습니다. 제발 나를 안내 해줘. 감사 –