튜닝도 거치고 쿼리분석기에서 예상실행계획상 누락된 인덱스도 없으며 0.1초만에 잘 나오는 쿼리상으론 아무 문제 없는 쿼리임에도 불구하고 웹페이지에서 실행하면 15초씩 걸리는 이상한 현상이 발견되었다.
가만히 놔둬선 안되겠다 싶어 구글링을 해보니 나와 같은 증상을 겪은 사람들이 이미 여럿 존재함을 확인할 수 있었다.
이유는 ARITHABOART 이녀석 때문인데 시퀄서버에선 기본값이 ON이지만 ADO에선 아래 표처럼 기본값이 OFF
결론은 쿼리 날릴 때 ADODB의 설정을 건드려주면 된다.
Static Query인 경우엔 쿼리문 앞에 SET ARITHABORT ON을 넣어주고
Set objCmd = Server.CreateObject("ADODB.Command")
SQL = ""
SQL = SQL & vbCrLf & "SET ARITHABORT ON"
SQL = SQL & vbCrLf & "SELECT"
......
With objCmd
.ActiveConnection = dbConn
.CommandType = adCmdText
.CommandText = SQL
.Parameters.Append .CreateParameter("param", adDate, adParamInput, , paramdata)
End With
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseClient
rs.Open objCmd, , adOpenStatic, adLockReadOnly
If rs.EOF Then
Else
End If
rs.Close
Set rs = Nothing
Set objCmd = Nothing
Stored Procedure인 경우
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
SqlCommand cmdAritabort = new SqlCommand("SET ARITHABORT ON", dbConn);
cmdAritabort.ExecuteNonQuery();
SqlCommand cmd = new SqlCommand("dbo.usp_example", dbConn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter(com);
adapter.Fill(table);
dbConn.Close();
관련하여 더 자세히 느끼고 싶다면 Slow in the Application, Fast in SSMS? Understanding Performance Mysteries란 버거형님의 진중하고 장대한 글을 참고해보길 바란다.
https://www.sommarskog.se/query-plan-mysteries.html
해당 글에선 좀 다르게 이야기 해주던데 너~~~무 길고 난 ARITHABOART ON 설정으로 느린 쿼리를 해결하였으므로 이쯤에서 만족하려 한다.
'모바일 & 앱' 카테고리의 다른 글
jQuery를 활용 A4사이즈에서 짤림없이 html javascript print() 하기 (1) | 2022.06.17 |
---|---|
앱스토어로 Xcode 업데이트 멈춤 현상 해결 방법 (1) | 2022.05.31 |
네이버의 수집보류 (0) | 2022.05.11 |
jQuery iFrame의 자식 id에 접근하여 가지고 놀기 with CORS ORIGIN postmessage (0) | 2022.04.26 |
MS-SQL 손쉬운 DB 튜닝 방법 (인덱스 설정) (0) | 2022.04.19 |