반응형
MSSQL에서는 기본적으로 SELECT 시에 공유잠금이 걸린다.
DML(INSERT,UPDATE,DELETE) 작업중인 ROW 또는 TABLE에 SELECT 할 경우,
해당 작업이 끝나야만 SELECT를 할 수 있다는 의미이다.
만일 이렇게 수행된다면 DB의 성능은 떨어지고, 데드락(Deadlock) 이 발생될 수 있다.
하지만, 이때 SELECT 문에 WITH (NOLOCK)을 추가하면 선행작업의 결과와 관계없이
바로 SELECT문이 수행되어서 결과를 반환하게 된다.
EX)
SELECT * FROM TABLE1 WITH (NOLOCK)
SELECT A.CHECKID
, A.HOSTID
, A.DUTYUSER
, B.SYSTEMNAME
, C.CHKTIME
FROM OPRHOSTCHECKDETAIL AS A WITH(NOLOCK)
LEFT OUTER JOIN OPRHOSTIPCODE AS B WITH(NOLOCK) ON A.HOSTID = B.HOSTID
LEFT OUTER JOIN OPRHOSTCHECKMASTER AS C WITH(NOLOCK) ON A.CHECKID = C.CHECKID
SELECT 문장에서 여러 테이블을 조인해서 가져오는 경우
WITH (NOLOCK)을 사용하기 위해서는 모든 테이블에 적어주어야 한다.
프로시저 내에서 사용되는 SELECT 문에서 WITH (NOLOCK)을 사용하기 위해서는 각 문장마다 삽입할 필요없이 프로시저 시작 부분에 다음 문장을 추가해 주면 된다.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
EX)
CREATE PROCEDURE 프로시저명
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
BEGIN
...
END
반응형
'IT > DB' 카테고리의 다른 글
[MSSQL] 한쪽 테이블에만 있는 값을 다른 테이블에 INSERT (0) | 2022.04.15 |
---|---|
[MSSQL] 현재 날짜, 시스템 시간 출력 (0) | 2022.04.01 |
[MSSQL] 콤마로 구분된 데이터를 테이블로 전환 (0) | 2022.03.28 |
[MSSQL] 여러행을 콤마를 포함한 한줄로 변환 (0) | 2022.03.28 |
[MSSQL] 변수 LIKE절 활용 프로시져 (0) | 2022.03.22 |