2009-10-21 5 views
2

MS-SQL2005 DB에서 저장 프로 시저를 호출하는 웹 서비스가 있습니다. 내 웹 서비스는 내가 가지고있는 저장 프로 시저 중 하나 (시간 초과없이 몇 달 동안 생산되었습니다)에 대한 호출에 시간 초과되었습니다. 따라서 시간 초과 된 쿼리 분석기에서 쿼리를 실행하려고했습니다. 나는 삭제하고 코드 변경없이 저장 프로 시저를 다시하기로 결정 그리고 .. 다시저장 프로 시저 Timing out .. Drop, Create 그리고 다시 가동됩니까?

질문 수행하기 시작했다 : 내 저장 프로 시저의 TSQL에

이 일반적으로 오류가 있을까를?

- 또는 -

는 사람이 본과는 저장 프로 시저의 컴파일과 몇 가지 문제로 인해 발생되는 것을 발견 했습니까?

또한, 물론이 다른 어떤 통찰력도 환영합니다. 유사

: 데이터베이스에 대한 통계를 업데이트하면

+3

아마도 매개 변수 스니핑 문제입니다. 여기 좀보세요 : http://stackoverflow.com/questions/211355/parameter-sniffing-or-spoofing-in-sql-server –

+0

고맙습니다. 꽤 흥미 롭습니다. – madcolor

답변

3

을 한 적이 있습니까? 이것은 원래 SP가 구식 쿼리 계획을 사용하고있는 것처럼 들립니다. sp_ recompile이 삭제/다시 작성하는 것보다 도움이되었을 수 있습니다.

+1

통계를 업데이트 한 후 동작이 반환되면 명확하게 매개 변수 스니핑 –

+0

오래된 통계로 인해 문제가 더 자주 발생하며 업데이트가 필요하지 않습니다 = 계획이 잘못되어 캐시에서 추출 할 이유가 없습니다. 삭제/생성은 새로운 계획을 의미하므로 일시적으로 작동합니다. – gbn

0

나는 SP가 사용하려고하는 테이블이 어떤 프로세스에 의해 잠겨 생각합니다. "exec sp_who"및 "exec sp_lock"을 사용하여 테이블에 어떤 일이 일어나고 있는지 확인하십시오.

0

신속 일하는 경우가 더 이상 빠르게 작업 (몇 개월의 경과와 함께), 그리고 코드가 변경되지 않은, 기본 데이터가 변경된 것으로 보인다.

  • 내 첫번째 추측 될 데이터 증가 - 너무 많은 데이터 쿼리 지금 늦추지된다 (나중에 결코 알지 못할, 또는 과거 몇 시간) 지난 몇 개월 동안 추가되었습니다. CodeByMoonlight 수 있듯이
  • 또는, 데이터는이 쿼리 계획을 취소하고 오랜 기간 동안 모두 다시 컴파일하지 않은 것으로 간주 불구하고 절차를 구축 원래의 쿼리 계획 (더 이상 좋은 없다는 것을 시간이 지남에 따라 너무 많이 변경되었을 수 있습니다 시간의).
  • 마찬가지로 색인/데이터베이스 통계도 유효 기간이 만료 될 수 있습니다. 데이터베이스에 대해 AutoUpdateSatistics를 켜거나 끕니까? 데이터 아무것도하지만, 시간이 지남에 변경되지 않은 경우

다시 말하지만, 이것은 단지 도움이 될 수 있습니다.

1

하면 해결 할 수있는 몇 가지가 있습니다 /이를 진단합니다.

1) 매일/정기적으로 통계를 업데이트합니다. SQL은 통계에 기초한 쿼리 계획을 작성합니다 (최적화한다고 생각합니다). "stale"상태가되면 저장 프로 시저가 이전처럼 잘 수행되지 않을 수 있습니다.(특히 데이터베이스가 변경/증가 할 때)

2) 저장 프로 시저를 확인하십시오. 임시 테이블을 사용하고 있습니까? 그 임시 테이블에 인덱스가 있습니까? 대부분의 경우 저장 프로 시저 (또는 테이블이 사용하는 테이블)를 보면서 범인을 찾을 수 있습니다.

3) "매달리기"동안 프로 시저를 분석하면 쿼리 계획을 살펴볼 수 있습니다. 프로 시저의 쿼리 계획을 실행하는 데 도움이되는 누락 된 인덱스가 있습니까? (테이블 스캔과 다른 가장 비싼 쿼리를 찾으십시오.)

전화 번호부에서 이름을 찾는 것과 같습니다. 전화 번호부가 20 개 또는 30 개의 이름으로만 이루어진 경우 모든 이름을 빨리 읽는 것이 좋습니다. 백만 가지 이름으로 그렇게 해보십시오. 그렇게 빠르지는 않습니다.

+0

피드백에 감사드립니다. – madcolor

1

몇 가지 저장된 procs를 개발에서 생산으로 이동 한 후 나에게 이런 일이 일어났습니다. 곧 발생하지는 않았지만, 생산 데이터가 몇 달 후에 증가했습니다. 함수를 사용하여 열을 생성했습니다. 어떤 경우에는 각 행에 대해 여러 함수 호출이있었습니다. 데이터가 커지면 함수 호출 시간도 길어졌습니다.

원래의 접근 방식은 테스트 환경에서는 좋았지 만 부하가 심하면 실패했습니다. 프로 시저에 함수 호출이 있는지 확인하십시오.