SQL Server가 교착 상태 메시지를 반환하도록 설정을 개선하는 방법에 대한 제안을 받고 싶습니다. TaskParallel 라이브러리를 실제로 사용하는 여러 스레딩 응용 프로그램이 있고 각 작업은 저장된 프로 시저를 사용하여 테이블에서 ID를 선택하여 처리에 사용합니다. 나는 즉시 같은 성명의 테이블에서 그 id를 삭제하고 그것이 교착 상태의 원인이라고 생각한다. 이 테이블은 색인이없는 고유 ID의 한 열로 구성됩니다. 일괄 삭제를 주기적으로 수행하는 것을 고려했지만, 이는 여러 서버에서 사용 된 ID의 집계를 유지하는 것을 의미합니다.교착 상태 트랜잭션 - 통신 버퍼 리소스
CREATE PROCEDURE [dbo].[get_Ids]
@id nvarchar(20) OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Select top 1 @id = siteid from siteids
delete siteids where siteid = @id
END
이 작업을 수행하는 더 나은 방법이 있나요 : 여기
내 SQL 저장 프로 시저입니까? 내 프로세스는 매우 빠르게 작동하며 웹 요청 서비스에서이 ID를 요청했지만이 작업에는 3 초가 걸렸습니다.
답장을 보내 주셔서 감사합니다. 그의 원인은 하루에 약 5 천만 건의 거래가 발생하여 막대한 손실을 입을 것이며 초당 여러 스레드로 처리됩니다. 나는 그것을 시도 할 것이다. – vbNewbie
@vbNewbie는 다른 단순한 선택 방법에별로 관심이 없습니다. 장소에 넣고 siteid 색인을 추가하고 어떻게 작동하는지 확인하십시오. 여전히 문제가있는 경우 - 새로운 세부 사항으로 다시 방문하십시오. nvvarchar 대신 정수를 사용하는 것이 더 빠를 수도 있습니다. siteid [link] (http://stackoverflow.com/questions/3284297/sql-server-int-vs-nvarchar-comparison-on-performance)를 참조하십시오. – MaximR
여전히 교착 상태에 빠졌지 만 재시도 코드를 추가 했으므로 최소한 내 처리가 이전보다 훨씬 빠릅니다. 같은 DB에있는 테이블에 삽입하기 때문에 워크로드에 영향을 미칠지 궁금합니다. – vbNewbie