syspolicy_purge_history 배치작업SQL Server 2008 버전부터 엔진을 설치하면 syspolicy_purge_history 배치잡이 생성되어 있습니다. 2008 버전에 PBM (Policy Based Management) 기능이 도입되면서 생성되었는데,PBM 이란 xp_cmdshell 이 활성화가 안되거나, Auto-shrink 검사 등의 조건을 정의해 놓는 정책을 말하며이 정책이 실행될 때마다 결과가 msdb 데이터베이스에 기록됩니다. 기록된 데이터 중 보관기간(HistoryRetentionInDays 속성)보다 오래된 데이터는 지우기 위해 자동으로 생성되는 작업이 syspolicy_purge_history 입니다. syspolicy_purge_history 배치작업 단계1. V..
SQL Server
CEIP 란 SQL Server 2016 이상 버전에서는 설치 시 'Microsoft 에 오류 전송 기능' 을 비활성 할 수 없습니다.이 기능은 CEIP (Customer Experience Improvement Program) 으로 불립니다.오류 전송 기능을 하기 위해 SQL Server 에 TELEMETRY 세션이 붙어 여러 정보를 수집해 갑니다. Microsoft 에 오류를 자동 전송해 기능 개선에 도움을 준다지만저희 입장에서는 별 쓸모가 없는 리소스만 잡아먹는 작업입니다. 기능 제거 방법1. SQL Server CEIP 서비스 확인1. 서비스로 들어갑니다.2. 네모박스로 보이는 CEIP 와 관련된 서비스가 있으면 아래 단계를 계속 진행합니다.(MSSQLSERVER) 는 인스턴스 명을 나타내며, 설..
SSISDB - SSIS Server Maintenance Job 배치작업SSISDB 는 SSIS Server Maintenance Job 배치작업을 가지고 있습니다.이 배치작업은 오래된 배치기록을 제거하는 역할을 하며 매일 00:00 분에 수행됩니다. cleanup_server_retention_window SP 의 execution_cursor 오류SSIS Server Maintenance Job 배치작업은 cleanup_server_retention_window SP 를 호출합니다.그런데 간혹 아래와 같은 오류가 발생합니다. execution_cursor 오류 해결 방법SSISDB 를 생성 시 발생하는 문제로,아래와 같은 구조로 인해 WHILE 문이 반복되는 경우 CURSOR 를 찾을 수 없기 때문..
트랜잭션 로그와 VLFSQL Server 는 각 트랜잭션 및 데이터베이스 수정 내용을 기록하는 트랜잭션 로그가 있습니다.트랜잭션 로그 파일은 VLF (Virtual Log File) 로 구성됩니다. 지금은 VLF 개수에 따른 성능 차이를 포스팅하는게 목적이기 때문에 개념에 대해서는 설명하지 않습니다.아래 URL 에서 개념에 대해 파악할 수 있습니다.https://docs.microsoft.com/ko-kr/sql/relational-databases/logs/the-transaction-log-sql-server?view=sql-server-2017https://docs.microsoft.com/ko-kr/sql/relational-databases/sql-server-transaction-log-arc..
VARCHAR(MAX) 와 NVARCHAR(MAX) 의 단점VARCHAR 와 NVARCHAR 는 유니코드 라는 점에서 다르기 때문에 VARCHAR 로 설명하겠습니다. VARCHAR(N) 컬럼에 데이터를 저장할 때에는 물리적으로 같은 방식으로 저장됩니다.이 말은, 어떤 특정한 동작없이 블록에 바로 쓰인다는 말을 뜻합니다. 그러나 VARCHAR(MAX) 컬럼에 저장하는 경우에는 TEXT 타입처럼 다뤄지게 됩니다.이는 저장을 위한 추가적인 절차가 필요하다는 뜻입니다. ( 단, 저장되는 데이터길이가 8000 자 이상인 경우 ) 왜 8000 자 이상인가? 8K 블록에는 최대 8000 자를 저장할 수 있으며, 이를 넘어가게 되는 경우 오버플로우가 발생하게 됩니다.out of row 라고 말하며, 이를 저장하기 위해..
WITH(NOLOCK)SQL Server 에서 WITH(NOLOCK) 의 힌트를 제공합니다. WITH(NOLOCK) 의 의미는 다음과 같습니다.락이 잡혀있는 데이터에 접근하여 데이터를 읽는다.락이 잡혀있다는 말은 트랜잭션 중이라는 의미이고, 트랜잭션 내에서 데이터는 변경된 데이터를 읽습니다.즉 잠금을 무시한 Dirty Read 이며 트랜잭션이 Rollback 되는 경우에는 잘못된 데이터를 읽을 수 있게 됩니다. 그럼에도 불구하고 WITH(NOLOCK) 옵션은 SELECT 가 대기해야 하는 불상사를 막을 수 있기 때문에 자주 사용됩니다. WITH(NOLOCK) 테스트WITH(NOLOCK) 이 없는 일반 구문을 사용하는 경우,C1 = 1 의 데이터에 대해서 LOCK 이 잡혀있기 때문에 SELECT 는 대기하..
SQL Server 의 Batch Request 와 Transaction 의 모니터링 이유SQL Server 를 유지 관리 할 때에는 현재 서버가 얼마나 열일(?)하는지에 대한 척도를 알고 있어야 합니다.위 2개의 지표는 이러한 개념을 알게 해주는 지표가 될 수 있습니다.2개의 지표는 비슷하게 보일 수 있지만 측정 시 다른 유형의 시작점을 사용하고 있기 때문에 차이점을 알아야 합니다. SQL Server 배치여러 SQL 문을 명령문 그룹으로 실행하거나,여러 SQL 문 그룹으로 구성된 단일 SQL 문을 실행하는 경우 SQL Server 의 일괄 처리로 간주됩니다.이는 실질적으로 전체 일괄 처리 문의 실행 후에 결과가 반환된다는 것을 의미합니다. 대부분의 경우 네트워크 트래픽을 감소시킬 수 있으며, 대상 데..
CheckPoint 란 ( 데이터베이스 검사점 )CheckPoint 란 SQL Server 데이터베이스 엔진이 예기치 않은 종료 또는 충돌 후 복구과정에서 로그에 포함된 변경 내용의 적용을 시작할 수 있는 알려진 올바른 지점을 만드는 것을 의미합니다. 성능상의 이유로 SQL Server 는 변경이 있을 때마다 메모리에서 페이지를 수정하며 이러한 페이지를 실시간으로 디스크에 기록하지 않습니다.대신 SQL Server CheckPoint 는 메모리 상의 Dirty 된 페이지와 메모리의 트랜잭션 로그 정보들을 디스크로 동기화 하는 작업을 정기적으로 수행합니다. 이러한 작업은 위에서 말했던 것처럼 복구 시간을 단축하기 입니다. CheckPoint 설정 종류 속성 구문 설명 자동 EXEC sp_configure ..
인덱스인덱스는 데이터를 빠르게 검색할 수 있게 해주는 객체입니다.컬럼을 오름차순 혹은 내림차순으로 정렬한 후에 빠르게 찾을 수 있도록 도와줍니다. 책의 색인을 의미하죠. 그렇다고 인덱스를 무작정 생성하는 것도 좋은 방법은 아닙니다.인덱스를 만들게 되면 인덱스를 위한 디스크 공간이 필요하며, 인덱스가 있는 테이블은 DML 작업 시 더 많은 비용과 시간을 필요로 하기 때문입니다. 이러한 이유로 인해서 인덱스를 만들 때 해당 테이블의 용도를 정확히 이해한 후에,적절한 컬럼으로 Clustered Index 와 Non Clustered Index를 구성해야 합니다. 인덱스를 만드는 과정데이터페이지를 인덱스 키 값으로 정렬을 한 후 리프레벨부터 인덱스페이지를 만들어 갑니다.인덱스페이지가 다 차게 되면 새로운 인덱스..
인덱스의 종류SQL Server 에서는 인덱스의 종류로 크게 Clustered Index 와 Non Clustered Index 를 지원합니다.Clustered Index 는 해당 키를 기준으로 물리적으로 정렬되어지는,Non Clustered Index 는 해당 키를 기준으로 논리적으로 정렬되어 지게 됩니다. SQL Server 에 Primary Key 를 생성하는 경우 기본적으로는 Clustered Index 로 생성됩니다.그러나 Primary Key 를 Non Clustered Index 로 생성한 후 Clustered Index 를 다른 컬럼으로도 생성할 수 있습니다. Clustered Index 는 가장 좋은 성능을 발휘하지만 테이블에서 한개밖에 생성할 수 없기 때문에,해당 테이블을 조회하는 쿼리..