SQL Server/SQL Server Tip 662

Collation에 따른 DMV 실행 오류

Collation에 따른 DMV 실행 오류 Version : SQL Server 2005, 2008, 2008R2, 2012 대부분 DBA들은 자신만의 스크립트를 준비하여 필요할 때 꺼내어 사용한다. 또는 DB관리 툴에서 자동화된 스크립트를 이용하여 SQL Server의 상태를 확인 하곤 한다. 물론 나 또한 항상 준비된 스크립트 DMV 명령을 통해 잘 사용하고 있다. 그런데 한가지 문제가 발생 했다. 특정 서버에서 작동하지 않는 것이다. 상황을 설명하자면 국내에서 잘 사용하던 스크립트가 있었다. 그래서 이 스크립트를 내가 관리하는 해외 고객님 서버에서 실행 하였더니 에러가 발생 하였다. 무엇이 문제 일까? 스크립트에 오류가 있었던 것일까? 원인은 Collation에 따른 데이터 정렬셋으로 인하여 DMV..

참조 개체 확인 (sys.sql_expression_dependencies)

참조 개체 확인 (sys.sql_expression_dependencies) Version : SQL Server 2008, 2008R2, 2012 데이터베이스에서 엔티티의 참조 관계를 확인 하는 방법을 알아 보자. 사용자 정의 엔티티는 이름별 종속성 마다 한 개의 행을 가지고 있다. 두 엔터티 간의 종속성은 한 엔티티가 참조 엔티티라고 하는 다른 엔티티의 영구 SQL 식에 이름별로 나타나는 경우 생성된다. 예를 들어 뷰 정의에서 테이블을 참조하면 참조 엔터티인 뷰는 참조된 엔터티인 테이블에 종속됩니다. 테이블이 삭제되면 뷰를 사용할 수 없다. 실습을 통해서 참조된 엔티티를 확인 하는 방법을 알아 보자. [SSMS에서 확인하기] 종속성을 확인하려는 개체에서 마우스 오른쪽을 클릭하여 [종속성 보기]를 선택..

특정 테이블의 마지막 접근 시간 알아보기

특정 테이블의 마지막 접근 시간 알아보기 Version : SQL Server 2005, 2008, 2008R2, 2012 특정 테이블에 대하여 마지막 접근 시간 및 액세스 방법을 어떻게 알 수 있을까? 가장 좋은 솔루션은 데이터베이스 감사 작업을 생성하고 특정 테이블을 감사하는 것이다. 하지만 이와 같이 감사 작업을 생성하지 않고 간단히 정보를 보고 싶을 땐 어떻게 할까? 실습을 통해 알아 보자. 실습은 AdventureWorks2008R2 예제 데이터베이스를 이용 하였다. 다음과 같이 테이블을 스캔하는 쿼리와 인덱스를 탐색하는 2종류의 쿼리를 실행 하였다. select * from person.Address select * from person.Address where AddressID = 1 다음 ..

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