2013-09-16 1 views
0

SQL Server가 데이터베이스 인 IIS에서 Laravel 4를 실행하고 있습니다. 나는 Laravel에서 데이터베이스에 질의하기 위해 웅변을 사용하고 있습니다. 이 방법을 사용하면 모든 쿼리가 매우 빠르게 실행됩니다. 30 초 후에 실행되지 않는 쿼리 하나가 시간 초과됩니다. SQL 프로파일 러에서 원시 SQL을 가져 와서 명령 줄에서 실행하면 1 초 만에 완료됩니다. 웹 응용 프로그램에서 SQL을 실행하고 명령 줄 (SQL Server Management Studio)에서 실행하는 것과 같은 시간차가있는 이유를 파악하려고합니다. 각 쿼리를 실행하기 전에 캐시를 지우고 그 결과는 같습니다.SQL Server select는 명령 줄에서 1 초 후에 실행되지만 웹 사이트에서 30 초로 시간 초과합니다.

내 Laravel 웅변 코드 (시간 초과) : 나는이 방법을 시도

$checks = SQLServerHostLastCheck::where('organization_id', '=', Session::get('currentIssueTrakOrganizationID')) 
    ->where('hostname', '=', $hostname) 
    ->orderBy('check_level') 
    ->orderBy('instance_name') 
    ->orderBy('check_description') 
    ->get(); 

(시간 초과) :

$checks = DB::table('sql_server_host_last_check_all_v') 
    ->where('organization_id', '=', Session::get('currentIssueTrakOrganizationID')) 
    ->where('hostname', '=', $hostname) 
    ->get(); 

이것은 SQL 프로파일 러에서 원시 SQL입니다 (1 년 완료 초) :

이 쿼리는 총 66 개의 행을 반환하며 총 15 개의 열이 있습니다. 각 필드에는 적은 양의 데이터 만 있습니다.

+0

결과가 캐시 될 가능성이 높습니다. 따라서 두 번째 실행하면 결과가 매우 빠르게 나타납니다. 다른 값으로 시도하고 시간이 오래 걸리는 지 확인하십시오. – cmorrissey

+0

@Christopher Morrissey 값을 변경하더라도 명령 줄 쿼리가 1 초 만에 완료됩니다. 또한 실행중인 쿼리간에 캐시를 지우고 결과도 동일합니다. – thestepafter

+0

왜 모든 열을 다시 가져오고 있습니까? 테이블에 큰 데이터 (예 : varchar (max) 또는 varbinary)가 있습니까? 네트워크 연결을 통해 큰 데이터를 보내려면 시간이 걸릴 수 있습니다. – Sparky

답변

0

뷰를 작성하는 복잡한 SQL 쿼리/조인에 대한 뷰 대신 저장 프로 시저를 작성하여이를 해결했습니다. 결과는 즉시 반환됩니다.

관련 문제