SQL Server 의 Batch Request 와 Transaction 의 모니터링 이유
SQL Server 를 유지 관리 할 때에는 현재 서버가 얼마나 열일(?)하는지에 대한 척도를 알고 있어야 합니다.
위 2개의 지표는 이러한 개념을 알게 해주는 지표가 될 수 있습니다.
2개의 지표는 비슷하게 보일 수 있지만 측정 시 다른 유형의 시작점을 사용하고 있기 때문에 차이점을 알아야 합니다.
SQL Server 배치
여러 SQL 문을 명령문 그룹으로 실행하거나,
여러 SQL 문 그룹으로 구성된 단일 SQL 문을 실행하는 경우 SQL Server 의 일괄 처리로 간주됩니다.
이는 실질적으로 전체 일괄 처리 문의 실행 후에 결과가 반환된다는 것을 의미합니다.
대부분의 경우 네트워크 트래픽을 감소시킬 수 있으며, 대상 데이터 원본이 배치문의 실행을 최적화 할 수 있다는 점에서
이러한 접근법의 장점은 각 포함 문을 독립적으로 실행하는 것보다 실행이 더 효율적입니다.
명시적 배치 : 2개 이상의 SQL 문이 단일 일괄 처리 스크립트에서 결합되어 세미콜론으로 구분되는 경우입니다.
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (2);
INSERT INTO T1 VALUES (3);
저장 프로시저 : 둘 이상의 SQL 문을 포함하는 모든 저장 프로시저는 일괄 처리로 간주됩니다.
CREATE PROCEDURE TEST
AS
SELECT * FROM T1
SELECT * FROM T2
END
중요한 점은 CREATE PROCEDURE 자체는 Batch 가 아닙니다. 그러나 위의 Procedure 는 Batch 로 실행되는데 그 이유는 2개의 SELECT 문이 Batch 로써 실행되기 때문입니다.
SQL Server 트랜잭션
SQL Server 에서 수행되는 SQL Server 작업 단위 입니다.
트랜잭션은 여러 작업으로 구성되며 각 작업은 지정된 순서로 실행되는 여러 SQL 문으로 구성 될 수 있습니다.
트랜잭션에는 자동 커밋 트랜잭션, 명시적 트랜잭션, 암시적, 일괄 처리 트랜잭션이 있습니다.
Batch Requests/sec 와 Transactions/sec
Batch Requests/sec 를 모니터링 할 때, 해당 수치는 배치가 수행된 수를 의미합니다.
예를 들면, 굉장히 많은 구문을 사용하는 세 개의 저장프로시저가 동시에 실행된다면 Batch Requests 의 값은 3 입니다.
Transactions/sec 는 수치를 읽는 주기동안 '( 마지막 트랜잭션 번호 - 이전 트랜잭션 번호 ) / 두 읽은 사이의 초' 로 계산됩니다.
테스트
테스트 1 - BEGIN TRANSACTION 이 있는 SELECT 문
Batch Requests 와 Transactions 의 수치는 BEGIN TRANSACTION 문에서 수치에 들어감을 알 수 있습니다.
테스트 2 - BEGIN TRANSACTION 이 없는 SELECT 문
당연한 이야기 이지만 Transaction 이 없기 때문에 Transactions/sec 는 수치에 포함되지 않습니다.
테스트 3 - BEGIN TRANSACTION 이 없는 DML 문
DML 문은 기본적으로 트랜잭션으로 들어가기 때문에 명시적 트랜잭션이 없더라도 포함됩니다.
결론
Batch Requests/sec 값이 낮거나 높다고 하여 문제가 있다라고 볼 수 없습니다.
다른 성능 수치를 비교하며 SQL Server 가 처리할 수 있는 배치/트랜잭션 작업이 올바른지, 병목현상은 없는지를 확인해보고
평상시에 들어오는 요청을 문제없이 잘 처리하느냐에 따라서 수치는 얼마든지 달라질 수 있기 때문입니다.
'SQL Server > SQL Server 기타' 카테고리의 다른 글
[MSSQL] VARCHAR(MAX) vs VARCHAR(N) / VARCHAR(MAX) 의 단점 (0) | 2019.06.24 |
---|---|
[MSSQL] WITH(NOLOCK) 과 잠금 모드에 대해 (0) | 2019.06.17 |
[MSSQL] CheckPoint (검사점) 주기 설정하기 (0) | 2019.06.03 |
[MSSQL] 클러스터 인덱스, 넌 클러스터 인덱스, 클러스터 인덱스 + 넌 클러스터 인덱스 구조 (1) | 2019.05.23 |
[MSSQL] 클러스터 PK 인덱스와 넌 클러스터 PK 인덱스, 넌 클러스터 인덱스 기준 (0) | 2019.05.23 |