SQL Server 818

SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실

SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 Version : SQL Server 2000, 2005, 2008, 2008R2, 2012 Fill Factor 옵션은 SQL Server에서 인덱스를 생성 할 때 각 페이지를 얼마나 채울지 지정하는 옵션이다. 대부분의 사용자들은 Fill Factor에 대한 정의는 잘 알고 있으나 몇 가지 사실에 대해서는 많이들 오해하는 부분이 있어 간단히 정리해 보고자 한다. Fill Factor 의 기본값은 100 이다? Fill Factor의 기본값은 0 이다. 사실 0과 100은 동일한 기능으로 작동 한다. Fill Factor의 옵션을 80으로 지정하면 80%의 비율로 채우기를 한다. 이미 생성된 인덱스에 Fill Factor 옵션을..

LOB 데이터와 Shrink 작업

LOB 데이터와 Shrink 작업 Version : SQL Server 2005, 2008, 2008R2, 2012 LOB 데이터와 데이터베이스 축소 작업이 성능에 어떤 관계가 있을까? 실제로 LOB 데이터를 만들거나 삭제 후 데이터베이스를 축소하면 성능이 느려 질 수 있다고 한다. 성능이 느려진다는 것은 시스템의 물리적인 성능 뿐 아니라 해당 작업시간이 오래 걸리는 것을 뜻 한다. 데이터 파일 축소 작업이 실행되면 데이터 파일 끝에서 데이터를 읽어와 데이터 파일이 시작할 수 있는 부분으로 이동을 한다. LOB 데이터의 유형은 기본적으로 오프 행에 저장된다. 실제 데이터는 다른 위치에 저장되며 상위 노드에 해당 위치를 참고하는 포인터를 가지고 있다. 예를 들어 LOB 데이터 삭제 후 축소 작업이 진행 될..

데이터베이스 함수 검색 하기

데이터베이스 함수 검색 하기 Version : SQL Server 2005, 2008, 2008R2, 2012 현재 데이터베이스에 생성되어 있는 함수를 한번에 볼 수 없을까? 다음 스크립트를 이용하여 생성된 함수를 확인해 보자. 함수가 생성된 날짜, 수정 날짜, 해당 함수와 연관된 OBJECTID 등 다양한 정보를 확인 할 수 있다. [sys.objects] Select * from sys.objects where type IN ('FN','FS','FT','AF','TF') order by [name] --FN = SQL scalar function --FS = Assembly (CLR) scalar-function --FT = Assembly (CLR) table-valued function --AF..

필터 통계 사용과 파리미터 사용

필터 통계 사용과 파리미터 사용 Version : SQL Server 2008, 2008R2, 2012 옵티마이저가 플랜을 생성하기 위해서는 통계를 이용한다. 통계는 테이블 또는 인덱싱된 뷰에 하나 이상의 열에 대한 쿼리 최적화 통계(필터링된 통계 포함)을 만든다. 대부분의 통계는 옵티마이저에 의해 기본적으로 생성된다. 추가로 사용자가 쿼리의 성능을 더 좋게 만들기 위해서 Create Statistics를 사용하여 추가 통계를 만들 수 있다. 하지만 사용자가 통계를 생성하거나 수정을 할 때에는 매우 주의해야 한다. 다른 쿼리에 영향을 줄 수 있기 때문이다. 통계 생성 방법 : http://msdn.microsoft.com/ko-kr/library/ms188038.aspx 필터링된 통계는 Where 절의 ..

유지관리 계획과 병렬처리 – Index Rebuild

유지관리 계획과 병렬처리 – Index Rebuild Version : SQL Server 2012 엔터프라이즈 에디션 지원 지난 아티클에 유지관리 계획에서 CHECKDB의 병렬처리에 대해서 알아 보았다. 유지관리계획 CHECKDB 링크 : http://sqlmvp.kr/140183594899 이번 시간에는 Index Rebuild에서의 병렬처리에 대해서 알아 본다. 실습을 하기에 앞서 지난 아티클을 참고 하여 SQL Server 2012에서 이벤트를 생성해야 한다. 테스트를 위하여 데모 데이터를 생성 한다. 데모데이터 생성은 아래 링크를 참고하여 스크립트를 실행 한다. 데모 데이터 링크 : http://www.sqlskills.com/blogs/jonathan/enlarging-the-adventure..

유지관리 계획과 병렬 처리 – CHECKDB

유지관리 계획과 병렬 처리 – CHECKDB Version : SQL Server 2012 SQL Server를 운영하는데 있어서 병렬처리는 성능에 영향을 미칠 수 있다. 그렇다고 병럴처리가나쁘다는 뜻이 아니다. 비즈니스 환경에 따라 병렬 또는 싱글 프로세스를 제어하여 최적의 플랜으로 운영할 수 있도록 해야 한다. 데이터베이스 유지 관리 계획에서 CHECKDB를 실행 할 때 MAXDOP 옵션을 통해서 병럴처리를 제어해 보자. 현재 MAXDOP 상태를 확인 한다. SELECT [name], [value], [value_in_use] FROM [sys].[configurations] WHERE [name] = 'max degree of parallelism'; Value_in_use 값이 0 일 때에는 디폴..

쿼리 사이즈(길이) 에 따른 CPU 사용량 증가

쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 Version : SQL Server 2000, 2005, 2008, 2008R2, 2012 쿼리의 사이즈(길이)에 따라 CPU 소요량이 증가 할까? 정답은 증가한다. 물론 SP를 사용하거나 쿼리 플랜을 재사용 할 수 있다면 처음 컴파일 시간을 제외한 나머지는 순수 처리 시간에 따라 달라지겠지만 Ad-hoc 쿼리를 사용한다면 쿼리를 컴파일 하는데 걸리는 시간으로 인하여 쿼리가 길어 질수록 CPU 사용량이 증가하며 최종 반환 속도 또한 컴파일 시간만큼 느려진다. 다음 테스트를 통하여 쿼리 길이에 따라 CPU 사용량이 증가 하는 것을 확인해 보자. [테스트 사양] OS : Windows Server 2008STD (VM) SQL : SQL Server 2008..

Ad-hoc 쿼리를 매개변수화 하여 성능 높이기

Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 Version : SQL Server 2005, 2008, 2008R2, 2012 많은 응용 프로그램에서 SQL Server에 연결하여 쿼리를 호출 한다. 보통 튜닝 가이드를 할 때 임의의 쿼리보다는 프로시저를 만들어서 호출 하기를 권장한다. 이러한 이유는 프로시저를 사용함으로써 여러 가지 이점이 있기 때문이다. 대표적인 예가 쿼리를 계속해서 컴파일 하지 않는다는 것이다. 컴파일에 따른 비용 절약과 플랜을 재사용 할 수 있기 때문에 SQL Server의 성능을 높일 수 있다. 일반적으로 날쿼리라 불리는 응용프로그램에서 매개변수화 하지 않는 쿼리를 요청 한다고 가정하자. 대부분의 쿼리는 같은 쿼리를 사용하면서 Where 절의 조건만 변형된 쿼리를 사용 할 것..

통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) - 통계 옵션을 이용한 실행계획 변경 하기

통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) (통계 옵션을 이용한 실행계획 변경 하기) Version : SQL Server 2005, 2008, 2008R2, 2012 옵티마이저가 실행 계획을 생성할 때 통계를 기반으로 한다. 수동으로 통계를 조작하여 실행 계획을 변경 할 수 없을까? 통계 업데이트시 ROWCOUNT, PAGECOUNT 옵션을 사용하여 통계 정보를 변경하여 보자. 실습을 위하여 테스트 테이블을 생성 한다. CREATE TABLE testtable ([col1] [int] NOT NULL primary key, [col2] [int] NULL, [col3] [int] NULL, [col4] [varchar](50) NULL); CREATE NONCLUSTERED INDE..

SQL Server Plan Guide 생성 및 사용

SQL Server Plan Guide 생성 및 사용 Version : SQL Server 2005, 2008, 2008R2, 2012 회사에서 사용하는 응용프로그램이 내가 운영하고 있는 데이터베이스에 쿼리를 호출 한다. 이 때일부 특정 쿼리가 매우 느리게 실행 되는 것을 확인 하였다. 하지만 나는 응용 프로그램의 코드를 수정 할 수 없다. 어떻게 쿼리 최적화를 할 수 있을까? 위의 상황은 우리가 일반적으로 말하는 웹 서버, 또는 기타 응용프로그램에서 Ad-hoc 쿼리를 호출하였을 때 발생하는 문제이다. 물론 해당 프로그램을 만든 담당자에게 이슈를 전달하여 쿼리를 수정 할 수도 있지만 외부 제품을 구입한 경우에는 이 또한 쉽지 않다. 어떻게 하면 느린 쿼리의 성능을 올릴 수 있을까? Plan Guide를..