SQL Server 2008 R2의 일반 메모리 요구 사항


11

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 회피에 대한 모든 감사합니다!


7
그들은 4GB의 메모리로 170GB의 데이터를 처리 할 것으로 예상됩니까? 쿼리 튜닝으로 문제를 해결할 수 없으며 트리에서 벗어났습니다.
Aaron Bertrand

그들에게 숫자를 보여줍니다 (성능 통계). Window Server 2008 R2의 최소 메모리를 나타내는 Microsoft 설명서가 4GB임을 보여줄 수도 있습니다. SQL Server에는 그다지 중요하지 않습니다.

2
대기 통계는 무엇을 보여줍니까? PAGEIOLATCH_XX에서 쿼리를 기다리는 시간이 많이 있다고 생각합니다. 당신이 있다면, 당신은 여분의 메모리가 도움이 될 것이라는 증거로 그것을 사용할 수 있습니다.
SQLRockstar

2
그리고 더 나은 IO 서브 시스템에서 작업을 시작할 수있는 메모리가 있습니다. 잘 사용되는 데이터베이스를위한 하드 드라이브는 IOPS 농담입니다. 드라이브 여야합니다. 드라이브를 IOPS 소스로 구매하는 데이터베이스의 경우 드라이브를 용량으로 구매하지 않습니다. WHich는 512GB SSD가 데이터베이스 파일에 적합하다는 것을 의미합니다. 표준 "큰 값으로 만들자"는 데이터베이스를 죽일 것입니다.
TomTom

@TomTom 나는 우리가 레이드 배열을 가지고 있다고 확신합니다. 그래도 어떻게 감지하는지 잘 모르겠습니다. 방금 컴퓨터 창 탐색기가 Windows 서버에 무엇을 표시했는지에 대한 하드 드라이브 설명을 기반으로했습니다.
RMuesi

답변:


14

우리가 뭘해야하는지 대략적인 대략적인 추정치를 얻을 수 있기를 바랐습니다.

쿼리 및 데이터 크기에 대한 추가 정보가 없으면 정확한 견적은 물론 모든 종류의 견적을 제공하기가 매우 어렵습니다.

데이터베이스 : 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 사용량 증가와 디스크 액세스 감소 (상당히 매우 느림)를 상쇄합니다.

  • 데이터베이스를 조정하십시오. 인덱싱 및 액세스 패턴이 진행되는 한 구조와 쿼리가 개선 사항을 사용할 수 있습니다. 또한 많은 데이터를 자주 스캔하고 집계하는 경우 인덱스 된 뷰, 요약 테이블 또는 사전 계산 된 보고서를 만드는 것이 매우 유용 할 수 있습니다.

  • 더 많은 하드웨어 프로비저닝을 의미하지만 캐싱 솔루션을 구현하기 때문에 이것이 오래 걸릴 수 있습니다. 가장 빠른 쿼리는 결코 만들지 않는 쿼리입니다 .

그것들은 단지 몇 가지 아이디어입니다. 결론은 튜닝만으로는 여기서 문제를 해결하지 못하고 하드웨어만으로는 문제가 해결되지는 않지만 대부분의 즉각적인 문제는 완화 될 수 있다는 것입니다. 그것이 실제로 진행되는 방법입니다. 단기적으로는 문제에 하드웨어를 던져서 불을 끄고 장기적으로 문제를 조정하여 근본 원인을 최대한 잘 해결하십시오.


1
John 나는 당신의 대답과 +1을 좋아하지만이 시나리오에서는 Aaron의 의견이 머리에 닿는 것처럼 보이며 얼마나 열심히 조정하든간에 더 많은 램이 필요합니다.
Ali Razeghi 4

2
@Ali : 그렇습니다. 동의합니다. 제 대답에서 그 점을 언급했습니다. 대부분의 경우 RAM 문제를 해결하는 전략 에 집중하고 싶었 습니다. ( 사용할 수없는 경우 별도의 문제입니다.)
Jon Seigel

자세한 답변을 주셔서 대단히 감사합니다! db 성능 조정을 처음 사용하므로 시작 위치를 이해하려고합니다. 독서 자료와 성능 모니터가 있는데, 이제 측정법을 이해해야합니다. 그러나 귀하의 제안은이 문제에 접근하기위한 좋은 로드맵을 제공합니다. 다시 감사합니다.
RMuesi

@RMuesi : 천만에요. 해야 할 일을 수행하는 방법에 대한 질문이 있으시면 언제든지 게시하십시오 (물론 먼저 검색하십시오). 커뮤니티가 기꺼이 도와 드리겠습니다.
Jon Seigel

9

이것은 계정 '콩 카운터'광기입니다. 당신이 RAM에 쓸 $ 1100- $ 2500 는 일주일 이내에 스스로를 지불 할 수 있습니다 !

직원 20 명에 대한 시간 초과가 발생했으며 그 중 5 명은 '자원 집약적'작업을 수행하고 있습니다. 나는 그들의 시간이 싸지 않다고 상상할 것입니다. 그리고 그 보고서 중 일부는 월급에 사인을하지 않는 상사가 좋아할 것입니다. 그것은 재전송과 좌절을 처리하는 데 낭비되는 많은 비용입니다.

그들에게 아마도 RAM에 GB 당 15 ~ 20 달러를보고 있다고 설명하십시오. 현재 128GB의 RAM은 약 2200 ~ 2500 달러이며 RAM 가격은 현재 약간 상승했습니다. 서버 마더 보드가이를 지원할 수 없더라도 (이상 할 것임) 64GB는 $ 1100- $ 1200입니다 (방금 확인했는데 할인이 적용되지 않은 Dell의 서버 램 품질입니다). 64GB의 램조차도 큰 차이를 만들 수 있습니다 (큰 테이블의 테이블 스캔을 피할 경우 특히 그렇습니다).

얼마나 많은 시간이 낭비되는지 파악하고 1100 ~ 2500 달러 가치가 있는지 물어보십시오. $ 1100 만 지출하고 64GB 램을 얻는 경우 큰 테이블에서 테이블 스캔을 피하십시오. 스캔이 많은 메모리를 덤프하지 않도록 인덱스가있는 디스크를 더 많이 사용하십시오 (지원 대기 시간이있는 경우).


5
광기에 대해 잘 말했다. 4 기가 바이트 메모리는 요즘 데스크탑에 제안하는 것보다 적습니다. 그리고 지금은 170gb 데이터베이스 환경에서 실행하려고합니다. 젠장 농담. 그러나 beancounters를위한 가상화는 값 비싼 서버를 제거 할 수 있다는 것을 의미합니다.)
TomTom

2
완전히 동의하십시오. 적어도 작전 시나리오에서 빈 카운터는 발톱이 물리적 서버 이륙했다 (희망!)
알리 Razeghi에게

1
믿어 난 아니야 TYPICAL은 많은 RAM과 LAAAAARGE 저렴한 디스크를 갖춘 서버입니다. 따라서 많은 가상 머신을 실행할 수 있습니다. 결국, RAM은 일반적으로 제한 요소입니다. 결과적으로 데이터베이스가 없어도 IOPS 성능이 뛰어납니다. 거기에 있었어요. 64GB 메모리, 2TB 미러 SATA 디스크;)
TomTom

답변 해주셔서 감사합니다. 나는 많이 의심했지만 문제가 부분적으로 하드웨어 모방이라는 것을 증명할 데이터가 없습니다. 나는 지금 그 일을하고 있습니다.
RMuesi

2
SQL Server가 메모리 데이터베이스 엔진이라는 사실을 알려줄 수도 있습니다. 디스크에서 읽기, 심지어 SSD (이 가게에서 사용하지 않을 것이라고 확신)조차도 느리게 느립니다. RAM에서 읽는 데 약 5ns가 걸립니다. 테이블 스캔 및 읽기를 표시하는 SET STATISTICSIO ON으로 실행 계획을 표시하십시오. 물리적 읽기와 논리적 읽기를 보여줍니다. 물리적은 디스크에서 수행됩니다.
Ali Razeghi

-1

46GB의 Ram으로 2008 R2를 실행하고 있습니다. 가상 머신이 없습니다. SQL Server 2008.

데이터베이스는 약 300GB입니다.

최근 데이터베이스를 솔리드 스테이트 드라이브에 넣고 데이터 출력을 세 배로 늘 렸습니다.

서버가 현재 45GB의 램을 사용 중이며 정상적으로 작동하고 있습니다.

FC Sata Raid 및 SAS SCSI RAID. 총 26 개의 논리 드라이브. 144 스피닝 디스크.

어제 50TB의 전체 하드 드라이브 만 연결하고 데이터를 전송할 때 24GB의 램만 사용했습니다. 현재 160TB의 전체 하드 드라이브가 있고 45GB의 램을 사용하고 있습니다.

내 응용 프로그램은 400MB 이상의 램을 사용하지 않습니다.

빠른 솔리드 스테이트 드라이브 또는 램 드라이브에 데이터베이스가 필요하다고 생각합니다. 기본적으로 더 많은 램이 필요합니다.


IBM exFlash 400GB MCS $ 4400 내가가는 곳입니다.
david
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.