DBA 작업에 익숙하지는 않지만 SQL Server에 대한 추가 리소스를 요청하는 사례를 만들려고 노력하고 있으며 똑똑한 사람들이 실행해야 할 사항에 대한 대략적인 추정치를 제공 할 수 있기를 바랍니다. IT가 프로덕션 SQL Server에 제공 한 리소스 할당량이 적을 것으로 의심됩니다.
하드웨어 소프트웨어:
데이터베이스 : SQL Server 2008 R2 엔터프라이즈 데이터베이스
Windows : Windows 2008 r2 Enterprise 64 비트, VMware에서 실행 중입니다.
프로세서 : Intel® Xeon® CPU E7-4860 @ 2.27GHz 2.26 GHz (2 프로세서)
설치된 메모리 : 4GB
데이터베이스 파일 용 하드 드라이브 : 300GB
백업용 하드 드라이브 : 150GB
로그 용 하드 드라이브 : 100GB
신청:
우리는 매일 생성되는 10 개의 서로 다른 보고서 (각각 평균 700k 레코드 포함)를 저장하는 동일한 서버의보고 서비스 데이터베이스 (SSRS) 인 최대 약 170GB의 데이터를 추가하는 3 개의 기본 데이터베이스가 있습니다. 우리의 사용자 기반은 약 20 명의 동시 사용자이며, 그 중 5 명은 데이터를 소비하는 큰 보고서를 생성하여 “자원 집약적”으로 간주 될 수 있습니다. 대부분의 사용자는 asp.net 웹 사이트 및 보고서 서버 웹 사이트를 통해 데이터베이스와 상호 작용합니다. 또한 개발자는 서버에 직접 원격으로 원격 연결하여 BIDS에서 SSIS를 광범위하게 사용합니다 (최대 2 개의 원격 연결). 마지막으로, 서버에서도 실행되는 SSIS 패키지를 통해 하루에 3 백만 건의 레코드를 가져 오는 상당히 관련된 데이터웨어 하우징 작업이 있습니다.
현재 문제 :
서버 시간이 만성적으로 단축되어 웹 사이트에 대한 응답 시간이 매우 나쁩니다. 나는 우리가 가진 메모리 양 (4GB)이 아마도 큰 병목 현상이라고 생각합니다. 추가 메모리에 대한 이전 요청은 더 많은 쿼리 최적화를 수행해야하는 일반적인 응답으로 거부되었습니다. 우리는 SQL 전문가가 아니거나 (설치 프로그램에서 알 수 있듯이) db 관리자 전문가이지만 하드웨어가 병목.
tl; dr 회피에 대한 모든 감사합니다!
답변
우리가 뭘해야하는지 대략적인 대략적인 추정치를 얻을 수 있기를 바랐습니다.
쿼리 및 데이터 크기에 대한 추가 정보가 없으면 정확한 견적은 물론 모든 종류의 견적을 제공하기가 매우 어렵습니다.
데이터베이스 : SQL Server 2008 R2 엔터프라이즈 데이터베이스
Windows : Windows 2008 r2 Enterprise 64 비트, VMware에서 실행 중입니다.
프로세서 : Intel® Xeon® CPU E7-4860 @ 2.27GHz 2.26 GHz (2 프로세서)
설치된 메모리 : 4GB
두 개의 프로세서 (이것이 VM에 2 개의 코어로 노출되어 있다고 가정합니다)가 프로비저닝되지 않았거나 그렇지 않을 수 있습니다. VM에 할당 된 코어가 물리적 코어에 직접 매핑 될 필요는 없으며 (필요할 때 단일 코어의 100 %를 사용할 수도 있습니다!) 메모리보다 유연한 리소스임을 알 수 있습니다. 워크로드 또는 하드웨어 / 가상화 구성에 대한 추가 정보가 없으면 이것을 4로 늘리면 좋을 것입니다.
메모리 할당. 오 소년. 이다 조잡한 작업 부하에 대한 비전 아래-. Windows 자체는 행복을 유지하기 위해 최소 2-3GB가 필요하며, 상자에서 BIDS를 실행하는 2 명의 사용자 각각은 각각 500MB 이상이 필요합니다. 그리고 그로 인해 상자가 이미 최대로 확보되었으며 데이터베이스 에 필요한 양을 파악하기조차 시작하지 않았습니다 .
대부분의 사용자는 asp.net 웹 사이트 및 보고서 서버 웹 사이트를 통해 데이터베이스와 상호 작용합니다.
당신이 말하지는 않았지만 이것들이 같은 상자에서 실행되고 있다면 그것들에 대한 메모리 요구 사항도 고려해야합니다.
마지막으로, 서버에서도 실행되는 SSIS 패키지를 통해 하루에 3 백만 건의 레코드를 가져 오는 상당히 관련된 데이터웨어 하우징 작업이 있습니다.
시스템에 실제 사용자가 없을 때 밤에 실행한다고 가정하면 실행하는 데 너무 오래 걸리지 않는 한 이것을 문제로 보지 않습니다. 사물의이 부분은 당신의 걱정 중 가장 적은 부분입니다. 실제 사용자가 더 중요합니다.
추가 메모리에 대한 이전 요청은 더 많은 쿼리 최적화를 수행해야하는 일반적인 응답으로 거부되었습니다.
위에서 설명한 것처럼 프로비저닝 된 현재 메모리 양이 완전히 부적절합니다. 그러나 동시에 스펙트럼의 다른 쪽 끝에서 전체 데이터베이스를 한 번에 메모리에 유지할 수 있도록 충분한 메모리를 프로비저닝 할 수 없을 것 입니다.
그런 식으로 담요 응답을 받았지만 ( 실제로 추가 리소스에 대한 정당화가 실제로 설득력이 아니라 얼마나 설득력이 있는지와 더 관련이 있었음에도 불구 하고) 데이터베이스의 효율성이 높을 수 있습니다. 향상. 그러나 현재 겪고있는 문제를 해결할 수있는 튜닝 양은 없습니다. 그 제안은 나에게 완전한 비 스타터입니다.
나는 현재 프로비저닝 메모리의 양 (최대한 빨리 수정해야하는) 필요한 최소 아래에있는 전체적인 접근 방식을 것이고, 추가 리소스 사용 가능한 수준으로 사용자 경험을 향상해야 할 수 있습니다 동안 개선의 효율성을 높이기 위해 만들어진 시스템.
다음은 몇 가지 생각입니다 (공격 순서).
-
더 많은 리소스를 프로비저닝 할 때마다 얼마나 많은 성능이 향상되는지 증명할 수 있으면 이길 것 입니다. 가능한 경우 웹 사이트 응답 시간을 포함 하여 성능 모니터 로깅 (참고 : 로깅 부분이 매우 중요 함)을 사용하여 성능 메트릭을 추적하십시오 . 다른 작업을하기 전에 지금 이 작업을 시작하십시오 . 마지막으로 최소 메모리 양에 도달하면 (즉시 32GB를 얻지 않을 것임 ) 갑자기 추가 된 메모리가 개선 되었다는 증거 가 생겼습니다. 더 많은 것을 추가하면 도움이 될 것입니다! 현재 구성에 대한 기준을 수집하지 않으면 상황이 최소 권장 수준으로 올라갈 때 보트를 놓칠 수 있습니다.
-
서버의 대기 통계를 분석하십시오 . 시스템에서 가장 큰 병목 현상이 무엇인지 알려줍니다. 당신은 아마거야
PAGEIOLATCH_XX
/ O 디스크에서 페이지를 가져 오기 위해 수행되고 너무 많은 I를 나타내는 가장 일반적인 / 최대 대기 시간으로. 메모리를 추가하면이를 완화 할 수 있으므로 필요한 데이터가 이미 메모리에 있으므로 물리적 I / O의 빈도가 줄어 듭니다. 이 분석은 거의 확실한 결론이지만, 이러한 통계를 수집했다는 사실은 자원의 필요성을 정당화 할 때 더 많은 탄약을줍니다. -
위에서 언급했듯이 메모리에 대한 최소 요구 사항이 충족되지 않습니다. 실행중인 모든 소프트웨어에 대한 권장 하드웨어 요구 사항을 수집하고 작업 관리자의 스크린 샷을 얻을 수도 있습니다. 이것만으로도 최소한 4-8GB 이상 더 정당화 할 수있을 것입니다. 그래도 거부하는 경우 일주일 동안 사용해 볼 수 있도록 설득하고 그 이후에 다시 제공하십시오 (성능 통계를 수집하는 중이므로 주중에 반품 할 필요가 없습니다). 상황이 얼마나 개선되었는지 증명할 수 있습니다). 그들이 여전히 거부 한다면 , 당신은 실패하도록 설정되고있는 것입니다; URLT .
-
일부 워크로드를 오프로드 할 수있는 경우 (특히 가능한 경우 원격으로 이동하지 마십시오) 데이터베이스에 사용할 수있는 메모리 양이 증가하므로 더 중요합니다.
-
당신은 매우 신중하게 설정 SQL 서버의 최대 메모리 설정해야합니다 즉, 한 번에 메모리에 전체 데이터베이스를 맞게 할 수 없습니다 커밋을 통해 메모리를 방지 등의 성능을 죽이고, 다른 아무것도 . 오버 커밋은 실제로 모든 데이터를 메모리에 맞추지 못하는 것보다 훨씬 나쁩니다 . 사용 가능한 메모리가 전혀 없기 때문에 현재이 시나리오에있을 가능성이 높으며 최대 메모리 설정이 기본값 (무제한)으로 설정되었을 수 있습니다.
-
SQL Server Enterprise Edition을 실행 중이고 메모리가 부족하므로 데이터 압축 구현을 강력하게 고려할 것 입니다. 이는 메모리 공간 절약을위한 CPU 사용량 증가와 디스크 액세스 감소 (상당히 매우 느림)를 상쇄합니다.
-
데이터베이스를 조정하십시오. 인덱싱 및 액세스 패턴이 진행되는 한 구조와 쿼리가 개선 사항을 사용할 수 있습니다. 또한 많은 데이터를 자주 스캔하고 집계하는 경우 인덱스 된 뷰, 요약 테이블 또는 사전 계산 된 보고서를 만드는 것이 매우 유용 할 수 있습니다.
-
더 많은 하드웨어 프로비저닝을 의미하지만 캐싱 솔루션을 구현하기 때문에 이것이 오래 걸릴 수 있습니다. 가장 빠른 쿼리는 결코 만들지 않는 쿼리입니다 .
그것들은 단지 몇 가지 아이디어입니다. 결론은 튜닝만으로는 여기서 문제를 해결하지 못하고 하드웨어만으로는 문제가 해결되지는 않지만 대부분의 즉각적인 문제는 완화 될 수 있다는 것입니다. 그것이 실제로 진행되는 방법입니다. 단기적으로는 문제에 하드웨어를 던져서 불을 끄고 장기적으로 문제를 조정하여 근본 원인을 최대한 잘 해결하십시오.
답변
이것은 계정 ‘콩 카운터’광기입니다. 당신이 RAM에 쓸 $ 1100- $ 2500 는 일주일 이내에 스스로를 지불 할 수 있습니다 !
직원 20 명에 대한 시간 초과가 발생했으며 그 중 5 명은 ‘자원 집약적’작업을 수행하고 있습니다. 나는 그들의 시간이 싸지 않다고 상상할 것입니다. 그리고 그 보고서 중 일부는 월급에 사인을하지 않는 상사가 좋아할 것입니다. 그것은 재전송과 좌절을 처리하는 데 낭비되는 많은 비용입니다.
그들에게 아마도 RAM에 GB 당 15 ~ 20 달러를보고 있다고 설명하십시오. 현재 128GB의 RAM은 약 2200 ~ 2500 달러이며 RAM 가격은 현재 약간 상승했습니다. 서버 마더 보드가이를 지원할 수 없더라도 (이상 할 것임) 64GB는 $ 1100- $ 1200입니다 (방금 확인했는데 할인이 적용되지 않은 Dell의 서버 램 품질입니다). 64GB의 램조차도 큰 차이를 만들 수 있습니다 (큰 테이블의 테이블 스캔을 피할 경우 특히 그렇습니다).
얼마나 많은 시간이 낭비되는지 파악하고 1100 ~ 2500 달러 가치가 있는지 물어보십시오. $ 1100 만 지출하고 64GB 램을 얻는 경우 큰 테이블에서 테이블 스캔을 피하십시오. 스캔이 많은 메모리를 덤프하지 않도록 인덱스가있는 디스크를 더 많이 사용하십시오 (지원 대기 시간이있는 경우).
답변
46GB의 Ram으로 2008 R2를 실행하고 있습니다. 가상 머신이 없습니다. SQL Server 2008.
데이터베이스는 약 300GB입니다.
최근 데이터베이스를 솔리드 스테이트 드라이브에 넣고 데이터 출력을 세 배로 늘 렸습니다.
서버가 현재 45GB의 램을 사용 중이며 정상적으로 작동하고 있습니다.
FC Sata Raid 및 SAS SCSI RAID. 총 26 개의 논리 드라이브. 144 스피닝 디스크.
어제 50TB의 전체 하드 드라이브 만 연결하고 데이터를 전송할 때 24GB의 램만 사용했습니다. 현재 160TB의 전체 하드 드라이브가 있고 45GB의 램을 사용하고 있습니다.
내 응용 프로그램은 400MB 이상의 램을 사용하지 않습니다.
빠른 솔리드 스테이트 드라이브 또는 램 드라이브에 데이터베이스가 필요하다고 생각합니다. 기본적으로 더 많은 램이 필요합니다.