none
sql server 2005 프로세스별 cpu 사용량 통제 가능한지요? RRS feed

  • 질문

  • 안녕하십니까? 일반 사용자입니다 

    사용자 프로그램이 데이터를 조회 할 때 sql server 2005 DB에 접근하여 데이터를 가져 오는데
    시간이 많이 걸리고 또한 DB서버의 CPU 사용량이 순간적으로 50% 이상 올라 갑니다

    CPU 사용량을 줄이는 방법이 방법이 있는지요?
    튜닝을 하면 될수 있다고 하는데 가능한지요?

    감사합니다
    • 편집됨 usfk 2015년 11월 10일 화요일 오전 5:57
    2015년 11월 5일 목요일 오전 1:12

답변

  • 일단 쿼리 튜닝이나 인덱스 튜닝으로 성능이 좋아질 수 있습니다.

    또는 병렬처리 시 불필요하게 너무 많은 worker thread를 사용해서 성능이 저하될 수도 있는데, 이런 경우라면 병렬 처리 수준을 조절해서 성능 향상 효과를 다소 볼 수 있습니다.

    하지만 해당 쿼리가 정말로 CPU나 다른 리소스를 사용해야 하는 쿼리라면 어쩔 수 없을 수도 있습니다.

     

    먼저 쿼리에 대한 튜닝을 진행보시는 것이 바람직해 보입니다.

     

    답변이 도움이 되셨으면 좋겠습니다.

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com

    • 답변으로 제안됨 Boram Yi 2015년 11월 9일 월요일 오전 2:06
    • 답변으로 표시됨 usfk 2015년 11월 10일 화요일 오전 6:00
    2015년 11월 5일 목요일 오후 12:21
  • 튜닝이 가장 효율 적인 방법입니다만,

    그외에 CPU 사용량을 리소스관리자를 통해서 할당을 할 수 있으나, SQL2008 이후부터 가능 합니다.

    더 강력한 리소스관리자 기능은 2012부터 제공을 하구요.

    현재 상태라면 튜닝을 고려 해 볼 필요가 있는 상황으로 보이네요

    • 답변으로 제안됨 Boram Yi 2015년 11월 9일 월요일 오전 2:06
    • 답변으로 표시됨 usfk 2015년 11월 10일 화요일 오전 6:00
    2015년 11월 7일 토요일 오후 2:30
  • 질문과 같이 CPU가 간헐적으로 50% 이렇게 올라가는 경우라면 리소스 관리자로 CPU 제어하는 것이 의미가 없습니다.

    많은 분들이 잘못 알고 계시는 경우인데,

    리소스 관리자에서 CPU를 제어하는 경우는 CPU에 경합이 있는 경우입니다.

    리소스 관리자에서 CPU를 30%만 사용해라라고 제한하더라도 평상시에 30%까지만 사용하는 것은 아닙니다. ^^

    전체 CPU가 여유가 있다면 30%이상(경합이 없다면 100%)도 사용 가능합니다.

     

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com

    • 답변으로 표시됨 usfk 2015년 11월 10일 화요일 오전 6:00
    2015년 11월 9일 월요일 오전 4:58

모든 응답

  • 일단 쿼리 튜닝이나 인덱스 튜닝으로 성능이 좋아질 수 있습니다.

    또는 병렬처리 시 불필요하게 너무 많은 worker thread를 사용해서 성능이 저하될 수도 있는데, 이런 경우라면 병렬 처리 수준을 조절해서 성능 향상 효과를 다소 볼 수 있습니다.

    하지만 해당 쿼리가 정말로 CPU나 다른 리소스를 사용해야 하는 쿼리라면 어쩔 수 없을 수도 있습니다.

     

    먼저 쿼리에 대한 튜닝을 진행보시는 것이 바람직해 보입니다.

     

    답변이 도움이 되셨으면 좋겠습니다.

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com

    • 답변으로 제안됨 Boram Yi 2015년 11월 9일 월요일 오전 2:06
    • 답변으로 표시됨 usfk 2015년 11월 10일 화요일 오전 6:00
    2015년 11월 5일 목요일 오후 12:21
  • 튜닝이 가장 효율 적인 방법입니다만,

    그외에 CPU 사용량을 리소스관리자를 통해서 할당을 할 수 있으나, SQL2008 이후부터 가능 합니다.

    더 강력한 리소스관리자 기능은 2012부터 제공을 하구요.

    현재 상태라면 튜닝을 고려 해 볼 필요가 있는 상황으로 보이네요

    • 답변으로 제안됨 Boram Yi 2015년 11월 9일 월요일 오전 2:06
    • 답변으로 표시됨 usfk 2015년 11월 10일 화요일 오전 6:00
    2015년 11월 7일 토요일 오후 2:30
  • 질문과 같이 CPU가 간헐적으로 50% 이렇게 올라가는 경우라면 리소스 관리자로 CPU 제어하는 것이 의미가 없습니다.

    많은 분들이 잘못 알고 계시는 경우인데,

    리소스 관리자에서 CPU를 제어하는 경우는 CPU에 경합이 있는 경우입니다.

    리소스 관리자에서 CPU를 30%만 사용해라라고 제한하더라도 평상시에 30%까지만 사용하는 것은 아닙니다. ^^

    전체 CPU가 여유가 있다면 30%이상(경합이 없다면 100%)도 사용 가능합니다.

     

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com

    • 답변으로 표시됨 usfk 2015년 11월 10일 화요일 오전 6:00
    2015년 11월 9일 월요일 오전 4:58
  • 답변 감사합니다

    몇가지 해 봤는데 아직 해결 하지 못했습니다 ㅠ

    혹시, 일정시간 (예: 5초이내에 ) 동일한 쿼리가 들어오면

    그중 제일 먼저 접수된 쿼리만 처리 해 줄수 있는 기능이 있는지요?

    매우 엉뚱하지만...

    쿼리를 요청 보내는 프로그램을 바꿀 수가 없어서 그렇습니다

    동시 다발의 쿼리들 때문에 전체적으로 시스템 속도저하가 일어나기 때문에

    옵션 기능이 있다면 sql 에서 선별적으로 응답 해 보려고 합니다

    부탁드립니다. 감사합니다

    • 답변으로 표시됨 usfk 2015년 11월 10일 화요일 오전 6:00
    • 답변으로 표시 취소됨 usfk 2015년 11월 10일 화요일 오전 6:02
    2015년 11월 10일 화요일 오전 5:49
  • 아쉽게도 일정 시간동안 특정 쿼리에 대해서 제한하는 방법은 없습니다. ^^;

    전반적인 DB의 상황을 컨설팅 업체에 진단을 받아보시는 것이 어떨까 싶습니다.

    프로그램을 수정할 수 없는 경우라면, DB 튜닝으로 해결될 문제인지, 어떤 부분이 문제인지 확인을 해보시는 것이 운영에 도움이 되실 듯 싶습니다.

    감사합니다.

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com

    • 답변으로 제안됨 Boram Yi 2015년 11월 13일 금요일 오전 2:11
    2015년 11월 11일 수요일 오전 11:22