같은 쿼리를 SSMS 에서는 1초만에 결과가 나오는데 ASP 로 만들어진 웹에서 호출을 하면 4~5초 정도가 걸립니다.
분명 같은 쿼리인데 말이죠.
그래서 ASP 쪽에 실행 시간 로그를 찍어봤습니다.
Response.write "------------------------------ "
Response.write Now
Response.write " ------------------------------"+vbcrlf
Set DB_Rs = Server.CreateObject("ADODB.Recordset") '레코드셋 생성
Call db_SQL(DB_Rs, Query, ConnectNum) '쿼리 실행하는 함수
Response.write "------------------------------ "
Response.write Now
Response.write " ------------------------------"+vbcrlf
이렇게 해서 실행시간을 체크했더니 결과가
------------------------------ 2017-04-27 오전 11:16:35 ------------------------------
------------------------------ 2017-04-27 오전 11:16:39 ------------------------------
이렇게 나왔습니다.
SSMS 에서는 1초 밖에 안걸리는 쿼리가 웹에서 계속 이렇게 실행되서 프로파일러로 체크를 해 봤더니
SSMS 에서는 해당 쿼리가 1번밖에 실행이 안되는데 웹에서 실행하면 4번이나 실행이 됩니다.
분명히 쿼리는 1번만 날리는데요.
웹 실행 로그와 프로파일러 추적 화면
SSMS 실행 화면
왜 그런지 알 수 있을까요? 속도 느리다고 욕을 바가지로 먹고 있습니다.
ㅠㅠ
간만에 들어와 보네요.
실행되는 client의 db접속 방식에따라서 실행계획이 다르게 생성되기 때문입니다.
주로 환경변수값중 ARITHABORT 라는 값이 서버쪽과 client의 ssms에 설정된값이 달라서 발생하는데..
간단한 방법은 ssms에서 실행했을때의 실행계획을 확인해서,
WITH(INDEX=) 나 OPTION()을 이용해서 특정 인덱스를 타도록(SSMS에 나온 인덱스) 쿼리에 조건을 넣어주시면
대부분 해결됩니다.