INF: SQL Server 7.0에서 느리게 실행되는 쿼리 문제 해결 방법

기술 자료 번역 기술 자료 번역
기술 자료: 243589 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR243589
모두 확대 | 모두 축소

이 페이지에서

요약

본 문서는 Microsoft SQL Server를 사용할 때 응용 프로그램에서 특정 쿼리 또는 쿼리 그룹의 실행 속도가 느려지는 문제를 다룹니다. 성능 문제를 해결하고 있지만 특정 쿼리 또는 쿼리의 작은 그룹이 기대보다 느리게 수행되는 문제의 원인을 알지 못한다면 계속 진행하기 전에 Microsoft 기술 자료에 있는 다음 문서를 참고하십시오.

이 문서의 나머지 부분은 이 문제의 범위를 좁히기 위해 위의 문서를 사용했으며 이 문서에 자세히 설명된 특정 카운터, 이벤트 및 데이터 열(Column)을 갖는 SQL Server Profiler(프로필러) 추적(Trace)을 캡처했다는 것을 전제하고 있습니다.

추가 정보

데이터베이스 쿼리 튜닝은 다양한 측면에서의 노력이 필요할 수 있습니다. 다음 섹션은 쿼리 성능을 조사할 때 확인해야 할 공통 항목을 논의합니다.

관련 인덱스가 있는지 확인

쿼리가 느리게 실행될 때 수행할 수 있는 가장 간단한 검사 중 하나가 인덱스를 분석하는 것입니다. 하나의 쿼리를 조사할 때는 Query Analyzer(쿼리 분석기)에 있는 Perform Index Analysis 항목을 사용할 수 있고 Profiler(프로필러) 추적(Trace)에 큰 작업 부하가 있을 때는 Index Tuning Wizard를 사용할 수 있습니다. 두 가지 방법 모두 쿼리에 어떤 인덱스가 유용할지를 정하기 위해 SQL Server 쿼리 최적화 프로그램(Optimizer)을 사용합니다. 이것은 데이터베이스에 관련 인덱스가 있는지 알아볼 수 있는 가장 효과적인 방법입니다.

Index Tuning Wizard를 사용하는 방법에 대한 내용은 SQL Server 7.0 온라인 설명서에 있는 "Index Tuning Wizard" 항목을 참고하십시오.

이전 버전 SQL Server에서 응용 프로그램을 업그레이드했다면 최적화 프로그램(Optimizer) 및 저장 엔진이 변경되었기 때문에 SQL Server 7.0에서 다른 인덱스를 사용하는 것이 더 효과적일 수 있습니다. Index Tuning Wizard는 인덱스 전략을 변경하는 것이 성능을 향상시킬지 파악하도록 도와줄 것입니다.

모든 쿼리, 테이블 및 조인 힌트 제거

힌트는 쿼리 최적화를 무시하고 쿼리 최적화 프로그램(Optimizer)이 가장 빠른 실행 계획(Plan)을 선택하지 못하도록 할 수 있습니다. 최적화 프로그램(Optimizer)의 변경으로 인해 SQL Server의 이전 버전에서는 성능을 향상시켰던 힌트가 SQL Server 7.0에서는 아무런 효과가 없거나 실제로 성능에 방해가 될 수 있습니다. 또한 다음과 같은 이유로 조인 힌트는 성능을 저하시킬 수 있습니다.
  • 조인 힌트는 임의(Ad-hoc) 쿼리가 자동으로 매개 변수를 결정하는 것과 쿼리 계획(Plan)이 캐싱되는 것을 방해합니다.
  • 조인 힌트를 사용한다는 것은 조인이 힌트를 명백하게 사용하지 않을 때도 쿼리에 있는 모든 테이블에 조인 순서를 지정한다는 것을 의미합니다.
분석하는 쿼리에 이런 힌트가 있다면 이 힌트를 제거하고 성능을 다시 평가하십시오.

실행 계획(Plan) 검사

관련 인덱스가 있다는 것과 효율적인 계획(Plan)을 만드는 최적화 프로그램(Optimizer)을 제한하는 힌트가 없다는 것을 확인한 후에는 쿼리 실행 계획(Plan)을 검사하십시오. 쿼리의 실행 계획(Plan)을 볼 수 있는 방법은 여러 가지가 있습니다.
  • SQL Server Profiler(프로필러)
    SQL Server Profiler(프로필러)에서 MISC:Execution Plan 이벤트를 캡처했다면 이 이벤트는 특정 시스템 프로세스 ID(SPID)에 대한 쿼리의 StmtCompleted 이벤트 직전에 발생합니다.
  • Query Analyzer(쿼리 분석기): 그래픽 실행 계획(Showplan)
    쿼리 창에서 쿼리를 선택하고 Query 메뉴를 누르고 Display Estimated Execution Plan을 누릅니다.

    참고: 저장 프로시저(Stored Procedure) 또는 일괄 처리가 임시 테이블을 만들고 참조한다면 SET STATISTICS PROFILE ON 문을 사용하거나 실행 계획(Plan)을 표시하기 전에 분명히 임시 테이블을 만들어야 합니다.
  • SHOWPLAN_ALL 및 SHOWPLAN_TEXT 평가된 실행 계획(Plan)의 텍스트 버전을 받기 위해 SET SHOWPLAN_ALL 및 SET SHOWPLAN_TEXT 항목을 사용할 수 있습니다. 자세한 내용은 SQL Server 온라인 설명서에서 "SET SHOWPLAN_ALL (T-SQL)" 및 "SET SHOWPLAN_TEXT (T-SQL)" 항목을 참고하십시오.

    참고: 저장 프로시저(Stored Procedure) 또는 일괄 처리가 임시 테이블을 만들고 참조한다면 SET STATISTICS PROFILE ON 문을 사용하거나 실행 계획(Plan)을 표시하기 전에 분명히 임시 테이블을 만들어야 합니다.
  • 통계 프로필
    평가된 실행 계획(Plan)을 표시할 때 그래픽으로 하든 실행 계획(Showplan)으로 하든 실제로 쿼리는 실행되지 않습니다. 따라서 일괄 처리 및 저장 프로시저(Stored Procedure)에 임시 테이블을 만들었다면 임시 테이블이 없기 때문에 평가된 실행 계획(Plan)을 표시할 수 없습니다. 통계 프로필(Statistics Profile)은 쿼리를 먼저 실행하고 그 다음 실제 실행 계획(Plan)을 표시합니다. 자세한 내용은 SQL Server 7.0 온라인 설명서에 있는 "SET STATISTICS PROFILE (T-SQL)" 항목을 참고하십시오. Query Analyzer(쿼리 분석기)에서 실행하면 결과 창에 있는 Execution Plan 탭에 그래픽 형식으로 표시됩니다.

실행 계획(Showplan) 출력 검사

실행 계획(Showplan) 출력은 특정 쿼리를 위해 SQL Server가 사용하는 실행 계획(Plan)에 대한 풍부한 정보를 제공합니다. 정보 및 이벤트에 대한 자세한 내용은 SQL Server 7.0 온라인 설명서의 "Optimizing Database Performance" 장에서 자세히 논의됩니다. 다음은 최상의 계획(Plan)이 사용되고 있는지 검사할 수 있는 실행 계획(Plan)의 기본적인 사항입니다.
  • 관련 인덱스 사용
    실행 계획(Showplan) 출력은 쿼리에 포함된 각 테이블 및 이 쿼리에서 데이터를 얻는데 사용된 액세스 경로를 표시합니다. 그래픽 실행 계획(Showplan)에서 테이블 위에 마우스 포인터를 가리키면 포함된 각 테이블의 세부 사항을 볼 수 있습니다. 인덱스를 사용하고 있다면 "Index Seek"가 나타나고 인덱스를 사용하지 않는다면 힙(Heap)을 위한 "Table Scan" 또는 클러스터된 인덱스를 위한 "Clustered Index Scan"이 나타납니다. "Clustered Index Scan"은 테이블이 클러스터된 인덱스를 통해 스캔되고 있다는 것을 나타내며 클러스터된 인덱스로 개별 행에 직접 액세스한다는 것은 아닙니다.

    유용한 인덱스가 있지만 쿼리를 위해 사용되지 않는다는 것을 알았다면 인덱스 힌트로 인덱스를 지정할 수 있습니다. 인덱스 힌트에 대한 자세한 내용은 SQL Server 7.0 온라인 설명서에 있는 "FROM (T-SQL)" 항목을 참고하십시오.
  • 관련된 조인 순서
    실행 계획(Showplan) 출력은 쿼리에 포함된 테이블이 어떤 순서로 조인되는지 표시합니다. 중첩 루프 조인(Nested Loop Join)에서 상단에 열거된 테이블은 외부 테이블이며 두 개의 테이블 중 더 작은 것이어야 합니다. 해시 조인에서 상단에 있는 테이블은 Build Input이 되며 두 개의 테이블 중 더 작은 것이어야 합니다. 하지만 최적화 프로그램(Optimizer)이 잘못된 결정을 했다는 것이 밝혀지면 쿼리 프로세서가 런타임에 Build Input 및 Probe Input을 거꾸로 실행할 수 있기 때문에 이 순서는 중요하지 않습니다. 실행 계획(Showplan) 출력에서 예상되는 행의 수를 검사하여 더 적은 행을 반환하는 테이블을 찾을 수 있습니다.

    대체 조인 순서에서 유용한 쿼리를 찾았다면 조인 힌트로 조인 순서를 지정할 수 있습니다. 조인 힌트에 대한 자세한 내용은 SQL Server 7.0 온라인 설명서에 있는 "FROM (T-SQL)" 항목을 참고하십시오.

    참고: 큰 쿼리에서 조인 힌트를 사용하면 FORCEPLAN이 설정된 것처럼 쿼리에 있는 다른 테이블에 대한 조인 순서를 지정할 수 있습니다.
  • 관련된 조인 유형
    SQL Server는 중첩 루프 조인(Nested Loop Join), 해시 조인 및 병합(Merge) 조인을 사용합니다. 수행이 느린 쿼리가 어떤 조인 기술을 사용하고 있다면 다른 조인 유형을 지정할 수 있습니다. 예를 들어, 어떤 쿼리가 해시 조인을 사용하고 있다면 루프 조인 힌트를 사용하여 중첩 루프 조인(Nested Loop Join)을 지정할 수 있습니다. 조인 힌트에 대한 자세한 내용은 SQL Server 7.0 온라인 설명서에 있는 "FROM (T-SQL)" 항목을 참고하십시오.

    참고: 큰 쿼리에서 조인 힌트를 사용하면 FORCEPLAN이 설정된 것처럼 쿼리에 있는 다른 테이블의 조인 유형을 지정할 수 있습니다.
  • 병렬(Parallel) 실행
    다중 프로세서 컴퓨터를 사용할 경우 병렬 계획(Plan)이 사용되고 있는지도 조사할 수 있습니다. 병렬 처리가 사용된다면 PARALLELISM(Gather Streams) 이벤트가 나타납니다. 특정 쿼리가 병렬 계획(Plan)을 사용하는데 느리다면 OPTION(MAXDOP 1) 참고를 사용하여 병렬이 아닌 계획(Plan)을 지정할 수 있습니다. 자세한 내용은 SQL Server 7.0 온라인 설명서에 있는 "SELECT (T-SQL)" 항목을 참고하십시오.
주의: 쿼리 최적화 프로그램(Optimizer)은 일반적으로 쿼리를 위한 최상의 실행 계획(Plan)을 선택하기 때문에 조인 힌트, 쿼리 힌트 및 테이블 힌트는 숙련된 데이터베이스 관리자가 최종적으로 다시 정렬할 때만 사용하는 것이 바람직합니다.

참조

SQL Server 7.0 온라인 설명서에 있는 다음 항목은 쿼리 최적화에 대한 정보를 제공합니다.
  • "Optimizing Application Performance Using Efficient Data Retrieval"
  • "Query Tuning"
  • "Query Tuning Recommendations"
  • "Transact-SQL Tips"
SQL Server 7.0에서 쿼리 성능 문제에 관한 자세한 내용은 http://support.microsoft.com/support/tshoot/tshooterlist.asp?TPR=sql 에 있는 SQL Server 7.0 쿼리 성능 문제 해결사를 참고하십시오.

속성

기술 자료: 243589 - 마지막 검토: 2011년 5월 12일 목요일 - 수정: 2.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
키워드:?
kbsqlmanagementtools ssrvadmin KB243589

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com