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: craps -> 데이터베이스 타임아웃(재현하기 어려운 코드).
- 리팩터:크랩하는 코드 -> 저장소(데이터 액세스만 가능) -> 데이터베이스
- 유닛 테스트: craps > mock repository to throw -> null 코드
- 이것으로, 크래핑 해, 수정할 수 있는 코드의 불합격 테스트가 실시됩니다.
이것은 「의존」주입입니다.dev는 종속성의 동작을 시뮬레이트하는 것을 대체하여 종속성을 데이터베이스에 주입할 수 있습니다.모든 데이터베이스 테스트에 적합합니다.어쨌든 유닛 테스트가 실시되고 있기 때문에 수정이 필요한 것은 어느 정도이지만 통합 테스트가 필요합니다.이 경우 회귀에 초점을 맞추는 것이 좋을 수 있습니다. 즉, 테스트 결과 다른 문제는 없고 이 기능은 계속 작동합니다.
이미 패치를 작성하셨기 때문에 답변이 늦었군요.
2005년 10월 20일자 블로그 투고 "The do not that an query timeout..켄 헨더슨의 작품.기본적으로 SQL Server에는 쿼리 시간 초과가 없습니다.클라이언트는 SQL 타임아웃을 강제할 수 있지만 엔진 자체는 강제하지 않습니다.
언급URL : https://stackoverflow.com/questions/798192/forcing-a-query-timeout-in-sql-server
'code' 카테고리의 다른 글
SQL 쿼리를 사용하여 테이블 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.04.18 |
---|---|
Objective-C와 Cocoa를 작성할 때 사용하는 베스트 프랙티스는 무엇입니까? (0) | 2023.04.18 |
Bash 스크립트를 종료하기 전에 명령을 실행하는 방법 (0) | 2023.04.13 |
Bash에서 난수를 생성하는 방법은 무엇입니까? (0) | 2023.04.13 |
로그 축 표시 (0) | 2023.04.13 |