저는 2 년 조금 넘게 매일 실행되는 쿼리가 있으며 일반적으로 완료하는 데 30 초도 채 걸리지 않았습니다. 갑자기 어제 갑자기 쿼리가 완료 될 때까지 3 시간 이상이 걸리고 전체 시간에 100 % CPU를 사용하고있었습니다.SQL Server 쿼리가 100 % CPU를 사용하고 몇 시간 동안 실행됩니다.
는 SQL은 다음과 같습니다
SELECT
@id,
alpha.A, alpha.B, alpha.C,
beta.X, beta.Y, beta.Z,
alpha.P, alpha.Q
FROM
[DifferentDatabase].dbo.fnGetStuff(@id) beta
INNER JOIN vwSomeData alpha ON beta.id = alpha.id
alpha.id
은 BIGINT 타입과 beta.id
은 INT 유형입니다. dbo.fnGetStuff()
은 WHERE id = @id
을 사용하여 동일한 DB의 테이블에 2 개의 INNER JOIN이있는 간단한 SELECT 문입니다. 이 함수는 약 11000 개의 결과를 반환합니다.
보기 vwSomeData
은 약 590000 개의 결과를 반환하는 2 개의 INNER JOIN이있는 간단한 SELECT 문입니다.
보기와 기능 모두 자체적으로 실행될 때 10 초 이내에 완료됩니다. 함수의 결과를 임시 테이블로 먼저 선택한 다음 합치면 쿼리가 < 10 초 내에 완료됩니다.
어떻게되는지 어떻게 해결할 수 있습니까? 활동 관리자에 자물쇠가 보이지 않습니다.
테이블 값 기능이 "사용할 수 있기 때문에"사용되는 경우가 너무 많습니다. 더 간단하게 유지하는 것이 좋습니다. 그리고 전망을 분해 해보십시오. SQL Server에서 개체 종속성이 엉망이되면 재미있는 일이 발생합니다. – dkretz