2014-09-09 2 views
0

드물게 100 % CPU 사용량에 도달하는 mssql 데이터베이스 서버가 있습니다. 이 경우 더 이상 데이터베이스에 연결할 수 없습니다.mssql 100 % CPU를 사용하는 프로덕션 DB 서버

우리가 가진 유일한 해결책은 서버를 재부팅하는 것입니다. 그것은 어떤 유형의 주파수라도 사용하지 않습니다. 동시에, 하루 아무것도 아닙니다. 우리는 아무 일도 일어나지 않고 3 주를 보냈고, 지금까지이 문제를 경험 한 마지막 순간부터 일주일이 지났습니다.

우리는 우리가 문제를 일으키는 것으로 보인다 PID를 볼 수있는 SQL 서버 오류 로그를 검토하지만, 로그 프로세스가 무엇을하고 있었는지 저장 해달라고 할 때,이 등 다른 프로세스

에 의해 차단되고 있었다 문제가 발생하여 상자에 연결할 수 없으며 sp_who 명령을 실행하여 문제가 발생했을 때 실행중인 sql 문을 식별 할 수 없습니다. 우리는 Management Studio를 사용하여 연결을 시도하고 있음을 인정합니다.

SQL 프로파일 러를 실행하고 싶지 않습니다. 너무 자주 발생하지 않는 리소스가 낭비되기 때문에 DB 프로파일을 사용하지 않아도됩니다.

오류 로그에 뭔가가 기록되어 있지만 DBA가 아니기 때문에 누락되었습니다.

+0

서버가 가상 서버입니까? Hyper-V에서 실행 중입니까? – Donal

+0

@Donal. 서버가 VMWare 가상 환경 내에서 실행 중입니다. –

+0

좋습니다, 우리는 VM에서 호스팅 될 때 SQL Server에서 CPU 스파이크 문제를 보았습니다. 이는 대개 대기 RAM이 커지기 때문입니다. RAMMap을 사용하여 작업 세트를 비워야합니다. 그것이 문제인지 확실하지 않지만 - 시도해 볼만한 가치가 있습니다. 여기를 참조하십시오 : http://dandar3.blogspot.ie/2012/05/rammap-freeing-up-memory.html – Donal

답변

0

당신은이 일을하려고 할 수 있습니다 :

  1. 당신은 당신은 identify the most costly SQL Server queries using DMV’s

    SELECT TOP 20 
        qs.sql_handle, 
        qs.execution_count, 
        qs.total_worker_time AS Total_CPU, 
        total_CPU_inSeconds = --Converted from microseconds 
        qs.total_worker_time/1000000, 
        average_CPU_inSeconds = --Converted from microseconds 
        (qs.total_worker_time/1000000)/qs.execution_count, 
        qs.total_elapsed_time, 
        total_elapsed_time_inSeconds = --Converted from microseconds 
        qs.total_elapsed_time/1000000, 
        st.text, 
        qp.query_plan 
    FROM 
        sys.dm_exec_query_stats AS qs 
        CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st 
        CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp 
    ORDER BY qs.total_worker_time DESC 
    
  2. 당신은 관리에서 활동 모니터를 확인하실 수 있습니다 DBCC FREEPROCCACHE

  3. 사용하여 캐시를 삭제하려고 할 수 있습니다 CPU별로 정렬 및 정렬

+0

R.T. 일을 시작하면 우리 인프라 직원에게 쿼리를 실행하도록 요청할 것입니다. 프로덕션 서버로서 나는 그것에 접근 할 수 없다. 불행히도 문제가 발생하면 서버에 원격으로 연결하는 데 어려움을 겪고 있으며 더 이상 연결을 허용하지 않으므로 오류 메시지를 연결할 때 시간 초과가 발생합니다. 따라서 문제가 발생하면 SQL 인스턴스에 연결할 수 없습니다. 이 경우 활동 모니터는 도움을 줄 수 없습니다. –

+0

@DarrenGuy : -이 시나리오에 대해 이해할 수 있습니다. 많은 CPU 사용량을 감안한 쿼리가 하나 있었기 때문에 쿼리가 목적을 해결 했으므로 특정 세션을 종료해야했습니다. 사용자. –

+0

정상적인 연결이 성공하지 못할 경우 [전용 관리자 연결] (http://technet.microsoft.com/en-us/library/ms178068%28v=sql.105%29.aspx)을 사용해보십시오. 하지만 일상적인 작업 부하는 아닙니다. –

0

우선, SQL Server에서 실행중인 항목을 확인하고 spids의 cpu 활용도를 확인하거나 방해물이 있는지 확인하십시오. select * sys.sysprocesses에서 spid> 50 order by cpu desc; 특정 프로세스가 실행 중이고 CPU 사용을 유발 한 경우 테이블을 찾아서 마지막으로 업데이트 된 통계 또는 해당 테이블의 누락 된 인덱스를 확인하거나 인덱스 재 작성 작업을 수행하십시오. CPU가 높을 때마다 서버 didint가 로그인하거나 SQL이 멈출 때마다 데이터 수집 도구 인 PSSDIAG을 사용합니다.이 도구는 나중에 SQL Server에서 모든 작업을 수집하므로 나중에 문제를 분석 할 수 있습니다 무료이며 Microsoft에서 제공합니다. 단지 10-15 분 동안 만 실행하면됩니다 (작업에 따라 다름).

1
  • 통계를 업데이트해야합니다.
  • 색인 조각화는 확인하고 다시 구체화하거나 sholud 을 완료해야합니다.
  • 색인 검색을 완료하십시오.
  • 누락 된 색인 및 구현 방법을 찾으십시오.
  • 사용되지 않는 색인을 제거하십시오.
관련 문제