2012-04-17 5 views
0

내가 SQL Server 2008 R2의 내 데이터베이스에서이 매우 간단한 쿼리가 완료되지 않습니다. 첫째, 정말 오랜 시간 동안 실행됩니다. 한번은이 쿼리를 실행하고 점심을 먹는 동안 거기에 놓아 두었습니다. 2 시간 후에 다시 왔을 때, 아직 끝나지 않았습니다.SQL 서버 2008 업데이트는

이 쿼리를 프로그래밍 방식으로 실행해야합니다. 나는 거기에 그것을 실행하는 데 필요한 모든 것을 가지고 있지만 지금 유일한 문제는 나에게 "시간 초과"오류 메시지를 제공한다는 것입니다. CommandTimeOut을 늘리려고했지만 이렇게하면 프로그램을 더 오랫동안 유지할 수 있습니다. SQL Server에서 쿼리를 실행하는 데 시간이 오래 걸리므로 이전 시나리오를 참조하십시오.

누군가이 문제를 피할 수있는 좋은 해결책을 제시 할 수 있습니까? 그리고 예, 제가 액세스하는 테이블에는 수천과 같은 많은 기록이 있습니다. 이것은 전에 결코 문제가 아니었지만 지금은 그렇습니다. :(당신이 ID 12345으로 행을 고정 트랜잭션을 열려처럼 사전에

감사합니다 :)

+0

두 가지 질문 : (1) ID 열에 ** 색인 **이 있습니까? 그리고 (2) - 어떤 데이터 형이'ID'입니까 ?? 숫자 데이터 유형이라면 문자열을 사용하여 ID를 지정해서는 안되며 대신'WHERE ID = 12345' (따옴표 제외)를 사용하십시오. 그리고 PS : * 수천 개의 행이 ** 아무 것도 없습니다 ** - 우리가 수억 명이 말하는 경우 - 우리는 "많은"것을 갖습니다 .... –

+0

변경하려는 행의 수는 얼마나됩니까? SQL 프로파일 러를 보셨습니까? 유사한 쿼리를 실행 했습니까 ('id = '23456')? – hkf

+1

"수천과 같은 많은 레코드"- 매우 적은 수의 행입니다. 관점에 넣으려면 1 억 3 천만 명이 합리적으로 커야합니다. –

답변

4

는 소리 명령 것이다 결코 마무리 커밋 또는 트랜잭션을 롤백 할 때까지.

Activity Monitor을 열고 어떤 거래가 귀하의 업데이트를 방해하는지보십시오. 그런 다음이 트랜잭션을 실행하고 커밋하거나 롤백 한 상태에서 커밋되지 않은 SSMS 창을 찾습니다.

자세한 내용은 Understanding and resolving SQL Server blocking problems을 참조하십시오. 일반적인 성능 문제 해결 방법은 Waits and Queues을 참조하십시오.

+1

+1. 멋진 심령 벌레 잡기! –

+0

+100000. 이것은 내가 필요한 것입니다. 분명히 다른 몇 개의 SELECT 문이 같은 행을 잠갔습니다. 고마워요! 이것은 WITH (NOLOCK) 키워드를 생각 나게했다. – Smiley