데이터베이스 엔진 튜닝 관리자와 인덱스 튜닝 마법사의 차이점

데이터베이스 엔진 튜닝 관리자는 SQL Server의 새 데이터베이스 기능을 처리한다는 점 이외에도 Microsoft SQL Server 2000 인덱스 튜닝 마법사와 작동 방식 면에서 다릅니다. 두 도구는 모두 GUI(그래픽 사용자 인터페이스)와 명령 프롬프트 인터페이스를 제공하지만 인덱스 튜닝 마법사에 익숙한 사용자는 다음 변경 내용을 살펴 보십시오.

데이터베이스 엔진 튜닝 관리자의 새 기능에 대한 전체 목록은 데이터베이스 엔진 튜닝 관리자 기능을 참조하십시오.

데이터베이스 튜닝 시 필요한 권한

SQL Server 2000에서는 sysadmin 고정 서버 역할의 멤버만 인덱스 튜닝 마법사를 사용하여 데이터베이스를 튜닝할 수 있었습니다. SQL Server에서 sysadmin 역할의 멤버는 계속 데이터베이스 엔진 튜닝 관리자를 사용하여 데이터베이스를 튜닝할 수 있지만 이제 db_owner 고정 데이터베이스 역할의 멤버인 사용자도 자신이 소유한 데이터베이스를 튜닝할 수 있습니다.

[!참고]

처음 사용할 때 데이터베이스 엔진 튜닝 관리자는 응용 프로그램을 초기화할 수 있는 시스템 관리자 권한이 있는 사용자가 시작해야 합니다. 초기화 후에는 sysadmin 고정 서버 역할의 멤버와 db_owner 고정 데이터베이스 역할의 멤버가 데이터베이스 엔진 튜닝 관리자를 사용하여 데이터베이스를 튜닝할 수 있습니다. 그러나 db_owner 역할 멤버는 자신이 소유한 데이터베이스만 튜닝할 수 있다는 것에 주의해야 합니다. 자세한 내용은 데이터베이스 엔진 튜닝 관리자 초기화를 참조하십시오.

작업 컨텍스트

인덱스 튜닝 마법사는 각 문이 원래 데이터베이스의 컨텍스트에서 실행되었는지 여부에 관계없이 튜닝하려고 선택한 데이터베이스를 사용하여 작업의 해당 문을 평가했습니다. 인덱스 튜닝 마법사는 튜닝 세션 동안 데이터베이스를 하나만 튜닝할 수 있습니다. 데이터베이스 엔진 튜닝 관리자는 하나의 튜닝 세션 동안에 여러 데이터베이스를 튜닝할 수 있습니다. 데이터베이스 엔진 튜닝 관리자는 스크립트의 정보를 사용하여 문이 실행되는 데이터베이스를 확인하고 해당 데이터베이스에 대해 문을 평가합니다. 튜닝하려고 선택한 데이터베이스는 문이 평가되는 방법에 영향을 주지 않습니다.

예를 들면 다음과 같습니다.

  • AdventureWorks2008R2 데이터베이스에는 FirstName 및 LastName 열이 있는 Person.Person 테이블이 있습니다.

  • TuneQuery.sql 작업에는 다음 쿼리가 포함되어 있습니다.

    SELECT FirstName, LastName
    FROM Person.Person
    WHERE LastName = 'Abercrombie';
    GO
    
  • User1은 기본적으로 MyDB 데이터베이스에 연결됩니다.

SQL Server 2000에서 User1은 명령줄에서 다음을 실행했거나 인덱스 튜닝 마법사 GUI를 사용하여 비슷한 단계를 수행했습니다.

Itwiz -D AdventureWorks2008R2 -I TuneQuery.sql –o rec.sql –U <username> –P <password>

명령줄에 지정되었기 때문에(-D AventureWorks2008R2) AdventureWorks2008R2 데이터베이스에 대해 TuneQuery.sql의 각 문이 구문 분석되므로 이 방법은 제대로 작동했습니다. TuneQuery.sql이 AdventureWorks2008R2 데이터베이스에서 유효했으며 튜닝은 아무 문제없이 진행되었습니다.

데이터베이스 엔진 튜닝 관리자를 사용할 경우 명령줄 구문은 다음과 같습니다.

dta -s Session1 –D AdventureWorks2008R2 –if TuneQuery.sql –of rec.sql –U username –P password

User1이 기본적으로 MyDB 데이터베이스에 연결되므로 시스템은 데이터베이스 컨텍스트를 MyDB로 설정합니다. 그런 다음 Transact-SQL 문이 AdventureWorks2008R2가 아니라 MyDB 데이터베이스에 대해 구문 분석됩니다. 이 문은 MyDB에서 유효하지 않으므로 무시됩니다.

그렇다면 이러한 동작이 발생한 이유는 무엇입니까? User1이 대상 데이터베이스를 지정하지 않고 sqlcmd 또는 SQL Server Management Studio를 사용하여 TuneQuery.sql을 실행하면 TuneQuery.sql이 MyDB에 대해 실행되지만 실패합니다. 데이터베이스 엔진 튜닝 관리자는 이와 동일한 동작을 모방합니다.

그렇다면 무엇을 해야 합니까? 다음과 같이 USE <database> 문을 TuneQuery.sql 스크립트에 추가하십시오.

USE AdventureWorks2008R2;
GO
SELECT FirstName, LastName
FROM Person.Person
WHERE LastName = 'Abercrombie';
GO

데이터베이스 엔진 튜닝 관리자는 먼저 USE AdventureWorks2008R2 문을 확인하고 해당 정보를 사용하여 현재 데이터베이스를 AdventureWorks2008R2가 되도록 설정합니다. 그런 다음 SELECT FirstName, LastName FROM Person.Person WHERE LastName = 'Abercrombie' 문을 확인하고 AdventureWorks2008R2에 대해 문을 구문 분석하는 데 이는 현재 데이터베이스 컨텍스트가 AdventureWorks2008R2이기 때문입니다. 이렇게 하면 데이터베이스 엔진 튜닝 관리자는 데이터베이스를 성공적으로 튜닝할 수 있습니다. sqlcmd 또는 SQL Server Management Studio를 사용하여 위 스크립트를 실행할 경우 문이 AdventureWorks2008R2에 대해 실행됩니다. 이는 첫 번째 USE <database> 문이 데이터베이스 컨텍스트를 MyDB에서 AdventureWorks2008R2로 변경하기 때문입니다.

USE <database> 문을 사용하여 문을 실행하려는 데이터베이스를 지정할 수 있습니다. 일반적으로 각 문에서 정규화된 테이블 이름을 사용할 경우에는 이 작업이 필요하지 않습니다.

데이터베이스 엔진 튜닝 관리자는 실행 환경 모방을 위해 각 문이 실행되는 해당 데이터베이스를 찾으려 하기 때문에 여러 다른 유형의 입력이 데이터베이스 엔진 튜닝 관리자에서 처리되는 방법을 이해하려면 다음 정보가 중요합니다.

SQL 파일/인라인 작업

이전 섹션에서 언급한 것처럼 데이터베이스 엔진 튜닝 관리자는 Transact-SQL 쿼리 앞에 오는 USE <database> 문을 사용하여 쿼리를 실행해야 하는 데이터베이스를 식별합니다. 데이터베이스 엔진 튜닝 관리자는 Transact-SQL 스크립트 파일의 첫 번째 문에서 시작하는 입력을 확인합니다. 현재 데이터베이스가 기본 데이터베이스라는 가정 하에 시작됩니다. USE <database> 문이 존재하면 문이 구문 분석되는 현재 데이터베이스 컨텍스트가 변경됩니다.

추적 파일 및 추적 테이블

데이터베이스 엔진 튜닝 관리자는 추적 파일을 사용할 때 SQL Server 프로파일러의 재생을 모방합니다. 추적 파일의 다음 정보가 나열된 순서대로 사용됩니다.

  • 추적 파일에 DatabaseName 열이 채워진 이벤트가 있을 경우 데이터베이스 엔진 튜닝 관리자는 이 열을 사용하여 해당 이벤트가 실행된 데이터베이스를 찾습니다.

  • 추적 파일에 DatabaseID 열이 채워져 있을 경우 데이터베이스 엔진 튜닝 관리자는 이 열을 사용하여 해당 이벤트가 실행된 데이터베이스를 찾습니다. 데이터베이스 엔진 튜닝 관리자는 시스템 카탈로그를 쿼리하여 DatabaseID에 해당하는 데이터베이스 이름을 찾습니다.

[!참고]

추적이 수집된 후에 데이터베이스가 분리, 연결, 삭제 또는 작성된 경우 DatabaseIDDatabaseName 매핑은 추적 파일이 작성되었을 때와 다를 수 있습니다. 데이터베이스 엔진 튜닝 관리자는 이 정보를 확인할 수 없습니다. 이러한 경우에는 추적에서 DatabaseID를 완전히 제거하여 데이터베이스 엔진 튜닝 관리자가 잘못된 데이터베이스를 튜닝하지 않게 해야 합니다.

  • DatabaseNameDatabaseID가 추적에서 열로 존재하지 않을 경우 데이터베이스 엔진 튜닝 관리자는 추적 파일의 각 SPID 열에 대한 Transact-SQL 스크립트를 사용할 때와 같이 각 문에 사용할 데이터베이스를 결정합니다. SPID 열이 없을 경우 Transact-SQL 스크립트 파일의 경우와 완전히 동일한 방식으로 결정이 이루어집니다.

또한 데이터베이스 엔진 튜닝 관리자는 각 문을 구문 분석하는 동안 SQL Server 프로파일러 재생에서와 같이 로그인 정보를 사용합니다. 서버의 기본 데이터베이스는 추적 파일에 나타나는 LoginName 열 값에 따라 변경될 수 있습니다.

[!참고]

추적에 존재하는 로그인이 더 이상 시스템에 표시되지 않을 경우 데이터베이스 엔진 튜닝 관리자는 해당 로그인을 무시하며 현재 튜닝 프로세스를 수행하고 있는 로그인을 기본적으로 사용합니다. 이러한 경우에는 데이터베이스 엔진 튜닝 관리자 튜닝 로그에 메시지가 기록됩니다.

튜닝 시간 제한

데이터베이스 엔진 튜닝 관리자를 사용하여 튜닝 시간을 지정하거나 튜닝 시간을 무제한으로 지정할 수 있습니다. 인덱스 튜닝 마법사에서는 이 기능을 사용할 수 없었습니다. 자세한 내용은 튜닝 지속 시간 및 이벤트 제한을 참조하십시오.