2013-07-31 2 views
0

우리는 ASP.NET 4.0 (C#)을 사용하여 웹 응용 프로그램을 만들고 우리는 SQL Server 2005를 백 엔드로 사용하고 있습니다.SQL Server 2005 자주 발생하는 교착 상태

응용 프로그램 자체는 각 레코드가 한 달에 18 일 동안 4 명의 역할 담당자에 의해 증명되는 워크 플로 엔진입니다.

우리는 매달 1 일에 대략 200,000 개의 레코드를 가지고 있습니다.

(18 일) - 시스템 관리자가 이러한 기록의 소유권을 변경하는 중일 수 있지만 일부 사람들은 기록을보고 확인합니다.

내 질문이나 걱정은 우리가 자주 데이터베이스에서 교착 상태 문제가 발생한다는 것입니다.

일부 사용자는 키티에 10000 개의 레코드가있을 수 있으며 시스템 관리자는 수천 개의 레코드에 대한 소유권을 대량으로 변경할 수 있으며 그 시점에서 교착 상태가 발생하며 두 명 이상의 사용자 계정 laods와 함께 증명하려고 - 우리 교착 상태가 발생합니다.

우리는 트랜잭션과 함께 저장된 procs를 광범위하게 사용하고 있습니다. 이러한 상황을 코드화하는 방법이 있습니까?

또는 단순히 교착 상태를 피하십시오.

그런 우연한 방법으로 질문을 드리지 만 아무런 힌트 나 팁을 보내지 않으시면 사과드립니다. 문제에 대한 자세한 정보가 필요하면 알려주십시오.

감사

답변

0

몇 가지 제안 :

1) 테이블로 /로부터 읽기/쓰기 데이터의 순서를 사용합니다.

예 # 1 (읽기 - 쓰기 교착 상태가) : 읽기 A.로에서 읽은 다음 B와 B에서 읽고 다른 저장 프로 시저 usp_ReadB_WriteA에 기록하고 기록하는 저장 프로 시저 usp_ReadA_WriteB를 만드는이 blog post하십시오 마십시오.

예 2 (쓰기 기록 교착) 테이블 A에 다음 표 B와 동일한 테이블로 데이터를 쓰는 다른 프로 시저 usp_WriteB_writeA에 데이터를 기록하는 프로 시저 usp_WriteA_WriteB 생성 피 : 테이블 B를 다음 표에 A.

2) 트랜잭션 기간을 최소화하십시오. 영향을받는 행을 최소화하여 잠금 수를 줄이십시오. lock escalation에 대한 5000 개의 잠금 임계 값에주의하십시오.

3) 검색어를 최적화하십시오. 예 : 실행 계획에 [Clustered]{Index|Table}Scan, {Key|RID} LookupSort 연산자를 찾습니다. 인덱스를 사용하지만 인덱스의 수를 최소화하고 모든 인덱스의 크기를 최소화하려고 시도하십시오 (먼저 인덱스 키의 크기를 최소화하려고 시도하십시오). 이 blog post을 읽어주십시오.

+0

브릴리언트; 당신의 제안에 감사드립니다 - 제가 약간의 독서를하도록하겠습니다. –

+0

두 가지 더 : 4) 거래 중 UI 상호 작용을 제외해야합니다 ('트랜잭션 시작, 사용자 입력 대기, 데이터 삽입, 트랜잭션 완료'방지). 5) 많은 행에 영향을주는 긴 트랜잭션이있는 경우 테이블 변수에 해당 행을 저장하고 트랜잭션이 끝날 때 최종 데이터 수정을 수행 할 수 있습니다 (예 : 'BEGIN TRAN; ... INSERT INTO @TableVarA SELECT ... FROM. ..UPDATE @TableVarA ... INSERT INTO @ 테이블 바브 ... DELETE @ 테이블 바브 ... INSERT dbo.TableA fromTableVarA; UPDATE dbo.TableB SET ... FROM @ TableVarB; COMMIT; '). 나는이 솔루션을 좋은 결과와 함께 사용했다. –