프로덕션 서버 튜닝 로드 줄이기
적용 대상: SQL Server Azure SQL Database
데이터베이스 엔진 튜닝 관리자는 쿼리 최적화 프로그램에서 워크로드를 분석하고 권장 사항을 조정합니다. 프로덕션 서버에서 이 분석을 수행하면 서버 부하가 가중되고 튜닝 세션 중에 서버 성능이 저하될 수 있습니다. 프로덕션 서버 외에 테스트 서버도 사용하여 튜닝 세션 중에 서버 부하에 미치는 영향을 줄일 수 있습니다.
데이터베이스 엔진 튜닝 관리자 테스트 서버를 사용하는 방법
테스트 서버를 사용하는 일반적인 방법은 프로덕션 서버에서 테스트 서버로 모든 데이터를 복사하고, 테스트 서버를 튜닝한 다음, 프로덕션 서버에서 권장 사항을 구현하는 것입니다. 이 프로세스는 프로덕션 서버에 미치는 성능 영향을 없애지만 최적의 솔루션은 아닙니다. 예를 들어 프로덕션 서버에서 테스트 서버로 많은 양의 데이터를 복사하는 데 상당한 시간과 리소스가 소비될 수 있습니다. 또한 테스트 서버 하드웨어의 성능은 프로덕션 서버 하드웨어 보다 뒤쳐지는 것이 보통입니다. 튜닝 프로세스는 쿼리 최적화 프로그램에서 사용되며, 생성되는 권장 사항은 부분적으로 기본 하드웨어를 기반으로 합니다. 테스트 서버와 프로덕션 서버 하드웨어가 동일하지 않은 경우 데이터베이스 엔진 튜닝 관리자의 권장 사항은 정확성이 떨어집니다.
이러한 문제를 방지하기 위해 데이터베이스 엔진 튜닝 관리자는 대부분의 튜닝 부하를 테스트 서버에 오프로드하여 프로덕션 서버의 데이터베이스를 튜닝합니다. 프로덕션 서버 하드웨어 구성 정보를 사용하고 실제로 프로덕션 서버에서 테스트 서버로 데이터를 복사하지 않고 이 작업을 수행합니다. 데이터베이스 엔진 튜닝 관리자는 프로덕션 서버에서 테스트 서버로 실제 데이터를 복사하지 않습니다. 메타데이터와 필요한 통계만을 복사합니다.
다음 단계에서는 테스트 서버에서 프로덕션 데이터베이스를 튜닝하는 프로세스를 간략하게 설명합니다.
테스트 서버를 사용하려는 사용자가 양쪽 서버에 존재하는지 확인합니다.
시작하기 전에 테스트 서버를 사용하여 프로덕션 서버의 데이터베이스를 튜닝하려는 사용자가 두 서버에 모두 있는지 확인합니다. 이렇게 하려면 테스트 서버에서 사용자와 해당 사용자의 로그인을 만들어야 합니다. 두 컴퓨터에서 sysadmin 고정 서버 역할의 구성원인 경우 이 단계가 필요하지 않습니다.
테스트 서버에서 워크로드를 튜닝합니다.
테스트 서버에서 작업을 튜닝하려면 dta 명령줄 유틸리티가 있는 XML 입력 파일을 사용해야 합니다. XML 입력 파일에서 TuningOptions 부모 요소 아래의 다른 하위 요소에 대한 값을 지정하는 것 외에, TestServer 하위 요소가 있는 테스트 서버의 이름도 지정합니다.
튜닝 프로세스 중에 데이터베이스 엔진 튜닝 관리자가 테스트 서버에 셸 데이터베이스를 만듭니다. 이 셸 데이터베이스를 만들고 튜닝하기 위해 데이터베이스 엔진 튜닝 관리자는 프로덕션 서버를 호출하여 다음을 수행합니다.
데이터베이스 엔진 튜닝 관리자가 프로덕션 데이터베이스에서 테스트 서버 셸 데이터베이스로 메타데이터를 가져옵니다. 이 메타데이터에는 빈 테이블, 인덱스, 보기, 저장 프로시저, 트리거 등이 포함됩니다. 이렇게 하면 테스트 서버 셸 데이터베이스에 대해 워크로드 쿼리를 실행할 수 있습니다.
데이터베이스 엔진 튜닝 관리자가 쿼리 최적화 프로그램이 테스트 서버에서 쿼리를 정확하게 최적화할 수 있도록 프로덕션 서버에서 통계를 가져옵니다.
데이터베이스 엔진 튜닝 관리자가 쿼리 계획을 생성하는 데 필요한 정보를 쿼리 최적화 프로그램에서 제공하기 위해 프로덕션 서버에서 프로세서 및 사용 가능한 메모리 수를 지정하는 하드웨어 매개 변수를 가져옵니다.
데이터베이스 엔진 튜닝 관리자가 테스트 서버 셸 데이터베이스 튜닝을 완료하면 튜닝 권장 사항이 생성됩니다.
테스트 서버를 튜닝하여 받은 권장 사항을 프로덕션 서버에 적용합니다.
다음 그림은 테스트 서버 및 프로덕션 서버 시나리오를 보여 줍니다.
참고 항목
테스트 서버 튜닝 기능은 데이터베이스 엔진 튜닝 관리자 GUI(그래픽 사용자 인터페이스)에서 지원되지 않습니다.
예시
우선 튜닝 작업을 수행하려는 사용자가 테스트 서버와 프로덕션 서버에 모두 존재하는지 확인합니다.
사용자 정보가 테스트 서버에 복사되면 데이터베이스 엔진 튜닝 관리자 XML 입력 파일에서 테스트 서버 튜닝 세션을 정의할 수 있습니다. 다음 XML 입력 파일 예에서는 데이터베이스 엔진 튜닝 관리자로 데이터베이스를 튜닝하도록 테스트 서버를 지정하는 방법을 보여 줍니다.
이 예제에서는 MyServerName
에서 MyDatabaseName
데이터베이스를 튜닝하고 있습니다. Transact-SQL 스크립트, MyWorkloadScript.sql
이 작업으로 사용됩니다. 이 워크로드에는 MyDatabaseName
에 대해 실행되는 이벤트가 포함됩니다. 튜닝 프로세스의 일부로 발생하는 이 데이터베이스에 대한 대부분의 쿼리 최적화 프로그램 호출은 MyTestServerName
에 상주하는 셸 데이터베이스에 의해 처리됩니다. 셸 데이터베이스는 메타데이터와 통계로 구성됩니다. 이 작업 결과로 튜닝 오버헤드가 테스트 서버로 오프로드됩니다. 데이터베이스 엔진 튜닝 관리자 이 XML 입력 파일을 사용하여 튜닝 권장 사항을 생성하는 경우 인덱스만(<FeatureSet>IDX</FeatureSet>
)만 고려하고, 분할하지 않아야 하며, MyDatabaseName
의 기존 실제 디자인 구조를 유지할 필요가 없습니다.
<?xml version="1.0" encoding="utf-16" ?>
<DTAXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/dta">
<DTAInput>
<Server>
<Name>MyServerName</Name>
<Database>
<Name>MyDatabaseName</Name>
</Database>
</Server>
<Workload>
<File>MyWorkloadScript.sql</File>
</Workload>
<TuningOptions>
<TestServer>MyTestServerName</TestServer>
<FeatureSet>IDX</FeatureSet>
<Partitioning>NONE</Partitioning>
<KeepExisting>NONE</KeepExisting>
</TuningOptions>
</DTAInput>
</DTAXML>