복붙노트

[SQL] 웹 응용 프로그램에서 밖으로 쿼리 시간이지만 관리 스튜디오에서 벌금을 실행

SQL

웹 응용 프로그램에서 밖으로 쿼리 시간이지만 관리 스튜디오에서 벌금을 실행

이것은 내가 몇 가지 괜찮은 답변을받은 다른 포럼에 질문 질문,하지만 난 사람이 여기에 더 많은 통찰력을 가지고 있는지 확인하고 싶었다.

문제는 당신이 쿼리를 찾기 위해 SQL 프로파일 또는 응용 프로그램 추적 로그를 사용할 수 있도록, 그것은 저장 프로 시저 호출에 도달 할 때 밖으로 웹 응용 프로그램의 타이밍 페이지 중 하나를 가지고있다 그리고 당신은 그림에 대한 관리 스튜디오에 붙여 넣습니다 우리는 왜 느리게 실행합니다. 하지만 당신은 거기에서 그것을 실행하고 그것은 단지 두 번째보다 작은 각 시간에 반환을 따라 반점.

내 특별한 경우는 ASP.NET 2.0 및 SQL Server 2005를 사용했지만, 그 문제가 어떤 RDBMS 시스템에 적용 할 수 있다고 생각.

해결법

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

    1.이것은 내가 지금까지 내 연구에서 학습 한 내용입니다.

    이것은 내가 지금까지 내 연구에서 학습 한 내용입니다.

    .NET은 관리 스튜디오에 로그인 할 때 무엇을 얻을 동일하지 않습니다 연결 설정에 보냅니다. 다음은 SQL 프로파일 러와의 ​​연결을 도청하는 경우 당신이 볼 것입니다 :

    -- network protocol: TCP/IP  
    set quoted_identifier off  
    set arithabort off  
    set numeric_roundabort off  
    set ansi_warnings on  
    set ansi_padding on  
    set ansi_nulls off  
    set concat_null_yields_null on  
    set cursor_close_on_commit off  
    set implicit_transactions off  
    set language us_english  
    set dateformat mdy  
    set datefirst 7  
    set transaction isolation level read committed  
    

    지금 확인 설정을 동일하게하기 위해 SQL 서버에 로그인 할 때 내가 실행하는 모든 쿼리 위에서 그 설정을 붙여 넣기하고있다.

    이 경우에, I는 분리 및 재 연결 후, 개별적으로 각각의 설정을 시도하고, 발견 오프에서 일초 90 초에서 문제 질의 저하에 ARITHABORT로 변경.

    가장 가능성있는 설명이 기술은 SQL Server가 사용하는이 생각하는 가장 효과적인 쿼리 계획이 무엇인지 선택하는 것입니다 스니핑 매개 변수와 관련이 있습니다. 당신은 연결 설정 중 하나를 변경하면 쿼리 최적화 프로그램은 다른 계획을 선택할 수 있습니다,이 경우, 그것은 분명히 나쁜 일을 선택했다.

    그러나 나는 완전히이 확신 아니에요. 나는이 설정을 변경 한 후 실제 쿼리 계획을 비교하는 시도하고 난은 diff가 어떤 변화를 보여 참조 못하고있다.

    쿼리는 어떤 경우 느려질 수있는 ARITHABORT 설정에 대한 다른 뭔가 있나요?

    해결책은 간단 보였다 : 그냥 저장 프로 시저의 상단에 설정 ARITHABORT를 넣어. 그러나 이것은 반대의 문제로 이어질 수 : 쿼리 매개 변수를 변경하고 갑자기 더 빨리와 '오프'에 '가 아닌 실행됩니다.

    만들 수있는 시간이 나는 '재 컴파일과'절차를 실행하고있는 대한 확인 계획은 때마다 다시 생성됩니다. 그것은 어쩌면 재 컴파일에 초 소요되며,이 반환 (이 괴물) 1-10 초 정도 걸립니다 보고서에 너무 눈에 띄지 않습니다 이후,이 특정 보고서에 대한 확인을합니다.

    그러나 다른 훨씬 더 자주 실행 쿼리 단지 몇 밀리 초, 가능한 한 빨리 반환해야하는 옵션이 아니다.

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

    2.나는 비슷한 문제를 했어. 실행 계획을이 호출 될 때마다 재 계산하도록 시스템을 강제로 작성 SPROC의 "WITH RECOMPILE"옵션을 설정하십시오. 때로는 쿼리 프로세서는 분기를 많이 또는 case 문 복잡한 저장 프로 시저에 혼동됩니다 단지 정말 차선의 실행 계획을 가져옵니다. 즉 "수정"문제에 보인다면, 당신은 아마 통계가 최신 확인 및 / 또는 SPROC을 분해해야합니다.

    나는 비슷한 문제를 했어. 실행 계획을이 호출 될 때마다 재 계산하도록 시스템을 강제로 작성 SPROC의 "WITH RECOMPILE"옵션을 설정하십시오. 때로는 쿼리 프로세서는 분기를 많이 또는 case 문 복잡한 저장 프로 시저에 혼동됩니다 단지 정말 차선의 실행 계획을 가져옵니다. 즉 "수정"문제에 보인다면, 당신은 아마 통계가 최신 확인 및 / 또는 SPROC을 분해해야합니다.

    또한 sproc에 프로파일 링하여 확인할 수 있습니다. 당신은 SQL Managment를 스튜디오에서 그것을 실행하면 어떻게 IO는 ASP.NET 응용 프로그램에서 프로파일 링 할 때와 비교 않습니다. 그 나쁜 실행 계획을 당기는 것을 그들은 아주 많이, 그냥 경우 다시 적용합니다.

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

    3.아직 추적 ASP.NET 켜져 있습니까? 이 문제였다 그 SQL 저장 프로 시저 자체 아니었다 어디 인스턴스를 했어,이 절차가 5000 개 행을 반환하고 앱이 문제를 일으키는 사람들 5000 개 항목이 많은 ListItems를 바인딩 만들려고했다는 사실이었다.

    아직 추적 ASP.NET 켜져 있습니까? 이 문제였다 그 SQL 저장 프로 시저 자체 아니었다 어디 인스턴스를 했어,이 절차가 5000 개 행을 반환하고 앱이 문제를 일으키는 사람들 5000 개 항목이 많은 ListItems를 바인딩 만들려고했다는 사실이었다.

    당신은뿐만 아니라 아래로 도움 트랙 것들에 대한 추적을 통해 웹 응용 프로그램 기능의 실행 시간에 볼 수 있습니다.

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

    4.먼저 준비 상자에이 아웃 테스트 SQL 서버에 대한 서버 수준에서 변경

    먼저 준비 상자에이 아웃 테스트 SQL 서버에 대한 서버 수준에서 변경

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

    5.같은 문제 나 SQL보고 서비스와 함께했다. 변수의 유형을 확인하려고, 나는 어디 정상적으로 자리에 VARCHAR를 보내는 것처럼 SQL에 변수의 다른 유형을 전송했다 그런 정수, 또는 뭔가. 내가보고 서비스 및 SQL에 저장 프로 시저의 변수의 유형을 동기화 후, 나는이 문제를 해결했다.

    같은 문제 나 SQL보고 서비스와 함께했다. 변수의 유형을 확인하려고, 나는 어디 정상적으로 자리에 VARCHAR를 보내는 것처럼 SQL에 변수의 다른 유형을 전송했다 그런 정수, 또는 뭔가. 내가보고 서비스 및 SQL에 저장 프로 시저의 변수의 유형을 동기화 후, 나는이 문제를 해결했다.

  6. ==============================

    6.당신은 무엇을하고 있는지 공정 문제 확인하기 위해 sp_who2 명령을 사용하여 시도 할 수 있습니다. 다른 프로세스에 의해 차단, 또는 CPU 및 / 또는 IO 시간의 과도한 양을 사용하고있는 경우이 방법을 보여줍니다.

    당신은 무엇을하고 있는지 공정 문제 확인하기 위해 sp_who2 명령을 사용하여 시도 할 수 있습니다. 다른 프로세스에 의해 차단, 또는 CPU 및 / 또는 IO 시간의 과도한 양을 사용하고있는 경우이 방법을 보여줍니다.

  7. ==============================

    7.우리는 같은 문제를 가지고 여기에 우리가 무엇을 발견.

    우리는 같은 문제를 가지고 여기에 우리가 무엇을 발견.

    우리의 데이터베이스 로그의 크기는 기본 (8백14메가바이트) 유지 및 자동 증가율은 10 %였다되고 있었다. 서버에서 최대 서버 메모리가 아니라 (2,147,483,647메가바이트)로 기본 설정으로 유지 하였다.

    우리의 로그가 가득하고 성장하기 위해 필요한 도착했을 때, 서버에서 모든 메모리를 사용하고 코드 왼쪽 아무는 시간이 초과하므로 실행할 수 없습니다. 우리가하고 결국은 2,048메가바이트 1 MB의 설정 데이터베이스 로그 파일의 초기 크기와 최대 서버 메모리이었다. 이것은 바로 우리의 문제를 해결. 물론, 당신은 당신의 필요에 맞게 두 가지 속성을 변경할 수 있지만,이 코드를 통해 저장 프로 시저를 실행할 때 문제가 밖으로 타이밍에 실행 사람에 대한 아이디어이지만 SSMS에서 슈퍼 빠른 실행 위의 솔루션은 도움이되지 않습니다.

  8. ==============================

    8.SelectCommand에 시간 초과 값을 변경해보십시오 :

    SelectCommand에 시간 초과 값을 변경해보십시오 :

    DataAdapter.SelectCommand.CommandTimeout = 120;
    
  9. from https://stackoverflow.com/questions/9974/query-times-out-from-web-app-but-runs-fine-from-management-studio by cc-by-sa and MIT license