CPU 주파수를 변경 하는 유틸리티 또는 기술을 사용 하면 SQL Server 타이밍 값이 잘못 될 수 있음

요약

Microsoft SQL Server 2005는 고해상도 CPU 카운터를 사용 하 여 microsecond 타이밍 기능을 제공 합니다. Microsecond는 초의 1 millionth (또는 밀리초의 1/1000)입니다. 그러나 CPU 주파수를 변경 하는 기술을 사용 하는 경우 SQL Server 타이밍 값이 올바르지 않을 수 있습니다. 예를 들어 다음 기술 중 하나를 사용 하는 경우이 문제가 발생할 수 있습니다.

  • CPU 스테핑

  • AMD Cool'n'Quiet 기술

  • 다양 한 전원 구성표

이 문서에는이 문제를 해결 하는 데 도움이 되는 방법 및 추가 정보가 포함 되어 있습니다.

증상

통계 시간 설정 문을 사용 하 여 서버 실행, 구문 분석 및 컴파일 시간을 표시 하는 경우 잘못 된 값을 얻을 수 있습니다. 예를 들어 SQL Server 실행 시간에 대 한 경과 시간이 CPU 시간 보다 훨씬 더 많은 경우를 볼 수 있습니다. 이 문제는 성능 조정의 정확성에 영향을 줄 수 있습니다. 이 문제는 서버의 "요약" 섹션에 나열 된 기술 중 하나를 사용 하는 경우 발생 합니다.

원인

이러한 기술을 사용할 때 CPU 주파수가 변경 되었기 때문에이 문제가 발생 합니다. SQL Server 2005는 고해상도 CPU 카운터를 사용 하 여 microsecond 타이밍 기능을 제공 합니다. CPU 주파수가 에너지를 절약 하 고 열 출력을 감소 하도록 변경 되 면 계산 된 기간이 올바르지 않을 수 있습니다.

해결 방법

서비스 팩 정보

이 문제를 해결 하려면 SQL Server 2005의 최신 서비스 팩을 구하십시오. 자세한 내용은 다음 문서 번호를 클릭 하 여 Microsoft 기술 자료 문서를 참조 하세요.

913089 SQL Server 2005용 최신 서비스 팩을 구하는 방법참고 SQL Server 2005 서비스 팩 3 이후 서비스 팩에는 프로세서 타임 스탬프가 사용 되지 않습니다. 이러한 버전의 SQL Server 2005는 최대 정밀도가 1 밀리초 인 보다 안정적인 타이머를 사용 합니다.

상태

이 문제는 SQL Server 2005 서비스 팩 3에서 처음 수정 되었습니다.

해결 방법

SQL Server 2005에서는 정확한 성능 조정을 수행 하기 위해 알려진 안정적인 데이터 요소가 필요 합니다. 컴퓨터에서 동적 CPU 주파수 조정을 사용 하는 경우 Cpu가 안정 된 주파수를 유지 하도록 사용 하지 않도록 설정 하 여 SQL Server 성능을 모니터링 하 고 조정 하기 시작 합니다. 이렇게 하려면 다음 방법을 사용하세요.

Cpu가 최대 빈도로 유지 되도록 컴퓨터의 전원 구성표를 구성 합니다.

이렇게 하려면 다음 단계를 수행하세요.

  1. 시작, 실행을 차례로 클릭 하 고 Powercfg를 입력 한 다음 확인을 클릭 합니다.

  2. Power Options 속성 대화 상자의 전원 구성표 목록에서 Always On (켜기 On On )을 클릭 합니다.

  3. 확인을 클릭합니다.

드리프트가 발생할 수 있습니다. 드리프트는 CPU 주파수 값 간의 차이를 말합니다. 자세한 내용은 "드리프트" 섹션을 참조 하세요. 이 경우에는 전원 구성표를 변경한 후 모든 Cpu의 주파수를 다시 동기화 하려면 Microsoft Windows를 다시 시작 해야 합니다. 컴퓨터를 다시 시작할 수 없으면 SQL server 프로세서 선호도를 사용 하 여 SQL Server 작업자 스레드가 Cpu 간에 이동 하지 않도록 합니다. 이렇게 하면 CPU 주파수 값 간의 차이가 발생 해도 컴퓨터를 다시 시작할 필요가 없습니다. 서버의 모든 Cpu에 대해 SQL Server 프로세서 선호도를 사용 하도록 설정 하려면 서버에 있는 논리 프로세서 수에 따라 다른 마스크를 사용 해야 합니다. 다음 표에는 예제 시나리오가 나와 있습니다.

CPU 번호

프로세서 선호도를 사용 하는 문

02 Cpu

exec sp_configure ' affinity mask ', 0x00000003GOreconfigureGO

04 Cpu

exec sp_configure ' affinity mask ', 0x0000000FGOreconfigureGO

08 개의 Cpu

exec sp_configure ' affinity mask ', 0x000000FFGOreconfigureGO

16 개 Cpu

exec sp_configure ' affinity mask ', 0x0000FFFFGOreconfigureGO

32 Cpu

exec sp_configure ' affinity mask ', 0xFFFFFFFFGOreconfigureGO

참고 BIOS 수준에서 CPU 주파수 변형 기능을 사용 하지 않도록 설정 하는 것이 부족할 수 있습니다. 다양 한 타사 유틸리티가 CPU 주파수를 변경할 수 있습니다. 일부 구현은 Cpu가 최대 전원 구성표 설정에 있는 경우에도 주파수 조정을 가능 하 게 합니다. 이 경우에는 SQL Server 2005에서 성능 조정을 수행할 때 타사 유틸리티를 사용 하지 않도록 설정 해야 합니다.

타사 유틸리티 및 드라이버를 사용 하 여 CPU 주파수 및 CPU 클록 카운터 동기화

드문 경우 지만 시스템에서 CPU 주파수 문제를 해결 하기 위해 제조업체에서 업데이트 해야 하는 경우가 있을 수 있습니다. 시스템에 문제가 있을 수 있다고 의심 되는 경우 시스템에서 최신 BIOS, 마이크로코드, 펌웨어 업데이트를 확인 하는 것이 좋습니다.

추가 정보

Microsoft SQL Server 2000 및 이전 버전의 SQL Server는 Windows 타이밍 메커니즘을 사용 합니다. 타이밍 메커니즘은 밀리초 정밀도 값을 사용 합니다. 일반적으로이 정밀도는 10 ~ 15 밀리초입니다. 그러나 정밀도는 55 밀리초 정도로 커질 수 있습니다. SQL Server 쿼리는 1 자리 밀리초 또는 microsecond 시간 범위 내에서 자주 완료 됩니다. 이 정밀도에는 고해상도 타이머가 필요 합니다. 따라서 이러한 버전의 SQL Server는 일부 쿼리의 기간을 0 밀리초로 보고 합니다. 따라서 이전 버전의 SQL Server에서 성능을 모니터링 하 고 SQL Server 성능을 조정 하기가 어렵습니다. SQL Server 2005는 microsecond 타이밍 기능을 제공 하기 위해 고해상도 CPU 카운터를 사용 하 여 정확성을 향상 시킵니다. "요약" 섹션에 나와 있는 기술을 사용 하면 보고 된 타이밍 값이 올바르지 않을 수 있습니다. 이 문제는 다음과 같은 개체 및 기능에 영향을 줄 수 있습니다.

  • 추적 이벤트:

    • 주의 이벤트

    • 저장 프로시저 노드의 이벤트

    • TSQL 노드의 이벤트

    • Objects 노드의 이벤트

    • 트랜잭션 노드의 이벤트

  • 동적 관리 보기:

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_sessions

    • sys.dm_io_pending_io_requests

    • sys.dm_os_ring_buffers

    • sys.dm_os_sys_info

    • sys.dm_io_virtual_file_stats

    • sys.dm_os_wait_stats

  • 통계 시간 설정 문

  • Sysprocesses 시스템 테이블

Sql Server 2005 서비스 팩 2 (SP2)를 설치한 후 sql server가 Cpu 간에 높은 해상도의 타이머가 동기화 되지 않은 것을 감지 하면 오류 로그에 오류 메시지가 기록 됩니다. 오류 메시지는 성능 시간이 정확 하지 않을 수 있고 사용자가 성능 데이터를 주의 해 서 사용 해야 함을 나타냅니다. 오류 메시지의 텍스트는 다음 오류 메시지 중 하 나와 유사 합니다.

오류 메시지 1

스케줄러 id 2에 있는 CPU의 타임 스탬프 카운터가 다른 Cpu와 동기화 되지 않습니다.

오류 메시지 2

CPU 타임 스탬프 주파수가 밀리초 당 191469에서 1794177 틱으로 변경 되었습니다. 새 빈도가 사용 됩니다.

SQL Server는 RDTSC (실시간 스탬프 카운터) 명령을 사용 하 여 64 비트 CPU 틱 수를 가져옵니다. 이 값을 CPU 빈도로 분할 하 여 값을 밀리초 값으로 변환할 수 있습니다. 타이밍 변형은 CPU 빈도가 변경 되거나 드리프트 될 때 발생할 수 있습니다.

CPU 스테핑

CPU 스테핑는 CPU 주파수의 의도적인 변경으로 정의 됩니다. 이제 CPU 스테핑을 인텔 스피드 스텝 기술 또는 AMD PowerNow 라고도 할 수 있습니다! 기술을. CPU 스테핑 발생 시 CPU 속도는 50 MHz로 증가 하거나 감소 하 여 에너지를 절약 하 고 열 출력물을 줄일 수 있습니다. 동일한 NUMA (non-uniform memory access) 노드 내에 있는 Cpu는 개별적으로 빈도를 조정 하지 않습니다. 다음 표에서는 CPU 스테핑 변경으로 인해 타이밍 계산에 영향을 주는 방법을 보여 줍니다.

함수

RDTSC 틱

틱/밀리초 (주파수)

벽 클록 시간

일괄 처리 시작

1

200

0

빈도 스텝

200

100

1ms

일괄 처리 종료

500

3ms

합계가

500

4ms

SQL Server는 start 및 end RDTSC 틱 모두에서 RDTSC 틱을 캡처합니다. 그런 다음, SQL Server가 주파수 값으로 틱을 나눕니다. 이 예제에서는 주파수 값 200 또는 100을 사용할 때 다음과 같은 타이밍 계산이 수행 됩니다.

  • 주파수 200: 500/200 = 2.5 ms

  • 빈도 100: 500/100 = 5 밀리초

두 타이밍 계산은 모두 4 밀리초의 실제 벽 클록 시간과 일치 합니다. RPC: 완료 추적 이벤트에서이 계산을 사용 하는 경우 duration 및 종료 시간 데이터 열이 잘못 보고 됩니다. RPC: Completed 이벤트는 시작 벽 클록 시간과 CPU 틱 수를 캡처합니다. SQL Server 2005에서 Windows가 제공 하는 것 보다 더 높은 해상도의 타이밍을 얻으려면 SQL Server 추적의 기간 및 종료 시간 데이터 열이 경과 된 CPU 틱 수를 사용 하 여 계산 됩니다. 종료 시간 열은 시작 시간 열에 기간 열을 추가 하 여 계산 됩니다. 이 예제에서는 종료 시간 열이 시작 시간에 2.5 ms 또는 5 밀리초를 잘못 추가 하 여 계산 됩니다.

바람

드리프트는 CPU 클록 값의 차이입니다. Cpu가 여러 개 있는 시스템에서는 동일한 시점에 대해 서로 다른 CPU 클록 값을 생성할 수 있습니다. 일반적이 지는 않지만 시간에 따른 시계 연결이 Cpu에 발생할 수 있습니다. 다음 예제에서는 드리프트 변경 시 SQL Server 추적의 기간 데이터 열에 대 한 결과에 영향을 주는 방법을 보여 줍니다. 이 예제에서는 CPU 빈도가 밀리초 당 200 틱으로 지속적으로 유지 되는 것으로 가정 합니다. 다음 표에서는이 시나리오에서 발생 하는 이벤트를 보여 줍니다.

함수

Windows 예약 CPU

CPU 1 RDTSC

CPU 2 RDTSC

벽 클록 시간

일괄 처리 시작

1

100

1100

0

일괄 처리 종료

2

900

1900

4 밀리초

합계가

4 밀리초

SQL Server는 시작 점과 끝점 모두에서 RDTSC 틱을 캡처합니다. 그런 다음, SQL Server가 RDTSC 틱을 주파수 값으로 나눕니다. 이 예제에서는 Windows가 두 개의 다른 Cpu에서 SQL Server 작업자 스레드를 예약 했습니다. 일괄 처리를 서비스 하는 SQL Server 작업자 스레드가 첫 번째 CPU (CPU 1)에서 처음으로 실행 되었습니다. 그러나 일괄 실행이 특정 지점에서 중단 되었고, SQL Server가 일괄 처리를 보류 대기열로 보냈습니다. SQL Server가이 일괄 처리를 실행 가능 큐에 다시 서비스 하는 SQL Server 작업자 스레드를 보내면 Windows는 두 번째 CPU (CPU 2)에서 실행할 스레드를 발송 합니다. SQL Server 작업자 스레드가 CPU 2에서 실행을 완료 했습니다. CPU 드리프트 때문에 CPU 2에서 캡처한 종료 틱 값은 900 대신 1900입니다. SQL Server 프로세서 선호도를 사용 하는 경우이 동작을 방지할 수 있습니다. 이 예제에서 사용 되는 타이밍 계산은 다음과 같습니다.

  • 잘못 되 고 보고 된 값: (1900-100 = 1800)/200 = 9 ms

  • 올바른 값: (900-100 = 800)/200 = 4 ms

RPC: Completed 이벤트에 대 한 duration 열의 값은 4 밀리초 대신 9 밀리초로 보고 됩니다. 이 결과는 4 밀리초의 올바른 값 보다 두 배 이상입니다. 이전에 언급 한 성능 출력이 신뢰할 수 없음을 나타내기 위해 SQL Server 2005에 드리프트 warning 메시지가 추가 됩니다. 일부 발견 되지 않은 상황에서 SQL Server 2005 SP2는 다음에 대 한 경고 메시지를 보고할 수 있습니다.

  • 거짓 드리프트 경고 메시지

  • 뚜렷한 시스템 효과가 발생 하지 않으면 드리프트가 수십 밀리초가 될 수 있습니다.

성능 관련 출력을 평가할 때와 성능 관련 출력과 벽 클록 타이밍을 비교할 때 주의 해야 합니다. 다른 성능 문제에 대 한 징후가 없는 경우 일반적으로 드리프트 경고 메시지를 무시할 수 있습니다. 예를 들어 다음과 같은 경우 일반적으로 드리프트 경고 메시지를 무시할 수 있습니다.

  • 프로세스가 예상 대로 실행 되 고 있습니다.

  • SQL Server 쿼리가 이상한 durational 패턴으로 실행 되 고 있지 않습니다.

  • 다른 병목 상태에 대 한 징후가 표시 되지 않습니다.

그러나 드리프트 warning 메시지를 무시 하기 전에 제조업체에 문의 하 여 알려진 RDTSC 문제가 없는지 확인 하는 것이 좋습니다. 추적 플래그 8033 (– T8033)를 사용 하 여 SQL Server 2005의 원본 릴리스 버전과 SQL Server 2005 SP1의 보고 동작으로 돌아갈 수 있습니다. 최초 릴리스 버전의 SQL Server 2005 및 SQL Server 2005 SP1에서는 드리프트 경고 메시지가 보고 되지 않습니다. SQL Server 2005 또는 SQL Server 2005 SP1의 최초 릴리스 버전을 실행 하는 경우 일반적으로 메시지를 무시할 수 있습니다.

WAITFOR DELAY 문이 제대로 작동 하는 이유는 무엇 인가요? 주기적인 시스템 프로세스는 어떻게 되나요?

시간 초과 메커니즘은 고해상도 디자인의 영향을 받지 않습니다. SQL Server는 타이머 기반 활동에 고해상도 타이머를 사용 하지 않습니다. 일부 시간 제한 활동은 GetTickCount 함수를 사용 하는 감소 된 해상도 타이머를 기반으로 합니다. 이러한 시간 초과 활동에는 잠금 시간 초과, WAITFOR 지연 문, 교착 상태 감지 등이 포함 됩니다.

자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하세요.

938448 서버에서 듀얼 코어 AMD Opteron 프로세서 또는 다중 프로세서 AMD Opteron 프로세서를 사용 하는 경우 Windows Server 2003 기반 서버에서 타임 스탬프 카운터 드리프트가 발생할 수 있음

895980 Windows Server 2003 및 Windows XP에서 QueryPerformanceCounter 함수를 사용 하는 프로그램이 제대로 수행 되지 않을 수 있음이 문서에서 설명 하는 타사 제품은 Microsoft와 무관 한 회사에서 제조한 것입니다. Microsoft는 이러한 제품의 성능이 나 신뢰성에 대 한 명시적 또는 묵시적 보증을 제공 하지 않습니다.

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

소중한 의견에 감사드립니다.

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×