SQL Server 818

Spool 연산자와 추적 플래그 8690

Spool 연산자와 추적 플래그 8690 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 쿼리 실행계획을 확인하다 보면 스풀(spool) 연산자(인덱스 스풀 또는 테이블 스풀)를 볼 수 있다. 스풀 연산자는 중간 결과를 저장하기 때문에 SQL의 다시 스캔 하거나, 또는 반복 사용을 위해 다시 계산할 필요가 없도록하여 쿼리 성능을 개선하는데 도움이 된다. 스풀 테이블은 tempdb 데이터베이스 저장되어 쿼리 사용 기간 중에만 존재한다. 예를 들어 Nested Loops 연산자로 연산자를 다시 수행하지만 다시 바인딩할 필요가 없을 경우 입력 사항을 다시 검색하는 대신 스풀된 데이터를 사용한다. 스풀 실행 계획은 아래 그림과 같은 아이콘으로 표시 된다. ..

.NET 4.6.1에 변경된 Multisubnet 기본 수신기 동작

.NET 4.6.1에 변경된 Multisubnet 기본 수신기 동작 Version : SQL Server 2012, 2014, 2016 SQL Server에서 AlwaysOn을 구성하여 사용할 때 리스너는 여러 개의 IP 주소를 감지하여 가용성 그룹에 정의되어 있는 IP주소에 연결을 시도하는데 간헐적으로 연결시간 초과가 발생할 수 있다. SQL 클라이언트의 기본 동작은 DNS에서 반환된 모든 IP 주소에 연결을 시도하는데 DNS 구성에 의존하기 때문에 몇 가지 문제가 발생할 수 있다. 가장 빈번하게 발생하는 문제가 정확하지 않은 IP 반환 또는 온라인되어 있지 않은 IP 반환이다. 기본적으로 TCP 연결 시도에 대한 기본 제한시간은 21초이며 IP 주소가 온라인 상태가 아닌 경우 다음 IP를 시도하기까지..

SQL Server 2014 온라인 인덱스 리빌드와 잠금 우선순위 옵션

SQL Server 2014 온라인 인덱스 리빌드와 잠금 우선순위 옵션 Version : SQL Server 2014 SQL Server에서 인덱스를 다시 작성하면 인덱스가 삭제된 다음 다시 생성된다. 인덱스가 생성되는 과정에서 조각화가 제거되고 지정된 채우기 비율 또는 기존 채우기 비율 설정을 기준으로 페이지를 압축하여 디스크 공간을 회수하고 인덱스 행을 연속된 페이지로 다시 정렬할 수 있다. 익스텐트가 128개 이상인 인덱스를 다시 작성하면 데이터베이스 엔진에서 실제 페이지 할당 취소와 해당 관련 잠금이 트랜잭션 커밋후까지 지연된다. 인덱스의 크기가 작은 경우에는 혼합 익스텐트에 저장되기 때문에 리빌드 후에도 조각화가 줄어들지 않는 경우가 있다. ALTER INDEX : https://msdn.mic..

함수 통계 정보 확인 (sys.dm_exec_function_stats)

함수 통계 정보 확인 (sys.dm_exec_function_stats) Version : SQL Server 2016 SQL Server에서 쿼리를 사용할 때 함수를 사용하는 경우가 있다. 함수를 사용할 때 함수에 대한 성능을 확인하기 위해서 일반적으로 함수의 개별문을 실행하였다. 이번 포스트에서는 SQL Server 2016에서 새롭게 제공된 sys.dm_exec_function_stats DMV를 사용하여 함수에 대한 통계 정보를 확인해 본다. sys.dm_exec_function_stats는 모든 스칼라 함수 및 인메모리, CLR 스칼라 함수에 대한 통계 정보를 제공한다. 이 기능은 모든 스칼라 함수에 대한 캐시된 실행 계획을 반환한다. 인모메리 기능의 통계를 볼 때 논리적 물리적 IO에대한 칼럼..

NULL 데이터가 포함된 데이터 사용 시 주의점

NULL 데이터가 포함된 데이터 사용 시 주의점 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server에서 NULL은 0 값도 아니며 공백도 아닌 그냥 빈 값이다. 데이터를 조회할 때 NULL 값이 포함된 경우 사용자가 원하는 값이 조회되지 않을 수 있다. NULL이 포함된 데이터 조회시 어떻게 값이 다르게 표현되는지 알아본다. 실습에 사용된 옵션은 시스템 기본값인 SET ANSI_NULLS ON 상태이다. 아래 스크립트는 두 개의 테이블을 생성하여 #TestTableB 테이블에만 NULL값이 포함된 데이터를 입력 한다. --Creating the first temporary table for testing IF(OBJECT_ID('te..

통계정보와 실제 데이터 분포 확인하기

통계정보와 실제 데이터 분포 확인하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 통계(Statistics)는 검색 조건이 주어질 때 해당 컬럼으로 구성되는 인덱스를 사용할지 여부를 옵티마이저가 판단의 근거로 활용되는 자료이다. 통계는 데이터가 있는 컬럼에 대해 인덱스가 만들어질 때 이 컬럼 값의 히스토그램 및 관련정보를 이용하여 만들어진다. 통계 : http://sqlmvp.kr/140165557766 통계의 경우 데이터가 변경됨에 따라 그 정보도 업데이트되는데 일정 비율이상 데이터가 변경될 업데이트 된다. 간혹 특정 시점에서 쿼리가 느린 경우가 발생하는데 통계정보와 실제 데이터의 분포가 다를 경우 옵티마이저가 잘못된 판단을 하여 최적화된 플랜..

SQL Server Failover Cluster 설치시 네트워크 이름으로 인한 설치 오류

SQL Server Failover Cluster 설치시 네트워크 이름으로 인한 설치 오류 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server Failover Cluster 인스터스를 설치할 때 발생하는 일반적인 오류에 대해서 다루어본다. SQL Server를 설치할 때 설치시 인스턴스 구성페이지에서 아래와 같은 오류 메시지를 쉽게 볼 수 있다. 설치 과정에서 SQL Server 네트워크 이름 및 인스턴스 이름을 입력 후 클릭하였을 때 이 시점에서 설치 프로그램이 몇 가지 유효성을 수행한다. 그 검증이 실패할 경우 화면 하단에 오류 메시지를 확인할 수 있다. 오류 메시지를 클릭하면 메시지에 포함된 몇 가지 추가 정보를 볼 수 있다. ..

SSIS 실행 로그 남기기

SSIS 실행 로그 남기기 Version : SSIS Server 2005, 2008, 2008R2, 2012, 2014, 2015 SSIS 패키지를 운영할 때 중요한 요소 중 하나는 로깅이다. SSIS에서는 다양한 로깅 방법을 지원한다. 텍스트 파일 – 가장 기본적인 로깅 SQL Server 테이블 – 가장 큰 장점은 쉽게 로그 결과를 조회할 수 있다. SQL Server 프로파일러 – 이벤트 프로파일 캡처할 수 있다. 추적에 기록된다. Windows 이벤트 로그 XML 파일 [SQL Server 테이블에 로깅] SQL Server 테이블에 로깅하는 방법에 대해서 알아본다. (다른 옵션들을 선택해도 설정 방법은 유사하기 때문에 응용하여 사용할 수 있다.) 로깅을 테스트하기 위해 SSIS 제어흐름에서 S..

SSRS 2016 향상된 구독(Subscription) 기능

SSRS 2016 향상된 구독(Subscription) 기능 Version : SSRS 2016 SQL Server 2016 Reporting Service에서 몇 가지 향상된 기능이 추가 되었다. 그 중 구독(Subscription) 기능에 대해서 향상된 부분을 알아본다. [구독의 활성 및 비활성] SSRS를 운용할 때 일시적으로 특정 레포트의 구독을 중지 해야하는 경우가 발생한다. SSRS 2016에서는 다음과 같이 구독을 선택하고 활성 및 비활성 할 수 있다. 구독을 선택하고 비활성화 할 경우 Status 항목에 Disabled 라고 표시되며 녹색 동그라미 부분이 비활성 상태로 표시 된다. 구독을 활성활 할 경우 Status는 Ready 상태로 표시된다. [구독 소유자 변경] SSRS 2016에서 ..

확장이벤트를 사용한 실행 계획 캡처

확장이벤트를 사용한 실행 계획 캡처 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 확장이벤트를 사용하여 실행 계획을 캡처하는 방법에 대해서 알아본다. 캡처된 쿼리 실행 목록에 다음과 같은 이름이 있다면 플랜을 확인하여 검토할수 있도록 한다. NojoinPredicate (2005 이상) ColumnWithNoStatistics (2005 이상) UnmatchedIndexes (2008 이상) PlanAffectingConvert (2012 이상) 아래 스크립트는 확장이벤트를 생성한다. 확장이벤트 생성시 너무 많은 오버헤드가 발생하지 않도록 필요한 내용만 추가하도록 한다. 아래 확장 이벤트는 SQL_Text(쿼리문)과 plan_handle(실행계획)..