복붙노트

[SQL] SQL은 asp.net 느린 SSMS에서 빠른 실행

SQL

SQL은 asp.net 느린 SSMS에서 빠른 실행

지금은 몇 주에이 문제가되고있다. 문제는 쿼리 SSMS에서 실행하는 웹 사이트에 대부분 2 ~ 3 초에 실행 4 ~ 5 분 거리에 있다는 것입니다. 또한 나는 내가 고객 ID를 변수를 추가하는 등이 쿼리를 변경 한 후에는 웹 페이지에 신속하게 실행을 시작하지만 다음 날에 의해 다시 느린 것으로 나타났습니다. 문제의 쿼리는 다음 중 하나입니다 :

DECLARE @customerID INT
SET @customerID = @CustID
DECLARE @MyTable table(
Iden int NOT NULL IDENTITY(1,1),
ProductID int)

INSERT INTO @MyTable(ProductID)
SELECT P.ProductID FROM Product P WITH (NOLOCK)
left join Compunix_ProductMMY cpmmy with (nolock) on p.ProductID = cpmmy.ProductID
left join Compunix_CustomerMMY ccmmy with (nolock) on ccmmy.mmyid = cpmmy.mmyid
WHERE P.Deleted=0 AND P.Published=1 and (ccmmy.customerid = @customerID OR cpmmy.productid IS NULL)

SELECT c.Name, c.SeName, c.CategoryID
FROM Category c WITH (NOLOCK) 
JOIN ProductCategory PC With (NOLOCK) ON C.CategoryID = PC.CategoryID
JOIN @MyTable MT ON PC.ProductID=MT.ProductID
WHERE C.Published = 1
GROUP BY c.Name, c.SeName, c.CategoryID
ORDER BY c.Name

나는 잘 작동이 다른 사이트에서 실행되는 동일한 쿼리가 있습니다. 사이트 사이의 유일한 차이점은 다른 데이터베이스에서 실행하고 느린 사이트가 좀 더 그것을 두 번 제품 (54000 개 제품) 이외의 2 세 사이트에 비해 가지고 있으며, 자신의 데이터베이스가 동일한 시스템에서 호스팅되는 것입니다 .

해결법

  1. ==============================

    1.기회는 당신이 매개 변수 스니핑 문제에 명중되어 있습니다.

    기회는 당신이 매개 변수 스니핑 문제에 명중되어 있습니다.

    나는 SSMS에서 빠른, 응용 프로그램에서 천천히 읽어 보시기 바랍니다? ERLAND Sommarskog하여 문제 (긴 글이지만 아주 좋은)의 전체 이해를 얻을 수 있습니다.

  2. ==============================

    2.당신의 ASP.Net 응용 프로그램과 SSMS 세션에 대한 바로 sys.dm_exec_sessions를 살펴 보자. 당신의 SET 설정 중 하나 이상이 다른 것을 나는 짐작한다. 이것은 다른 (궁극적으로는 스니핑 매개 변수에 기인됩니다) 계획과 응용 프로그램 측이 일반적으로 더 나쁜 끝에 기여할 수있다.

    당신의 ASP.Net 응용 프로그램과 SSMS 세션에 대한 바로 sys.dm_exec_sessions를 살펴 보자. 당신의 SET 설정 중 하나 이상이 다른 것을 나는 짐작한다. 이것은 다른 (궁극적으로는 스니핑 매개 변수에 기인됩니다) 계획과 응용 프로그램 측이 일반적으로 더 나쁜 끝에 기여할 수있다.

    많이 더 세부 사항에 대한 이러한 다른 질문을 참조하십시오 :

    웹에서 호출 할 때 저장 프로 시저가 관리 Studio에서 빠르고 느린

    절차 시간 ADO.NET 밖으로하지만 SSMS에서

    웹에서 실행될 때,하지만 초고속 SSMS에서 실행될 때 밖으로 쿼리 시간

    SQL Server Management Studio를 대 ADO .NET - ADO가 수행 악화

  3. ==============================

    3.내가 MultipleActiveResultSets을 제거 그래서 내 경우에는, MARS에 관한 한, 같은 문제가 있었다 = TRUE; 연결 문자열에서 지금 SSMS btween 시간을 실행하고 asp.net은 (0.2 초 전에 4.5 초 초과에 비해) 거의 동일합니다

    내가 MultipleActiveResultSets을 제거 그래서 내 경우에는, MARS에 관한 한, 같은 문제가 있었다 = TRUE; 연결 문자열에서 지금 SSMS btween 시간을 실행하고 asp.net은 (0.2 초 전에 4.5 초 초과에 비해) 거의 동일합니다

  4. ==============================

    4.어떻게 그 가치를 들면, 아주 가끔 우리는 같은 문제로 실행; 년에 한 번있을 수 있습니다. 당신은 읽고 다른 답변에서 언급 된 훌륭한 자원을 모두 소화 좋은 주를 보낼 수 있습니다, 또는 당신은 우리가 무엇을 할 수; 중지 및 SQL Server를 시작합니다.

    어떻게 그 가치를 들면, 아주 가끔 우리는 같은 문제로 실행; 년에 한 번있을 수 있습니다. 당신은 읽고 다른 답변에서 언급 된 훌륭한 자원을 모두 소화 좋은 주를 보낼 수 있습니다, 또는 당신은 우리가 무엇을 할 수; 중지 및 SQL Server를 시작합니다.

    그것은 치료를 작동합니다.

    우리는이 문제는 일반적으로 직접 손에 문제와 관련 될 수있는 다양한 스키마 / SP / 뷰 개조 후 발생하는 것으로 나타났습니다.

  5. ==============================

    5.당신은 어떤 ORM을 사용하고 있습니까? 당신이 자 NHibernate를 사용하는 경우, 당신은 NHibernate에 추적을 DB 활성화하고 문제가 될 수있는 것을 볼 수 있습니다. 다음 나는 그런 시나리오에서 관찰하는 시나리오 중 일부입니다 :

    당신은 어떤 ORM을 사용하고 있습니까? 당신이 자 NHibernate를 사용하는 경우, 당신은 NHibernate에 추적을 DB 활성화하고 문제가 될 수있는 것을 볼 수 있습니다. 다음 나는 그런 시나리오에서 관찰하는 시나리오 중 일부입니다 :

    NHibernate에는 log4net 사용하고, 여기에 언급 한 바와 같이 당신은 그냥 펜더를 추가해야합니다 : https://devio.wordpress.com/2010/04/14/logging-sql-statements-generated-by-nhibernate/

  6. from https://stackoverflow.com/questions/10175422/sql-runs-fast-in-ssms-slow-in-asp-net by cc-by-sa and MIT license