2012-01-30 3 views
5

내가 내 데이터베이스 (병합 복제에서 구독 데이터베이스) 열이 26000 행간단한 업데이트 쿼리는

업데이트가이 테이블에 삭제로

테이블이 currentStatus StatusID {Primary Key + Clustered Index}, StatusName, StatusDate, UserID,CreatedDate, ModifiedDate, ModifiedBy, AllowDelete,AllowUpdate입니다

있습니다을 테이블 CurrentStatus이 너무 오래 걸리는 갑자기 너무 많은 시간을 들여 1 분 30 초를 말하고 심지어 5 분이라고 말합니다.

아래 쿼리는 실행하는 데 1 분 이상 걸립니다.

update StatusMaster set StatusName='OK' where StatusID = 22 

테이블에 이전에 5 개 인덱스가 있었다 (심지어 고속으로 실행하는 데 사용됩니다. 쿼리) 이제 업데이트로/쿼리가 실행되지 않습니다 삭제 , 난 모든 인덱스를 삭제하고 보관 한 경우에만 두 개의 인덱스 1) StatusID의 Clustered Index 2) 복제로 자동 생성 된 고유 한 비 클러스터형 인덱스 인 rowguid 열의 복제 인덱스입니다.

어쨌든 백업을하고 데이터베이스를 복원하면 동일한 테이블의 쿼리가 정상적으로 실행됩니다.

한 가지 더 알아 두어야 할 것은 서버의 약 20 개 컴퓨터에서 매 2 분마다 복잡한 쿼리를 실행하고 있다는 것입니다.

이 쿼리는 실행에 많은 시간을 소비합니까?

Click here for Execution plan

+0

은 이러한 테스트를 수행 할 때 실행되는 복제입니까? DB가 구독자 인 경우 실제로 데이터를 업데이트하거나 삭제하면 안됩니다. – Diego

+0

모든 대문자로 올리지 마십시오. 그것은 무례하고, 당신이 "소리 쳤다"것 같습니다. –

+1

@Diego 예 복제가 실행 중이고 병합 복제가되어 있으므로 삽입 업데이트가 구독자와 게시자 모두에서 작동 할 수 있습니다. – Thakur

답변

6

내가, 당신이 UPDATE STATISTICS 명령을 통해 통계를 업데이트하는 것이 예를 들어, 추천 : 삽입의 많은 후

UPDATE STATISTICS StatusMaster 
+0

20 홀수 초 – Thakur

+0

때때로 서버에서 메모리 사용량을 1 초 때로는 이상 15 초 소요 프로세서 사용률은 45 %입니다. – Thakur

+0

'StatusID' 열의 카디널리티가 낮아서 테이블 스캔을 수행하는 것이 가능합니다. 당신의 실행 계획은 무엇을 말하고 있습니까? – RedFilter

2

, 삭제, 업데이트 등, 당신의 표는 조각난 얻을 수 있습니다 인덱스가 최적화되지 않을 수 있습니다. 통계를 다시 색인하고 업데이트하는 것이 좋습니다. 백업을 수행하고 복원 할 때

, 난 당신이 할 것 통계의 색인을 다시 생성 및 업데이트와 같은 일을 달성 믿습니다.

성능을 유지하려면 반복적으로 이와 같은 유지 관리를 예약해야합니다.

+0

색인을 다시 작성하고 통계를 업데이트했지만 여전히 문제가 발생했습니다. – Thakur

0

몇 가지 간단한 쿼리 시간이 [우리의 작은 회사의 비정상적인 양을했다 마지막으로, 이것은 [다행히 비 프로덕션] SQL 서버에서 RAID 어레이의 손상으로 인해 발생했다.

+0

내 RAID 어레이가 손상된 경우 어떻게 찾을 수 있습니까? – Thakur

+0

SQL 서버가있는 컴퓨터를 관리하는 사람에게 물어보십시오. Windows 이벤트 로그 및 RAID 컨트롤러 상태 로그를 확인해야합니다. 나는 이것이 당신의 경우라고 말하지 않습니다 - 나는 복제에 대한 경험이 없으며 이것이 어떤 영향을 미칠 수 있는지 말할 수 없습니다. 하드웨어 문제로 인해 때로는 이상한 지연이 발생한다고 암시했습니다. – Arvo

+0

이 테이블은 복제 중이며 4 ~ 5 대의 서버에서 오류가 발생합니다. RAID 문제 일 것이라고 생각하지 않습니다. – Thakur

관련 문제