SQL 서버에 대한 연결 시간 초과


109

web.config? 에서 연결 문자열을 수정하여 시간 제한을 늘릴 수 있습니까 ?


7
타임 아웃이 쿼리 실행을 제어 할 것이라고 생각했던 것처럼 이것을 읽지 마십시오. 서버에 연결하는 타임 아웃 만이 아니라 "연결 타임 아웃"이 더 나은 이름이 될 것입니다. stackoverflow.com/a/7976867/409856
downwitch를

답변:


213

예, 연결 문자열에 추가 ;Connection Timeout=30하고 원하는 값을 지정할 수 있습니다.

Connection Timeout속성에 설정된 시간 제한 값 은 초 단위로 표시되는 시간 입니다. 이 속성이 설정되지 않은 경우 연결 시간 제한 값은 기본값 (15 초)입니다.

또한 제한 시간 값을로 설정하면 0연결 시도가 무한 시간 동안 대기하도록 지정합니다. 설명서에 설명 된대로 이는 연결 문자열에 설정해서는 안되는 사항입니다.

0 값은 제한이 없음을 나타내며 연결 시도가 무기한 대기하므로 ConnectionString에서 피해야합니다.


4
이 시간 초과가 분 또는 초입니까?
user1

1
@ user1 "시도를 종료하고 오류를 생성하기 전에 서버 연결을 기다리는 시간 (초)입니다."
Santux 2013

5
참고 : 연결 시간 초과 = 0은 무한입니다.
Abdul Saboor 2013-08-27

이것에 대한 예를 들어 줄 수 있습니까? ... 메모를 내가 EF6를 사용하고는 I 오류 시간 제한 일부 과정 프로그램을 반환 할 때 난 내 테이블에 3 개 백만 데이터가 : 나는 테이블의 색인 사용하고 있습니다
saulyasar

4
@saulyasar 이것은 COMMAND 타임 아웃이 아니라 CONNECTION 타임 아웃입니다. CONNECTION 시간 제한은 SQL Server에 연결을 시도하는 시간입니다. 제한 시간이 초과되기 전에 프로 시저 또는 명령문이 실행되는 시간 인 COMMAND 제한 시간을 조사하려고합니다.
granadaCoder

32

흠 ...

Darin이 말했듯이 더 높은 연결 시간 제한 값을 지정할 수 있지만 이것이 실제로 문제가 아닌 것 같습니다.

연결 시간 초과가 발생하면 일반적으로 다음 중 하나에 문제가 있습니다.

  1. 네트워크 구성-웹 서버 / 개발 상자와 SQL 서버 간의 느린 연결. 제한 시간을 늘리면이 문제를 해결할 수 있지만 근본적인 문제를 조사하는 것이 좋습니다.

  2. 연결 문자열. 잘못된 사용자 이름 / 암호가 어떤 이유로 "액세스 거부"를 나타내는 실제 오류 대신 시간 초과 오류를 제공하는 문제를 보았습니다. 이런 일이 일어나서는 안되지만 삶이 그렇습니다.

  3. 연결 문자열 2 : 서버 이름을 잘못 지정하거나 불완전하게 지정하는 경우 (예 : mysqlserver대신 mysqlserver.webdomain.com) 시간 초과가 발생합니다. 명령 줄에서 연결 문자열에 지정된대로 정확히 서버 이름을 사용하여 서버를 ping 할 수 있습니까 ?

  4. 연결 문자열 3 : 서버 이름이 DNS (또는 호스트 파일)에 있지만 올바르지 않거나 액세스 할 수없는 IP를 가리키는 경우 시스템을 찾을 수 없음 오류가 아닌 시간 초과가 발생합니다.

  5. 호출중인 쿼리가 시간 초과되었습니다. 서버에 대한 연결이 문제인 것처럼 보일 수 있지만 앱의 구조에 따라 제한 시간이 발생하기 전에 쿼리가 실행되는 단계까지 연결될 수 있습니다.

  6. 연결 누출. 얼마나 많은 프로세스가 실행되고 있습니까? 열린 연결은 몇 개입니까? 원시 ADO.NET이 연결 풀링을 수행하는지, 엔터프라이즈 라이브러리에서 필요할 때 자동으로 연결을 닫는 지 또는 모든 것이 구성된 위치인지 확실하지 않습니다. 이것은 아마도 붉은 청어 일 것입니다. 그러나 WCF 및 웹 서비스로 작업 할 때 닫히지 않은 연결에 문제가 발생하여 시간 초과 및 기타 예측할 수없는 동작이 발생했습니다.

시도 할 사항 :

  1. SQL Management Studio를 사용하여 서버에 연결할 때 시간 초과가 발생합니까? 그렇다면 네트워크 구성이 문제 일 수 있습니다. Management Studio에 연결할 때 문제가 없으면 서버가 아닌 앱에 문제가있는 것입니다.

  2. SQL 프로파일 러를 실행하고 실제로 어떤 일이 발생하는지 확인하십시오. 실제로 연결 중인지 아니면 쿼리가 문제인지 알 수 있어야합니다.

  3. Management Studio에서 쿼리를 실행하고 걸리는 시간을 확인합니다.

행운을 빕니다!


쿼리가 시간 초과되면 commandtimeout이 발생합니다
user55474

@ user55474 아마; ( 매우 드물게) 호출 방법에 따라 다릅니다 .
3Dave

이 msdn 블로그 게시물을
따르지

@hugh 드물다고 생각하지만 직접 본 적이 있습니다.
3Dave 2015 년

1
"SQL 프로파일 러 실행"은 +1입니다. 복잡해 보이지만 실제로는 "도구> SQL Server 프로파일 러"를 클릭하고 앱이 SQL Server에 말하는 내용을 확인하면됩니다. 그것은 :) 광산 옵션 # 5이었다 끈다
앤드류 Kvochick에게

11

동적으로 변경하려면 SqlConnectionStringBuilder 사용하는 것이 좋습니다.

ConnectionString 즉, 문자열을 Object 클래스로 변환 할 수 있습니다. 모든 연결 문자열 속성은 해당 Member가됩니다.

이 경우 실제 이점은 ConnectionTimeout 문자열 부분이 연결 문자열에 이미 존재하는지 여부에 대해 걱정할 필요가 없다는 것입니다.

또한 객체를 생성하고 문자열을 조작하는 대신 객체에 값을 할당하는 것이 항상 좋습니다.

다음은 코드 샘플입니다.

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);

2
유형 의 ConnectionTimeout속성을 SqlConnection읽기 전용으로 만드는 것이 좋은 생각이라고 생각할 수 없습니다.
Maslow
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.