2014-01-31 4 views
0

때때로 교착 상태가 발생하는 MSSQL 인스턴스에 문제가 있습니다. 나는 온도 측정 값을 가지고있는 표 A를 가지고있다. 내 응용 프로그램에는 원격 위치에서 TCP를 통해 측정 값을 수집 한 다음 데이터베이스 내부에 저장하려는 1-10 개의 작업자 스레드가 있습니다. 물론이 노동자들은 업무를 수행하기 위해 거래를 사용합니다. 트랜잭션의 IsolationLevel은 ReadCommitted으로 설정됩니다. 여전히 교착 상태가 발생하고 데이터베이스 서버의 CPU로드가 100 %가됩니다. 아무도 말해 줄 수 없어,이 일을하기 위해서 무엇을 고려해야 하는가? 데이터베이스 시스템이 나를 위해 다중 사용자 동기화를 수행 할 것으로 생각했습니다. 적어도 이것은 내가 대학에서 배운 것입니다.MSSQL 다중 사용자 액세스

+0

또한 대학에서는 교착 상태가 '다중 사용자 동기화'를 보장하는 데이터베이스의 결과라고 가르칩니다. [교착 상태 감지 및 종료] (http://technet.microsoft.com/en-us/library/ms178104(v=sql.105) .aspx)를 읽으십시오. '테이블 A '에 대한 색인이 누락되었습니다. –

답변

0

내 제안은 데이터베이스에 업데이트를 처리 할 다른 스레드를 만드는 것입니다. 따라서 스레드로부터 컬렉션의 정보를 스레드에 안전하게 추가하고 1 개의 작업자 스레드가 테이블에 업데이트/삽입을 수행하게하십시오. 이 문장 중 10-30 개를 연결하여 함께 실행할 수도 있습니다.

이것은 우리가 각 100ms마다 SMS를 보내는 50 개의 스레드를 사용하는 SMS 보낸 사람에 대해 수행 한 작업입니다. 그것은 우리를 위해 훌륭하게 일했습니다.

+0

이것은 꽤 똑같습니다. 나는 생각해 냈습니다. 그러나 웹 서비스로 저장된 데이터를 제공하는 또 다른 응용 프로그램이 있습니다. – Coxer

+0

업데이트하는 동일한 테이블에서 선택하기 때문에 대부분 데드락이 발생합니다. 다른 응용 프로그램에서 select를 수행 할 때'WITH (NOLOCK)'을 추가하거나 격리 수준을 READ UNCOMMITTED로 변경하십시오. (http://stackoverflow.com/questions/686724/sql-when-should-you-use-with-nolock). 한 쪽에서 데이터를 롤백하지 않고 웹 서비스를 선택하는 동안 다른 곳에서 다른 업데이트를 수행하지 않으면 문제가 발생하지 않습니다. – Jaques

+0

그리고 웹 서비스가 편집 기능을 제공한다면? – Coxer