SQL Server/SQL Server Tip 662

SQL Server 복잡한 쿼리가 옵티마이저에 미치는 영향과 옵티마이저 timeout

SQL Server 복잡한 쿼리가 옵티마이저에 미치는 영향과 옵티마이저 timeout · Version : SQL Server SQL Server는 비용 기반(cost-based) 쿼리 최적화 프로그램을 사용한다. 따라서 여러 쿼리 계획을 작성하고 검사한 후 비용이 가장 낮은 쿼리 계획을 선택한다. SQL Server 쿼리 최적화 프로그램(QO)의 목적중 하나는 쿼리 실행과 비교하여 쿼리 최적화에 “합리적인 시간”을 소비하는 것이다. 따라서 QO에는 최적화 프로세스를 중지하기 전에 고려해야 할 태스크 임계값이 내장되어 있다. QO가 모든 계획은 아니지만 가능한 대부분의 계획을 고려하기 전에 임계값에 도달하면 Optimizer Timeout 한계에 도달한다. 이벤트 로그에는 “Reason For Early..

SQL Server 2019 에서 문자열 잘림에 대한 향상된 에러 메시지 반환

SQL Server 2019 에서 문자열 잘림에 대한 향상된 에러 메시지 반환 · Version : SQL Server 2019 SQL Server 2019 CTP 2.0에서 문자열 잘림에 대한 에러메시지가 향상되었다. 일반적으로 ETL 작업 시 많이 겪는 문제중 하나가 “String or binary data would be truncated”이다. 이 오류 조건은 일치하는 데이터 유형 / 길이가 없는 소스와 대상간에 ETL을 구현할 때 발생할 수 있다. 특히 대형 데이터 세트에서 가장 시간이 많이 걸리는 프로세스중 하나이다. 아래 스크립트는 크기가 충분하지 않는 열에 해당 열보다 큰 데이터를 삽입하면 어떻게 되는지 확인하는 예제 스크립트이다. DROP TABLE IF EXISTS [Sales].[Sa..

SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상)

SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) · Version : SQL Server 2019 SQL Server 2019 CTP 2.0에서 스토리지 엔진의 업그레이드 기능으로 columnstore 및 columnstore archive 압축에 대한 지원으로sp_estimate_data_compression_savings 프로시저 기능이 업데이트 되었다. 이 저장 프로시저는 SQL Server 2008 이후에 사용되었으며 테이블 및 인덱스 압축을 고려할때 사용할 수 있다. 프로시저에서는 schema_name, object_name, index_id, partition_number 및 data_compre..

SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인

SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 · Version : SQL Server 2019 SQL Server 2019 CTP 2.0에서 추가된 스토리지 엔진의 새로운 기능으로 페이지 관련 대기를 볼 수 있는 sys.dm_db_page_info DMV가 추가 되었다. 이 기능은 기존의 DBCC로 확인할 수 있었던 tempdb 경합이나, 마지막 페이지 삽입 경합(las page insert contention) 및 페이지 수준의 블록킹 등을 확인할 수 있다. sys.dm_db_page_info DMV는 데이터베이스 ID, 파일 ID, 페이지 ID 및 모드(LIMITED 또는 DETAILED)의 4가지 ..

SQL Server 2019에서 향상된 Rowstore batch mode

SQL Server 2019에서 향상된 Rowstore batch mode · Version : SQL Server 2019 SQL Server 2019 Preview에서 소개된 내용으로 쿼리 처리 개선 사항으로 Intelligent Query Processing(QP) 기능중 Batch mode on Rowstore (Rowstore일괄처리 모드)에 대해서 소개한다. 이 기능은 쿼리처리에 사용할 수 있는 컬럼스토어 인덱스가 없는 경우 일괄처리 모드 실행의 이점을 제공한다. 일괄처리 모드는 주로 여러 행을 검색하고 행 전체에서 중요한 집계, 정렬 및 그룹화 작업을 수행하는 분석 쿼리를 대상으로 한다. 지금까지는 컬럼스토어 인덱스와 관련된 쿼리에는 배치모드가 예약되었다. 행 단위가 아니라 한번에 ~900행..

SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화

SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 · Version : SQL Server 2016 later SQL Server에서는 서버의 특정 동작을 임시로 설정 하거나 중지 시킬때 사용하는 추적 플래그(Trace Flag)라는 기능이 있다. 추적 플래그는 주로 성능 문제를 진단하거나 저장 프로시저 또는 복잡한 컴퓨터 시스템을 디버깅하는데 사용된다. · DBCC TRACE ON – Trace Flags : https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql?view=sql-server-2017 추적 플래그를 쿼리에서 사용할때 지..

In-memory optimized table에 사용되는 Hash Index

In-memory optimized table에 사용되는 Hash Index · Version : SQL Server 2014 later SQL Server에서 새롭게 추가된 Hash Index(해시 인덱스)는 In-Memory optimized table(인메모리 최적화 테이블)에서 사용된다. 기본적으로 테이블의 행을 빠르게 찾고 읽으려면 인덱스가 필요하다. 해시 인덱스는 버킷의 컬렉션은 배열(Array) 구성된다. 해시 함수는 인덱스 키를 해시 인덱스의 해당 버킷으로 매핑한다. 아래 그림은 세 개의 인덱스가 해시 함수를 사용하여 해시 인덱스에 있는 세 개의 서로 다른 버킷에 매핑되는것을 나타낸다. 아래 그림에서 해시 함수 이름은 f(x)이다. 해시 인덱스에 사용되는 해시 함수의 특징은 아래와 같다. ..

VM환경에서 AG를 구성하였을때VSS 백업 동작 변경

VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 · Version : SQL Server 2016, SQL Server 2017 SQL Server 2016 Standard Edition(또는 이후 버전)을 사용하여 가상 컴퓨터 (Virtual Machine) 환경에서 기본 가용성 그룹( AG)을 구성하였을때 AG의 보조 복제본을 호스팅하는 VM환경에서 백업이 실패한 것으로 나타날 수 있다. 이러한 이유는 Volume Shadow Copy Service(VSS)가 VM환경의 보조 복제본에서호스트되는 모든 SQL Server 데이터베이스를 일관된 방식으로 백업하기 때문이다. · Volume Shadow Copy Service : https://docs.microsoft.com/ko-kr/windows..

SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치

SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 · Version : SQL Server 2016, SQL Server 2017 SQL Server2016에서 도입된 가용성 그룹(Availability Group)에 대한 데이터베이스 수준 상태 탐지 장애 조치 (Database Level Failover) 옵션은 가용성 그룹에 있는 하나 이상의 데이터베이스에 문제가 있을 경우 가용성 그룹에 장애 조치 메커니즘을 실행시키기 위해 도입되었다. 이 기능을 사용하면 데이터베이스의 고가용성을 보장할 수 있으며 업무상 중요한 데이터베이스가 있는 모든 가용성 그룹에 권장되는 최상의 방법이다. 데이터베이스 수준 상태 탐지 장애조치의 초기 구현에서는 가용성 그룹의 주 복제본에서..

SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size

SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size · Version : SQL Server 2016 SQL Server에서는 대용량 데이터를 로드(bulk load)할때 시스템의 오버헤드를 줄이기 위해 최소 로깅(minimal logging)을 사용한다. 최소 로깅에 대해서는 아래 링크를 참고한다. · Bulk Import Optimizations (Minimal Logging) : https://blogs.msdn.microsoft.com/sqlserverstorageengine/2008/02/04/bulk-import-optimizations-minimal-logging/ SQL Server 2016에서는 최소 로깅의 기능 개선 일부로 인..