튜닝을 위해 XML 입력 파일 사용
데이터베이스 엔진 튜닝 관리자 GUI(그래픽 사용자 인터페이스) 및 dta 명령줄 유틸리티를 사용하여 수행할 수 있는 모든 튜닝 작업은 데이터베이스 엔진 튜닝 관리자 XML 입력 파일에서 정의할 수 있습니다. 그러나 XML 입력 파일은 GUI 및 명령줄 유틸리티로 제공되는 기능 외에도 다른 튜닝 옵션을 지원합니다.
XML 입력 파일은 게시된 데이터베이스 엔진 튜닝 관리자 XML 스키마를 사용하며 이 스키마는 SQL Server 2008 설치 디렉터리의 다음 위치에서 찾을 수 있습니다.
C:\Program Files\Microsoft SQL Server\10\Tools\Binn\schemas\sqlserver\2004\07\dta\dtaschema.xsd
또한 다음 URL에서 다운로드할 수 있습니다.
https://schemas.microsoft.com/sqlserver/2004/07/dta
XML 입력 파일을 사용하면 데이터베이스를 튜닝할 때 자주 사용하는 XML 도구를 이용할 수 있고 숙련된 데이터베이스 관리자가 보다 융통성 있게 작업할 수 있습니다. 예를 들어 XML 입력 파일을 사용하면 기존의 물리적 디자인 구조와 가상의 물리적 디자인 구조(인덱스, 인덱싱된 뷰 및 파티션)가 함께 포함된 구성을 지정할 수 있습니다. 그런 다음 dta 명령줄 유틸리티를 사용하여 이러한 기존 및 가상의 물리적 디자인 구조가 함께 포함된 구성이 이미 구현된 것처럼 데이터베이스를 튜닝할 수 있습니다. 이렇게 하면 이러한 구성을 실제로 구현하는 데 따른 오버헤드 없이 튜닝을 수행하기 전에 "가정(what-if)" 분석이 가능합니다.
다음 하위 섹션에서는 데이터베이스 엔진 튜닝 관리자 XML 입력 파일을 사용해야만 수행할 수 있는 튜닝 작업에 대해 설명합니다. 이러한 입력 파일 및 파일의 사용 방법은 XML 입력 파일 참조(데이터베이스 엔진 튜닝 관리자)를 참조하십시오.
Configuration 요소를 사용하여 구성 지정
사용자 지정 구성 기능은 데이터베이스 엔진 튜닝 관리자 GUI를 통해 제한된 범위에서 사용할 수 있지만 이 기능은 dta 명령줄 유틸리티를 사용하여 XML 입력 파일을 사용할 때만 완벽하게 지원됩니다. XML 입력 파일을 사용하면 완전한 가상 구성을 지정하거나 또는 기존 및 가상의 물리적 디자인 구조가 함께 있는 구성을 지정할 수 있습니다. 그런 다음 데이터베이스 엔진 튜닝 관리자 XML 스키마에 대해 입력 파일을 검사한 후 dta 명령줄 유틸리티에 대한 입력으로 이 파일을 사용할 수 있습니다. 튜닝 세션을 진행하는 동안 데이터베이스 엔진 튜닝 관리자는 데이터베이스에 대해 지정된 작업을 실행합니다. 그러나 데이터베이스 엔진 튜닝 관리자는 인덱스, 인덱싱된 뷰 및 파티션의 기존 구성을 평가하지는 않습니다. 대신 데이터베이스 엔진 튜닝 관리자는 기존 구조 및 가상 구조가 함께 있는 구성을 사용합니다. 가상의 구성을 사용하면 실제로 구성을 구현하는 데 따른 오버헤드 없이 특정 구성이 데이터베이스 성능에 미치는 영향을 분석할 수 있습니다.
기존 및 가상의 물리적 디자인 구조가 함께 있는 구성을 지정하려면 데이터베이스 엔진 튜닝 관리자 XML 입력 파일에서 TuningOptions 요소 다음에 Configuration 하위 요소를 사용하십시오. 자세한 내용은 방법: 탐구 분석 수행 및 사용자 지정 구성이 포함된 XML 입력 파일 예제(DTA)를 참조하십시오.
EventString 요소를 사용하여 인라인 작업 튜닝
데이터베이스 엔진 튜닝 관리자에서 XML 입력 파일을 사용하면 작업 파일을 전혀 사용할 필요가 없습니다. 대신 XML 입력 파일에서 작업 및 관련 가중치 인라인을 지정할 수 있습니다. 별도의 작업 파일이나 테이블을 사용하지 않는 경우 다음과 같은 이점이 있습니다.
튜닝 작업을 위해 데이터베이스 엔진 튜닝 관리자에 별도의 파일이나 테이블을 사용할 수 있는지 여부를 걱정할 필요가 없기 때문에 원격 서버를 보다 쉽게 튜닝할 수 있습니다.
데이터베이스 엔진 튜닝 관리자 기능을 엔터프라이즈 환경 전체에서 사용할 수 있는 스크립트로 보다 쉽게 통합할 수 있습니다.
인라인 작업을 지정하려면 필요에 따라 관련 가중치도 지정할 수 있는 EventString 하위 요소를 사용하십시오. 이 하위 요소를 사용하면 별도의 작업 파일이나 테이블을 지정하는 대신 Workload 부모 요소의 하위 요소로 지정할 수 있습니다. 다음 코드 예에서는 XML 입력 파일에 EventString 요소를 사용하는 방법과 일반 작업 파일을 사용하는 방법을 비교하여 보여 줍니다.
예
1. Workload 요소를 사용하여 별도의 작업 파일 지정
<DTAInput>
...code removed
<Workload>
<File>MyWorkload.sql</File>
</Workload>
...code removed
</DTAInput>
2. EventString 요소를 사용하여 인라인 작업 지정
<DTAInput>
...code removed
<Workload>
<EventString Weight="100">
SELECT * FROM MyTable1
WHERE MyColumn1 > 200
ORDER BY MyColumn1
</EventString>
<EventString Weight="1">
SELECT * FROM MyTable2
WHERE MyColumn2 > 200
ORDER BY MyColumn2
</EventString>
</Workload>
...code removed
</DTAInput>
앞의 예에서는 EventString 요소의 각 쿼리에 가중치가 100과 1로 서로 다르게 지정되었습니다. 즉, 데이터베이스 엔진 튜닝 관리자가 이러한 쿼리를 튜닝할 때 응용 프로그램은 가중치가 100인 쿼리는 해당 쿼리 인스턴스가 100개인 것으로 취급하고 가중치가 1인 쿼리는 해당 인스턴스가 1개인 것으로 처리합니다. 위의 예를 보면 데이터베이스 엔진 튜닝 관리자 평가 목적에서 첫 번째 쿼리는 두 번째 쿼리보다 100배 더 중요합니다. 또한 보다 큼 기호(>)는 XML에서 특별한 의미가 있는 예약 문자이므로 > 기호로 변환되었습니다.
EventString 요소를 사용하여 인라인 작업을 지정하는 예는 인라인 작업이 포함된 XML 입력 파일 예제(DTA)를 참조하십시오.
IgnoreConstantsInWorkload 요소를 사용하여 작업의 상수 무시
작업에 상수를 나타내는 문이 포함될 수 있습니다. 데이터베이스 엔진 튜닝 관리자는 작업의 상수를 사용하여 선택 조건이 있는 인덱싱된 뷰 또는 분할 인덱스에 대한 범위 파티션 함수를 포함하는 권장 구성을 제공할 수 있습니다.
그러나 데이터베이스 엔진 튜닝 관리자에서 작업의 상수를 고려하는 것이 오히려 비효율적인 경우도 있습니다. 예를 들어 다음 문을 포함하는 작업을 가정합니다.
UPDATE BankAccountTable
SET AccountBalance = AccountBalance - 1000.00
WHERE CustomerID =
(SELECT CustomerID FROM Customer WHERE CustomerName = 'Alice')
이 작업은 Alice가 트랜잭션을 수행할 때 캡처되었기 때문에 상수 'Alice'를 포함할 수 있습니다. 데이터베이스 엔진 튜닝 관리자에서 이 상수를 사용하면 효과적인 튜닝 권장 구성을 생성할 수 없습니다. 이 경우 데이터베이스 엔진 튜닝 관리자에서 이 작업을 사용하여 데이터베이스를 튜닝할 때 상수를 무시하도록 지정하는 것이 좋습니다.
TuningOptions 요소 아래에 있는 IgnoreConstantsInWorkload 요소를 XML 입력 파일에 지정하여 데이터베이스 엔진 튜닝 관리자에서 작업의 모든 상수를 무시하도록 강제할 수 있습니다. 이 요소를 지정하면 데이터베이스 엔진 튜닝 관리자에서 권장하는 인덱싱된 뷰에 선택 조건이 포함되지 않습니다. 또한 파티션 함수에 사용되는 상수는 작업에 포함된 상수가 아니라 데이터에서만 파생됩니다.
테스트 서버를 사용하여 프로덕션 서버의 작업 튜닝
대량 작업을 튜닝하면 데이터베이스 엔진 튜닝 관리자가 튜닝하는 동안 쿼리 최적화 프로그램을 여러 번 호출하기 때문에 튜닝되는 서버에 상당한 오버헤드가 발생합니다. 프로덕션 서버와 함께 테스트 서버를 사용하면 이 문제를 해결할 수 있습니다. 데이터베이스 엔진 튜닝 관리자는 다음과 같은 고유한 방식으로 이러한 시나리오를 지원합니다.
튜닝을 수행하려는 사용자가 프로덕션 서버와 테스트 서버에 모두 존재하는지 확인합니다. sysadmin 고정 서버 역할의 멤버인 경우 이 단계가 필요하지 않습니다.
XML 입력 파일에 튜닝 세션을 정의하는 다른 매개 변수와 함께 튜닝에 사용할 테스트 서버를 지정합니다.
dta 명령줄 유틸리티를 사용하여 튜닝 세션을 시작하고 작업 분석을 시작합니다.
이러한 테스트 서버 튜닝 세션을 진행하는 동안 데이터베이스 엔진 튜닝 관리자는 쿼리 최적화 프로그램이 테스트 서버에서 쿼리를 최적화하는 데 도움이 되는 하드웨어 프로필, 데이터베이스 메타데이터 및 통계에 대한 정보 검색과 같이 프로덕션 서버에 대한 호출을 최소화합니다.
이 시나리오에서는 프로덕션 서버 환경과 중복되는 테스트 서버를 실제로 튜닝할 수 있습니다. 테스트 서버 튜닝 결과로 데이터베이스 디자인 구성 권장 사항을 받으면 유지 관리 작업 시 프로덕션 서버에 이를 구현할 수 있습니다. 이러한 프로세스를 사용하면 데이터베이스 엔진 튜닝 관리자가 성능에 미치는 영향을 최소화할 수 있습니다. 또한 프로덕션 서버에서 테스트 서버로 데이터를 복사하는 시간 및 테스트 환경에 강력한 프로덕션 서버 하드웨어를 똑같이 구축하는 데 따른 비용을 줄일 수 있습니다.
테스트 서버를 지정하려면 다음 예에서처럼 TuningOptions 부모 요소 아래에 TestServer 하위 요소를 사용하십시오.
예
<DTAInput>
...code removed
<TuningOptions>
<TestServer>MyTestServer</TestServer>
<FeatureSet>IDX_IV</FeatureSet>
<Partitioning>NONE</Partitioning>
<KeepExisting>NONE</KeepExisting>
</TuningOptions>
...code removed
</DTAInput>
이러한 기능을 사용하는 방법에 대한 자세한 내용 및 다른 코드 예는 프로덕션 서버 튜닝 로드 줄이기를 참조하십시오.