분류 전체보기 1385

유지관리 계획과 병렬처리 – 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를..

SQL Server 그래픽 실행 계획 노드 정보

SQL Server 그래픽 실행 계획 노드 정보 Version : SQL Server 2000, 2005, 2008, 2008R2, 2012 이전 강좌에서 실행계획을 표시하는 방법과 읽는 순서, 그리고 프로파일러에서 실행계획을 캡처하는 방법에 대해서 알아 보았다. 실행계획 표시 : http://sqlmvp.kr/140181977090 프로파일러 실행계획 캡처 : http://sqlmvp.kr/140182104809 이번 실습은 그래픽 실행계획에서 나타나는 노드 정보를 읽는 방법에 대해서 알아 보자. 다음과 같이 쿼리를 실행하여 그래픽 실행계획을 생성하였다. 마우스 커서를 해당 그림 위에 올려 놓으면 다음과 같이 정보가 나타난다. 물리적 연산 : 해시 조인, 중첩 루프 등 사용된 물리 연산자. 빨간색으로 ..

프로파일러를 이용한 실행계획 캡처하기

프로파일러를 이용한 실행계획 캡처하기 Version : SQL Server 2000, 20005, 2008, 2008R2, 2012 DBA에 필요한 필수 요구 중 하나가 실행계획을 보는 것이다. 이 것은 그래픽 형식 뿐 만 아니라 텍스트 형식으로도 볼 수 있다. 실행 계획을 읽음으로써 현재 쿼리가 어떻게 행동 하는지 알 수 있다. DBA는 이 실행 계획을 바탕으로 문제를 해결 한다. 실행 계획을 캡처 하는 방법에는 여러 가지가 있다. 지난 시간에는 옵션을 통하여 실행 계획을 캡처하는 방법을 알아 보았다. 관련 링크 : http://sqlmvp.kr/140181977090 이번 시간에는 프로파일러를 통한 그래픽 및 텍스트 형식의 실행 계획을 캡처 하도록 하자. 프로파일러를 실행해서 [모든 이벤트 표시]를 ..

SQL Server 그래픽 실행 계획 및 텍스트 실행 계획

SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 Version : SQL Server 2005, 2008, 2008R2, 2012 쿼리 실행계획에는 예상 실행계획과 실제 실행계획이 있다. 예상 실행계획은 통계를 기반으로 예상되는 실행 계획을 나타내며 실제 실행 계획은 쿼리가 수행 되면서 사용된 계획을 반환 한다. 따라서 예상 실행계획과 실제 실행계획의 비용이 차이가 날 수도 있다. 실행계획을 보는 방법에는 그래픽 방법과 텍스트, 기타 XML 등의 방법이 있다. 실행계획 정보에 대한 자세한 내용은 다음 MSDN을 참고 한다. http://msdn.microsoft.com/ko-kr/library/ms189602.aspx [그래픽 실행 계획] 그래픽 실행계획은 SSMS에서 [쿼리] – [예상 실행..

SQL Server에서 Trigger 활성 / 비활성 감시

SQL Server에서 Trigger 활성 / 비활성 감시 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 기본적으로 트리거의 활성/비활성화를 추적하지 않는다. 트리거를 생성하면 기본적으로는 활성화 되어 있다. 하지만 권한을 가진 다른 사용자가 트리거를 비활성 시킬 수 있다. 트리거의 활성/비활성을 감시하는데에는 많은 비용이 소모 될 수 있다. 실습을 통하여 트리거의 활성/비활성을 캡처하자. 다음과 같이 서버 감사를 생성하고 실행 한다. CREATE SERVER AUDIT ServerAudit TO FILE (FILEPATH = 'D:\', MAXSIZE = 1GB) WITH (ON_FAILURE = CONTINUE); GO ALTER SERVER ..