code

SQL Server에서 쿼리 시간 제한 강제

codestyles 2020. 10. 16. 07:27
반응형

SQL Server에서 쿼리 시간 제한 강제


우리는 느린 데이터베이스에 대해 제대로 응답하지 않는 코드 블록에 문제가있었습니다 (쿼리 시간 초과로 인해 침대를 엉망으로 만듭니다). 패치를 만들었으며 회귀를 통해 실행하는 중입니다.

타임 아웃을받을 수 없습니다. SQL Mgmt Studio에서 트랜잭션을 열고 모든 행을 업데이트하여 잠그었지만 INSERT가 시간 초과되지는 않습니다 (필요한 것입니다).

T-SQL을 통해 테이블 ​​수준 잠금을 쉽게 얻을 수 있습니까? 아니면 마스터에서 바이올린을 켜야합니까? 아니면 잠그지 않고 쉽게 타임 아웃을 강제 할 수 있습니까? 모든 입력에 감사드립니다.


이것을 실행하고 삽입을 시도하십시오 ...

select * from yourTable with (holdlock,tablockx)

여기에서 5 분 동안 잠글 수 있습니다.

BEGIN TRANSACTION

SELECT * FROM yourTable WITH (TABLOCKX, HOLDLOCK)

WHERE 0 = 1

WAITFOR DELAY '00:05'

ROLLBACK TRANSACTION

반환하기 전에 잠시 기다리도록 SQL 코드에 지시 할 수 있습니다.

WaitFor Delay '00:01:00'

팁 측면에서 : 연결을 구성 할 수있는 경우 연결 문자열 시간 제한을 1 초로 줄이면 더 쉬워집니다. 테이블을 많은 데이터로 채우고 루프를 둘러싼 트랜잭션으로 해당 테이블의 청크를 업데이트하는 루프에서 3 개의 다른 프로세스가 회전하도록합니다. 앱에서 호출 한 실제 절차를 변경하지 마십시오 (대기 시간 주입). 이는 통합 테스트를 무효화합니다.

그러나 실제로 이것은 단위 테스트와 종속성 주입을 선호하는 사례 연구입니다. 일부는 통합 테스트가 어렵습니다. 단위 테스트 + 의존성 주입 .

  • Real : 크랩하는 코드-> 데이터베이스 시간 초과 (복제하기 어려움).
  • 리팩터링 : 코드-> 저장소 (데이터 액세스 만 수행)-> 데이터베이스
  • 단위 테스트 : 코드> 던질 모의 저장소 -> null
  • 이제 코드를 엉망으로 만들고 수정할 수있는 테스트에 실패했습니다.

이것은 "의존성"주입입니다. 개발자는 데이터베이스에 종속성을 삽입하여 종속성의 동작을 시뮬레이션하는 것으로 대체 할 수 있습니다. 모든 데이터베이스 테스트에 적합합니다. 어쨌든, 단위 테스트를 사용하면 수정이 필요한 작업을 수행한다는 것을 알지만 여전히 통합 테스트가 필요합니다. 이 경우 회귀에 더 초점을 맞출 수 있습니다. 즉, 테스트가 다른 것을 중단하지 않았고 기능이 여전히 작동 함을 의미합니다.

이미 패치를 만들었으므로 내 대답이 너무 늦었을 것 같습니다.


이 블로그 게시물을 확인하십시오. 기본적으로 SQL Server에는 쿼리 시간 제한이 없습니다. 클라이언트는 SQL 시간 제한을 적용 할 수 있지만 엔진 자체는 그렇지 않습니다.

http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx

참고 URL : https://stackoverflow.com/questions/798192/forcing-a-query-timeout-in-sql-server

반응형