문제

우리 앱에서는 SQL CE에서 LockTimeoutException이 발생하는 경우가 간헐적으로 발생합니다.최근에 3.5 SP 1로 업그레이드했는데 그 중 상당수가 사라진 것 같지만 여전히 가끔 볼 수 있습니다.나는 그것이 우리 코드(멀티 스레드)의 버그라고 확신하지만 그것을 정확하게 찾아낼 수는 없었습니다.이 문제를 디버깅할 수 있는 좋은 기술이 있는 사람이 있습니까?예외는 다음과 같이 기록됩니다(이러한 예외에 대한 스택 추적은 없습니다).

SQL Server Compact가 잠금 대기 시간을 초과했습니다.기본 잠금 시간은 장치의 경우 2000ms이고 데스크톱의 경우 5000ms입니다.ssce를 사용하여 연결 문자열에서 기본 잠금 시간 제한을 늘릴 수 있습니다.기본 잠금 시간 초과 속성입니다.[ 세션 ID = 6, 스레드 ID = 7856, 프로세스 ID = 10116, 테이블 이름 = 제품, 충돌 유형 = s 잠금(x 블록), 리소스 = DDL ]

우리 데이터베이스는 읽기 작업이 많지만 쓰기 작업은 거의 하지 않습니다. 생각하다 필요한 곳에는 모든 것을 보호해 뒀어요.

편집하다:SQL CE는 이미 자동으로 NOLOCK을 사용합니다. http://msdn.microsoft.com/en-us/library/ms172398(sql.90).aspx

도움이 되었습니까?

해결책

방금 3.5 SP1에는 고정할 수 있는 예외에 새로운 정보가 포함되어 있다는 것을 깨달았습니다.

SQL Server Compact가 잠금 대기 시간을 초과했습니다.기본 잠금 시간은 장치의 경우 2000ms이고 데스크톱의 경우 5000ms입니다.ssce를 사용하여 연결 문자열에서 기본 잠금 시간 제한을 늘릴 수 있습니다.기본 잠금 시간 초과 속성입니다.[ 세션 ID = 6, 스레드 ID = 7856, 프로세스 ID = 10116,테이블 이름 = 제품,충돌 유형 = s 잠금(x 블록),리소스 = DDL ]

열린 연결이 있어야 하는 기존 테이블을 삭제하려고 할 때 이 문제가 발생하고 있음을 확인할 수 있었습니다.

다른 팁

다른 사람이 이 페이지를 보게 된다면 이런 일이 발생할 수 있는 또 다른 이유를 발견했습니다.다양한 문을 래핑하기 위해 SqlCeTransaction을 만들었고 실수로 문 중 하나에서 해당 트랜잭션을 사용하지 않았습니다.이로 인해 잠금 시간 초과 메시지가 발생했습니다.

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