2009-07-24 3 views
1

SQLite 연결로 데이터베이스 연결 시간 초과가 발생한다고 생각하지만 연결 시간 제한을 늘리는 방법을 모르겠습니다. 명령 제한 시간은 ConnectionString.DefaultTimeout으로 설정할 수 있지만 Connection.ConnectionTimout은 읽기 전용입니다. 어떤 제안?System.Data.SQLite에서 ConnectionTimeout을 설정하십시오.

덕분에, 브라이언

답변

10

SQLite는 쿼리에 대한 기본 (30초) 제한 시간을 초과하는 무언가가 당신의 접근 방식에 잘못되었다는 강한 표시입니다.

시간 초과는 일반적으로 동시 연결 수가 너무 많을 때 발생합니다. 인터리브 된 쓰기/읽기 트랜잭션이있을 때 SQLite는 제대로 작동하지 않습니다.

단일 트랜잭션에서 관련 SQL 문을 청크했는지 확인하십시오 (성능 향상은 x1000 일 수 있습니다!).

다른 팁 : 기본적으로 트랜잭션 (BeginTransaction)을 시작할 때 기본 동작은 쓰기 잠금을 즉시 얻는 것입니다. 대신 BeginTransaction (deffered) 버전을 사용하고 실제로 필요할 때까지 쓰기 잠금 획득을 연기하도록 지정하십시오. 여러 독자가있을 경우 도움이 될 것입니다. 이제는 독자가 동시에 실행할 수 있기 때문입니다.

+0

감사합니다. –

+1

이것은 누군가가 줄 수있는 최선의 조언입니다. 종종 답이 하드웨어에 더 많은 하드웨어를 던지는 것이 아니라 (연결 시간 제한 변경) 오히려 성능 문제의 근본 원인 인 쿼리를 찾는 경우가 있습니다. 그리고 그것은 힘들 수 있습니다. 많은 데이터베이스에서 성능 프로파일 링을 수행했는데 일부 성능 문제가 발생하기까지 수 주일이 걸릴 수 있지만 하드웨어를 더 많이 던지면 오랜 답이 아닙니다. –

관련 문제