데이터베이스 25

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

컬럼스토어 인덱스 대용량 데이터 로드 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 기술을 사용하지만 용도와 지원 기능에 차이가 ..

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..

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 함..

비결정적 사용자 정의 함수 사용으로 인한 느린 쿼리

비결정적 사용자 정의 함수 사용으로 인한 느린 쿼리 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서는 사용자 정의 함수를 생성하고 사용할 수 있다. 사용자 정의 함수는 매개변수를 허용하고 복잡한 계산 등의 동작을 수행하며 해당 동작의 결과를 값으로 반환한다. 반환 값은 단일 스칼라 값이나 테이블일 수 있다. 사용자 정의 함수 만들기 : http://msdn.microsoft.com/ko-kr/library/ms186755.aspx 이번 포스트는 비결정적인 사용자 정의 함수로 인하여 쿼리가 느린 상황을 살펴보고 해결하는 방법에 대해서 살펴본다. 포스트의 내용은 CSS SQL Engineers를 참고 하였으며 읽고 이해한 내용을 정리하였다...

MySQL/MariaDB 아키텍처 – 쿼리 캐시(Query Cache)

MySQL/MariaDB 아키텍처 – 쿼리 캐시(Query Cache) Version : Mariadb 5.5.4.2-WinX64 MySQL / MariaDB 쿼리 캐시(Query Cache)는 타 DBMS에는 없는 기능을 적절히 설정만 잘한다면 상당한 성능 향상 효과를 얻을 수 있다. 쿼리 캐시는 SQL문장을 캐시하는 것이 아니라 쿼리의 결과를 메모리에 캐시해 두는 기능이다. 쿼리 캐시의 구조는 간단한 키와 값의 쌍으로 관리되는 맵과 같은 데이터 구조로 구현돼 있다. 쿼리 캐시에서 데이터를 내보내기 전에 다음과 같은 과정이 필요하다. 쿼리 캐시는 MySQL의 어떠한 처리보다 앞 단에 위치하며 캐시된 결과를 찾기 위해 쿼리 문장을 분석해서 복잡한 비교 과정을 거치는 것이 아니기 때문에 아주 간단하고 빠르..

MySQL, MariaDB 2015.07.22

테이블 생성 삭제 / 데이터 입력 삭제

테이블 생성 삭제 / 데이터 입력 삭제 Version : Mariadb 5.5.4.2-WinX64 테이블 생성 삭제에 대해서 알아본다. [테이블 생성] 기본 문법 CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options ]... [partition_options] CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options ]... [partition_options] select_statement CREATE [OR REPLACE] [TEMPORARY] TA..

MySQL, MariaDB 2015.07.16