이것은 내가 지금까지 내 연구에서 학습 한 내용입니다.
.NET은 관리 스튜디오에 로그인 할 때 얻은 것과 다른 연결 설정을 전송합니다.
-- 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 서버에 로그인 할 때 내가 실행할 때마다 쿼리 위의 설정들을, 붙여 넣기 오전 : 여기 당신이 SQL 프로파일 러와의 연결을 도청하는 경우 당신이 볼 것입니다.
이 경우, 연결을 끊었다가 다시 연결 한 후 각 설정을 개별적으로 시도 했으므로 arithabort를 off에서 on으로 변경하면 문제 쿼리가 90 초에서 1 초로 줄어 듭니다.
가장 가능성있는 설명은 SQL Server가 가장 효과적인 쿼리 계획이라고 생각하는 것을 선택하는 데 사용되는 매개 변수 스니핑과 관련이 있습니다. 연결 설정 중 하나를 변경하면 쿼리 최적화 프로그램에서 다른 계획을 선택할 수 있으며이 경우 잘못된 계획이 선택되었습니다.
그러나 나는 이것에 대해 완전히 확신하지 못했습니다. 이 설정을 변경 한 후 실제 쿼리 계획을 비교해 보았습니다. 아직 diff가 변경 사항을 표시하지 않았습니다.
경우에 따라 쿼리가 느리게 실행될 수있는 arithabort 설정에 대한 다른 내용이 있습니까?
해결책은 간단합니다. set arithabort를 저장 프로 시저의 맨 위에 놓습니다. 그러나 이것은 정반대의 문제로 이어질 수 있습니다. 쿼리 매개 변수를 변경하면 갑자기 'on'보다 'off'가 더 빨리 실행됩니다.
당분간 'with recompile'절차를 실행하여 매번 계획을 다시 생성해야합니다. 이 특정 보고서에서는 다시 컴파일하는 데 약간의 시간이 걸리기 때문에이 보고서는 괜찮습니다. 반환하는 데 1 ~ 10 초가 소요되는 보고서에서는 너무 눈에 띄지 않습니다 (괴물).
그러나 훨씬 자주 실행되며 가능한 한 신속하게 몇 밀리 초 만에 돌아와야하는 다른 쿼리에는 옵션이 아닙니다.준비 상자에
나는 동일한 문제가 있었고 http://stackoverflow.com/questions/250713/sqldataadapter-fill-method-slow는 내 문제를 해결했습니다. – David