SqlCommand.CommandTimeout과 SqlConnection.ConnectionTimeout의 차이점은 무엇입니까?


답변:


127

예. CommandTimeout단일 명령을 완료하는 데 걸리는 시간입니다. ConnectionTimeout시작하기 위해 서버에 연결하는 데 걸리는 시간입니다.

예를 들어 상대적으로 오래 실행되는 쿼리를 실행하고있을 수 있습니다. 완료하는 데 10 분이 걸리는 것은 괜찮지 만 연결을 시작하는 데 10 분이 걸린다면 뭔가 잘못되었다는 것을 알 수 있습니다.


5
논쟁을 위해! ** & # Q @? 실행하는 데 32 초가 걸리는 쿼리입니다. SqlCommand.CommandTimeout = 40을 설정했지만 SqlConnection.ConnectionTimeout을 기본값 (예상 30)으로두면 연결 시간이 초과됩니까? 즉, 두 속성을 모두 설정해야합니까? "아니오"라고 말하는 것처럼 들리지만 SqlConnection.ConnectionTimeout 속성에 대해 잊고 CommandTimeout 설정이 필요한 모든 작업을 수행하는지 의문을 품기 시작했습니다.
flipdoubt

29
flipdoubt-CommandTimeout은 쿼리에 영향을 미치고 ConnectionTimout은 그렇지 않습니다. ConnectionTimout은 쿼리를 수행하기위한 연결에 대한 제한 시간이 아닙니다. 연결이 처음에 데이터베이스에 연결하기위한 제한 시간 일뿐입니다.
Robin Bennett

1
@JonSkeet는 CommandTimeout과 ConnectionTimeout을 수행하며 둘 다 동일한 공통 예외를 생성합니까? 아니면 다른 예외?
Yasser Shaikh

1
@Yasser : 모르겠어요, 두려워요.
Jon Skeet

6
CommandTimeout은 SQL Server에서 클라이언트 코드로 첫 번째 행이 반환 될 때까지만 적용되는 것으로 보입니다. 예를 들어 30 초 이내에 첫 번째 행을 반환하는 쿼리가 있지만 전체 행 집합을 반환하는 데 몇 시간이 걸리는 경우 시간 제한을 30 초로 설정해도 쿼리 시간이 초과되지 않고 쿼리가 몇 시간 동안 실행됩니다. 이는 주로 실행 계획의 LHS에 차단 연산자 (예 : Order by)가없는 경우에 발생합니다. (내가 이것을 디버깅하는데 이틀을 보냈고 주제에 대한 다른 참조가 없기 때문에 게시)
Dave

28

SqlCommand.CommandTimeout= SQL 쿼리에 대한 시간 제한. (예 : SELECT, UPDATE) 쿼리가 실행되는 데 걸리는 시간을 의미합니다 . 을 초과하면 SqlCommand.CommandTimeout실행을 중지합니다. 명령 시간 초과 오류가 발생합니다.

SqlConnection.ConnectionTimeout= 연결 시간 제한. 연결 개체가 연결을 시도 할 수있는 시간을 의미합니다. 지정된 시간을 초과하면 연결이 중지됩니다. 연결 시간 초과 오류가 발생합니다.


11

ConnectionTimeout지정 기간은 시도 할 때 시간이 초과되기까지의 대기 SqlConnection. Connection.Open()명령 과 관련이 있습니다.

동안

SqlCommand.CommandTimeout시간이 초과되기 전에 SqlCommand가 대기하는 기간을 지정했습니다. 이것은 연결이 열리고 ExecuteXXXCommand 개체에서 메서드 중 하나 가 호출 된 후에 발생합니다.


8

추가 정보

기본값 CommandTimeout은 30 초입니다. 0은 제한이 없음을 나타냅니다. CommandTimeoutCoding에서만 값을 설정할 수 있습니다 .

기본값 ConnectiontTimeout은 15 초입니다. Zero (0)도 제한이 없음을 나타냅니다. 0보다 작은 값 (마이너스 값)은를 얻습니다 ArgumentException. ConnectionTimeoutCoding 및 Config 파일 모두에서 값을 설정할 수 있습니다 .


0
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms

2
이것은 세 번째 유형의 시간 제한입니다. 주제 소유자가 묻는 두 가지 중 하나가 아닙니다. 그리고 질문에 대답하지 않습니다. 나는 편집하기 전에 질문이 무엇인지 모르기 때문에 -1하지 않을 것입니다.
Csaba Toth

0

Connection 및 Command 개체의 속성이므로 CommandTimeout에 대한 빠른 참고 ...

Connection 개체의 CommandTimeout 설정은 동일한 Connection의 Command 개체에 대한 CommandTimeout 설정에 영향을주지 않습니다. 즉, Command 개체의 CommandTimeout 속성은 Connection 개체의 CommandTimeout 값을 상속하지 않습니다.

따라서 Connection 개체의 CommandTimeout 설정은 Command 개체를 사용하지 않고 Connection 개체에서 실행되는 명령에만 영향을줍니다.

예를 들어 Stored Proc에 연결하고 명령 개체에 매개 변수를 추가하고 연결 개체의 연결을 사용하여 Command 개체를 실행할 때 Command 개체에 CommandTimeout을 설정하고 Connection 개체에 ConnectionTimeout을 설정하여 둘 다 재정의해야합니다. 기본값. 연결 개체에 CommandTimeout을 설정해도 명령 개체 명령에 대한 기본 제한 시간이 재정의되지 않습니다.

https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 https://docs.microsoft.com/en-us / sql / ado / reference / ado-api / connectiontimeout-property-ado? view = sql-server-ver15

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.