SQL 추적 최적화Optimize SQL Trace

SQL 추적을 실행하면 데이터 수집을 위해 시스템 리소스가 사용되기 때문에 성능 비용이 발생하지만 여러 가지 방법으로 이 비용을 최소화할 수 있습니다.Although running SQL Trace incurs a performance cost because it uses system resources to gather data, you can do many things to minimize it. 추적으로 인한 성능 비용을 최적화하려면 다음을 시도하십시오.To minimize the performance cost incurred by a trace, try the following:

  • 명령 프롬프트를 사용하여 추적을 실행해 봅니다.Consider using the command prompt to run traces. 그래픽 사용자 인터페이스를 사용하면 성능이 저하됩니다.Using a graphical user interface hinders performance. 자세한 내용은 sp_trace_create(Transact-SQL)를 참조하세요.For more information, see sp_trace_create (Transact-SQL).

  • 자주 발생하는 이벤트를 포함하지 않습니다.Avoid including events that occur frequently. 가능하면 특정 이벤트 클래스와 필터를 사용하여 추적 범위를 좁힙니다.If possible, narrow your trace by means of specific event classes and filters. 수집하는 추적 이벤트가 적을수록 추적 지원에 필요한 시스템 리소스가 줄어듭니다.If fewer trace events are gathered, fewer system resources are required to support tracing.

  • 추적에 포커스를 맞추어 관련 데이터를 제공하는 이벤트만 수집합니다.Focus the trace to collect only events that provide relevant data. 예를 들어 추적에서 교착 상태를 식별하려면 Lock:Deadlock 이벤트 클래스를 포함하고 Lock:Acquired 이벤트 클래스는 제외합니다.For example, if your trace is to identify deadlocks, include the Lock:Deadlock event class, but not the Lock:Acquired event class. 두 이벤트 클래스를 모두 포함하면 추적이 획득한 잠금에 모두 응답해야 하므로 실행 비용은 두 배가 됩니다.If you include both event classes, the trace has to respond to every lock that is acquired, and your execution cost is doubled.

  • 중복 데이터를 수집하지 않습니다.Avoid collecting duplicate data. 예를 들어 SQL:BatchStartedSQL:BatchCompleted를 수집할 경우 SQL:BatchStarted 이벤트 클래스의 텍스트 데이터만 수집하여 결과 집합 크기를 최소화할 수 있습니다.For example, if you collect SQL:BatchStarted and the SQL:BatchCompleted, you can minimize the size of the results set by collecting text data for the SQL:BatchStarted event class only.

  • 추적 정의에 필터를 사용합니다.Use filters in the trace definition. 예를 들어 특정 사용자가 임시 쿼리를 수행하는 동안 성능이 느려지면 LoginName에 필터를 만듭니다.For example, if you know that a certain user is reporting slow performance during ad hoc queries, create a filter on LoginName. 필터를 설정하여 LoginName 이 해당 사용자 이름과 일치하는 이벤트만 포함합니다.Set the filter to include only events where the LoginName matches that user name.

    성능에 크게 영향을 미치는 이벤트를 추적해야 할 경우 다음 방법 중 하나를 사용하여 서버에 대한 성능 영향을 제한하십시오.If you need to run a trace for events that create a significant impact on performance, consider limiting the performance impact on the server by using one of the following methods:

  • 단기간에 추적을 실행합니다.Run traces for shorter periods of time. 중지 시간을 설정하여 추적이 실행되는 시간을 제어할 수 있습니다.You can control the length of time that a trace runs by enabling a stop time. 이벤트 클래스를 제한하거나 이벤트를 필터링할 수 없을 때 특히 유용합니다.This is especially important if you cannot limit the event classes or filter an event. 중지 시간을 설정하면 성능 저하를 멈출 수 있습니다.Enabling a stop time ensures that the performance incurred does not last indefinitely.

  • 추적 결과의 크기를 제한합니다.Limit the size of the trace results. 추적 결과의 크기를 최대 파일 크기로 제한할 수 있습니다.You can limit the size of the trace results to a maximum file size. 이렇게 하면 파일 크기 제한에 도달했을 때 성능 비용이 중지됩니다(파일 롤오버를 사용하지 않는 경우).This strategy ensures that the performance cost stops when the file-size limit is reached (if file rollover is not enabled).

  • 반환되는 이벤트의 수를 제한합니다.Limit the number of events returned. SQL Server 프로파일러SQL Server Profiler 를 사용하면 추적을 테이블에 저장하고 최대 행 개수를 설정하여 반환되는 이벤트의 수를 제한할 수 있습니다.With SQL Server 프로파일러SQL Server Profiler you can limit the number of events returned by saving the trace to a table and setting the maximum number of rows. 최대 행 개수에 도달한 후에도 추적 결과가 SQL Server 프로파일러SQL Server Profiler 화면에 반환되지만 테이블에 결과를 기록하는 데 필요한 비용이 없어집니다.Trace results are still returned to the SQL Server 프로파일러SQL Server Profiler screen after the maximum number of rows has been reached, but the cost of recording the results to a table is eliminated.

참고 항목See Also

추적 필터링Filter a Trace