전체 글 1383

컬럼스토어 인덱스 대용량 데이터 로드

컬럼스토어 인덱스 대용량 데이터 로드 Column Store Index Bulk Load Data Version : SQL Server 2012, 2014 클러스터 컬럼 스토어 인덱스 대용량 데이터 로드 이전 포스팅에서 컬럼스토어 인덱스에 대한 동시성 및 인서트 동시성에 대해서 살펴 보았다. 컬럼스토이 인덱스 ROW와 ROWGROUP 영향 : http://sqlmvp.kr/220122469205 컬럼스토어 인덱스 동시성 : http://sqlmvp.kr/220130069090 컬럼스토어 인덱스 INSERT 작업과 동시성 : http://sqlmvp.kr/220132145097 이번 포스트는 대용량 데이터 로드(Bulk load)를 통해 데이터가 삽입될 때 잠금 동작에 대해서 설명한다. 테스트용 기본 테이..

컬럼스토어 인덱스 INSERT 작업과 동시성

컬럼스토어 인덱스 INSERT 작업과 동시성 Column Store Index Concurrency with INSERT Version : SQL Server 2012, 2014 클러스터 컬럼 스토어 INSERT 이전 블로그에 설명한 바와 같이 클러스터된 컬럼스토어 인덱스는 DW 시나리오에서 빠른 쿼리 성능으로 데이터로드에 최적화 되어 있다. 대량의 인서트 작업에서도 DW 쿼리는 커밋되지 않은 읽기(Read Uncommitted) 격리 수준에서 병렬로 데이터를 로드 할 수 있다. 컬럼스토어 인덱스 동시성 : http://sqlmvp.kr/220130069090 데이터가 동시에 인서트 될 때 잠금 동작에 대해서 알아 본다. Version : SQL Server 2014 CREATE TABLE [dbo].[..

컬럼스토어 인덱스 동시성

컬럼스토어 인덱스 동시성 Column Store Index Concurrency and Isolation Levels Version : SQL Server 2012, 2014 클러스터 컬럼 스토어와 동시성 클러스터 컬럼스토어 인덱스(Clustered column index(CCI))는 기본적으로 데이터웨어하우스 시나리오에 기반하여 디자인 되어 있다. 한 번 쓰고 여러 번 읽기 : CCI는 쿼리 성능에 최적화 되어 있다. 이는 기둥 형식으로 압축된 데이터에서 필요한 컬럼만 가져와서 성능을 높인다. 대량 데이터 가져오기 및 세류(천천히) 데이터 로드 : 인서트 오퍼레이션 INSERT / UPDATE를 지원하지만 이러한 작업은 대량의 작업에 최적화 되어 있지 않다. 사실 동시성 경우 DELETE / UPDAT..

컬럼스토어 인덱스 ROW와 ROWGROUP 영향

컬럼스토어 인덱스 ROW와 ROWGROUP 영향 Version : SQL Server 2012, 2014 SQL Server 메모리 내 Columnstore 인덱스는 열 기반 데이터 저장소 및 열 기반 쿼리 처리를 사용하여 데이터를 저장하고 관리한다. Columnstore 인덱스는 주로 대량 로드 및 읽기 전용 쿼리를 수행하는 데이터웨어 하우징 작업에 효과적이다. columnstore index는 columnstore라는 칼럼 데이터 형식을 사용하여 데이터를 저장, 검색 및 관리하는 기술이다. SQL Server는 클러스터형 columnstore 인덱스와 비클러스터형 columnstore 인덱스를 모두 지원한다. 둘 다 동일한 메모리 내 columnstore 기술을 사용하지만 용도와 지원 기능에 차이가 ..

테이블 변수와 TF 2453

테이블 변수와 TF 2453 Version : SQL Server 2005, 2008, 2008R2, 2012 테이블변수에 데이터를 삽입하면 카디널리티는 항상 1 이다. 행이 적을 경우에는 큰 문제가 되지 않지만 행이 많을 경우에는 쿼리 계획을 효율적으로 생성하지 못하여 쿼리 성능이 저하될 수 있다. dbcc traceoff(2453,-1) go dbcc freeproccache go set statistics profile off go use tempdb go if OBJECT_ID ('t2') is not null drop table t2 go create table t2 (c2 int) go create index ix_t2 on t2(c2) go --insert 100,000 rows into t..

Sp_trace_create MaxfileSize 오류

Sp_trace_create MaxfileSize 오류 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 추적 정의를 생성할 때 maxfilesize 구문에서 오류가 발생한다. 이를 해결하는 방법에 대해서 알아본다. 추적 정의 상태를 만드는 구문은 다음과 같다. sp_trace_create [ @traceid = ] trace_id OUTPUT , [ @options = ] option_value , [ @tracefile = ] 'trace_file' [ , [ @maxfilesize = ] max_file_size ] [ , [ @stoptime = ] 'stop_time' ] [ , [ @filecount = ] 'max_rollover_files' ] 하..

RANDBETWEEN 함수 만들기

RANDBETWEEN 함수 만들기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 엑셀에 포함되어 있는 함수인 RANDBETWEEN(범위 난수 발생)을 SQL에서 구현하는 방법에 대해서 알아 본다. 엑셀에서는 다음과 같이 RANDBETWEEN 함수를 사용하여 범위에 포함되어 있는 난수를 생성하는 함수가 있다. SQL Server에서도 RAND() 함수를 사용하여 두 수 사이의 난수를 생성할 수 있다. select cast(round((75-25)*rand()+25, 0) as integer) as RandBetweenValue 위의 쿼리를 원하는 범위에 따라 재사용이 가능하도록 함수를 생성한다. 다음과 같은 오류가 발생 할 것이다. create function..

Optimize for hint 쿼리 최적화

Optimize for hint 쿼리 최적화 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server는 쿼리를 실행 할 때 다양한 비용을 계산하여 최적의 계획을 생성하고 사용 한다. 그리고 이렇게 생성된 실행 계획은 재사용 된다. 매개 변수 및 실행 계획 재사용 - http://sqlmvp.kr/140188831357 실행 계획 캐싱 및 다시 사용 - http://sqlmvp.kr/140188765472 SQL Server에서는 최적의 실행 계획을 선택하지 않고 하나 이상의 다른 실행계획을 사용할 수 있도록 강제 할 수 있는 힌트도 있다. 예를 들어 Where 절에 특정한 값이 사용됨에 따라 실행 계획이 변경되고 쿼리 실행 시간이 오래 걸리는 경우가..

TempDB 파일 사이즈 증가 시 경고 받기

TempDB 파일 사이즈 증가 시 경고 받기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server를 운영하면서 모니터링해야 할 항목들이 있다. 특히 시스템 데이터베이스의 경우 SQL Server를 운영하는데 필수적인 사항으로 이상이 발견되었을 때 즉시 알림을 받을 수 있도록 해야 한다. 이번 포스트는 시스템 데이터베이스에서 가장 많이 사용되고 있는 tempdb의 파일 사이즈 증가 시 알림을 받기 위한 방법으로 SQL Serve Agent 기능을 활용하는 방법에 대해서 알아본다. 경고 작업을 생성하기 위해 SSMS를 실행하여 SQL Server Agent에서 경고를 선택 한다. 경고에 사용할 이름을 입력하고 유형을 선택 한다. 데이터파일의 증가는 ..

블록킹 세션을 찾아 우선순위 낮은 세션 종료하기

블록킹 세션을 찾아 우선순위 낮은 세션 종료하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스 서버를 운영하다보면 다양한 쿼리 요청으로 인해 블록킹이 발생 할 수 있다. 차단 및 교착이 발생하였을 때 이를 감지하고 블록킹이 발생한 세션 중 우선순위가 가장 낮은 프로세스를 종료 할 수 있다면 원치 않는 비즈니스 중단을 예방 할 수 있다. 시나리오는 다음과 같다. 매일 밤 실행되는 일괄 처리 작업이 다른 프로세스를 차단하는 현상이 발생 하였을 때 일괄 처리 되는 세션을 종료시키고 싶다. 일괄 처리되는 스크립트에 라벨링을 하여 해당 세션을 강제 종료하는 방법에 대해서 알아 본다. 세션 식별 목적을 위해 스크립트의 시작 부분에 CONTEXT_INFO 함..