@@LOCK_TIMEOUT는 SQL Server에서 사용되는 시스템 함수로서, 특정 쿼리나 트랜잭션에서 락(잠금)을 획득하는 시간 제한을 나타냅니다.
이 값은 밀리초 단위로 설정되며, 기본적으로 -1로 설정되어 있습니다.
-1로 설정된 경우, 무한 대기를 의미하며, 락이 해제될 때까지 획득을 시도합니다.
하지만, @@LOCK_TIMEOUT를 양수 값으로 설정하면 해당 시간 동안만 락을 획득하려고 시도하다가 제한 시간을 초과하면 오류가 발생하고 쿼리나 트랜잭션은 롤백됩니다.
예를 들어, 아래와 같이 @@LOCK_TIMEOUT를 설정하고 쿼리를 실행하는 경우를 살펴보겠습니다.
-- @@LOCK_TIMEOUT 설정
SET LOCK_TIMEOUT 5000 -- 5초로 설정
-- 락을 가지고 있는 다른 트랜잭션
BEGIN TRAN
UPDATE myTable SET columnName = 'NewValue' WHERE someCondition = 'SomeValue'
-- 5초 이내에 락을 획득하지 못하면 에러 발생
BEGIN TRAN
UPDATE myTable SET columnName = 'AnotherValue' WHERE someCondition = 'AnotherValue'
위의 예제에서는 @@LOCK_TIMEOUT를 5초로 설정한 후, 락을 가지고 있는 다른 트랜잭션이 실행 중입니다.
이 상태에서 두 번째 트랜잭션이 5초 이내에 락을 획득하지 못하면 오류가 발생하고 해당 트랜잭션은 롤백됩니다.
따라서, @@LOCK_TIMEOUT를 적절하게 설정하여 락이 오래 걸리는 쿼리나 트랜잭션의 실행을 제한할 수 있습니다.
이를 통해 락 경합을 줄이고, 다른 사용자들의 쿼리 성능에 영향을 최소화할 수 있습니다.
@@LOCK_TIMEOUT를 설정할 때는 너무 짧은 시간으로 설정하면 락을 획득하지 못하는 쿼리가 많이 발생하여 성능 저하를 초래할 수 있으므로, 사용자들의 쿼리 동작과 환경을 고려하여 적절한 값을 설정하는 것이 중요합니다.
또한, 락 타임아웃 설정은 특정 쿼리나 트랜잭션에만 영향을 주기 때문에, 전체 시스템에 영향을 주지 않도록 주의하여야 합니다.
'SQL > MSSQL' 카테고리의 다른 글
[MSSQL] @@OPTIONS 사용 방법 및 예시 (0) | 2023.08.25 |
---|---|
[MSSQL] @@NESTLEVEL 사용 방법 및 예시 (0) | 2023.07.26 |
[MSSQL] @@MAX_PRECISION 사용 방법 및 예시 (0) | 2023.07.26 |
[MSSQL] @@MAX_CONNECTIONS 사용 방법 및 예시 (0) | 2023.07.26 |
[MSSQL] @@LANGUAGE 사용 방법 및 예시 (0) | 2023.07.26 |
[MSSQL] @@LANGID 사용 방법 및 예시 (0) | 2023.07.26 |
[MSSQL] @@DBTS 사용 방법 및 예시 (0) | 2023.07.26 |
[MSSQL] @@DATEFIRST 사용 방법 및 예시 (0) | 2023.07.26 |