데이터베이스에 대한로드 테스트 및 용량 계획을 어떻게 수행합니까?


34

이것은이다 표준 질문 데이터베이스에 대한 용량 계획에 대해.

관련 :

데이터베이스 용량 계획의 도구 및 방법에 대한 표준 질문을 작성하려고합니다. 이것은 정식 질문입니다.

분명히 일반적인 워크 플로는 다음과 같습니다.

  • 시나리오를 제자리에 놓으십시오
  • 모니터링 추가
  • 트래픽 추가
  • 결과 평가
  • 결과에 따라 치료
  • 린스, 합리적으로 행복해질 때까지 반복

모범 사례뿐만 아니라 다른 웹 서버, 프레임 워크 등에 대한 다양한 도구와 기술을 자유롭게 설명하십시오.


데이터베이스는 거의 독립형 시스템이 아닙니다. 이는 종종 큰 애플리케이션 서버의 주요 컨텍스트에서 볼 수 있습니다. DB는 백엔드 데이터 장치입니다. 따라서 부하를 테스트 할 때 고려해야합니다.
닐스

답변:


24

디스크 및 RAM 용량 계획

데이터베이스 서버의 디스크 및 메모리 용량 계획은 까다로운 작업입니다. 더 좋습니다. 빠를수록 좋습니다.

일반적인 지침으로 다음을 제공합니다.

  • 당신은 당신 것보다 더 많은 디스크 공간이 원하는 EVER 필요합니다.
    향후 3-5 년 동안 필요한 디스크 공간을 최대한 추정 한 다음 두 배로 늘리십시오.
  • 데이터베이스 인덱스를 메모리에 보관하고 최소 2 회 이상 가장 큰 쿼리를 처리하고 정상적인 OS 디스크 캐시를위한 충분한 공간을 확보 할 수있는 충분한 RAM이 필요합니다.
    인덱스 크기는 데이터베이스에 따라 다르며 다른 모든 것은 데이터 세트 및 쿼리 / 데이터베이스 구조에 따라 크게 달라집니다. 제안으로 "최소 테이블 크기의 2 배 이상"을 제안하지만,이 제안은 가장 큰 테이블이 수십 또는 수백 기가 바이트가 될 수있는 실제로 큰 데이터웨어 하우징 작업으로 분류됩니다.

모든 데이터베이스 공급 업체에는 디스크 / 메모리 / OS 커널의 성능 조정에 대한 지침이 있습니다. 배포 전에이 설명서를 사용하여 시간을 보내십시오. 도움이 될거야.


워크로드 벤치마킹 및 용량 계획

아직 배포하지 않았다고 가정하면 ...

많은 데이터베이스 시스템은 벤치마킹 도구 와 함께 제공됩니다 ( 예 : PostgreSQLpgBench 와 함께 제공) .
이러한 도구는 데이터베이스 성능 벤치마킹의 첫 번째 단계 여야합니다. 가능하면 모든 새 데이터베이스 서버에서이를 실행하여 데이터베이스 서버가 수행 할 수있는 "작업량"을 느끼십시오.

이제 실제 벤치마킹으로 벤치마킹에 ABSOLUTELY MEANINGLESS대한보다 현실적인 접근 방법을 고려해 보겠습니다. 데이터베이스 스키마를로드하고 더미 데이터로 채우는 프로그램을 작성한 다음 해당 데이터에 대해 애플리케이션 쿼리를 실행하십시오.
이는 세 가지 중요한 사항을 벤치마킹합니다. 1. 데이터베이스 서버 (하드웨어) 2. 데이터베이스 서버 (소프트웨어) 3. 데이터베이스 디자인 및 데이터베이스가 위의 (1) 및 (2)와 상호 작용하는 방식.

이렇게하려면 간단한 사전 구축 된 벤치 마크보다 훨씬 많은 노력이 필요합니다. 채우기 pgBench를 수행하려면 코드를 작성해야하며 쿼리 및 보고서 실행 시간을 수행하려면 일부 코드를 작성해야합니다.
이러한 종류의 테스트도 훨씬 더 정확합니다. 스키마와 쿼리를 사용하여 작업하는 방법을 확인할 수 있으며 데이터베이스 / 쿼리를 프로파일 링하고 개선 할 수있는 기회를 제공합니다.

이러한 벤치 마크 결과는 이상적인 데이터베이스 뷰입니다. 안전을 위해 프로덕션 환경에서이 성능의 50-70 % 만 달성한다고 가정합니다 (나머지는 예기치 않은 성장, 하드웨어 오류, 워크로드 변경 등을 처리 할 수있는 쿠션입니다).


너무 늦었 어! 생산 중입니다!

시스템이 프로덕션 환경에 들어가면 "벤치 마크"에 도달하기에는 너무 늦습니다. 쿼리 로깅 / 타이밍을 짧게 켜고 시간이 얼마나 걸리는지 확인할 수 있으며, 오프 동안 큰 데이터 세트에 대해 "스트레스 테스트"쿼리를 실행할 수 있습니다. 시간. 또한 시스템의 CPU, RAM 및 I / O (디스크 대역폭) 사용률을보고 얼마나 많은로드가 있는지에 대한 아이디어를 얻을 수 있습니다.
불행히도 이러한 모든 작업은 시스템이 수행하는 작업에 대한 아이디어와 포화 상태에 대한 모호한 개념을 제공합니다.
그것은 우리를…


지속적인 모니터링

시스템에 갑자기 새로운 / 다른 사용 패턴이 나타나는 경우 전 세계의 모든 벤치 마크가 도움이되지 않습니다.
더 나은 또는 더 나쁜 데이터베이스 배포는 정적 인 것이 아닙니다. 개발자가 상황을 바꾸고, 데이터 세트가 커지고 (수축되지 않는 것처럼 보임), 사용자는 테스트에서 예측하지 못한 미친 듯이 조합 된 이벤트를 생성하게됩니다.

데이터베이스에 대한 적절한 용량 계획을 수행하려면 데이터베이스 성능이 더 이상 기대치를 충족하지 않을 때 경고하기 위해 일종의 성능 모니터링을 구현해야합니다. 이 시점에서 치료 작업 (새 하드웨어, DB 스키마 또는 리소스 사용 최적화를위한 쿼리 변경 등)을 고려할 수 있습니다.


참고 : 이것은 데이터베이스 하드웨어의 크기를 조정하고 남용 할 수있는 정도를 파악하는 매우 높은 수준의 일반적인 안내서입니다. 특정 시스템이 귀하의 요구를 충족시키는 지 판단하는 방법이 여전히 확실하지 않은 경우 데이터베이스 전문가에게 문의하십시오.
특히 데이터베이스 관리 전용의 dba.stackexchange.com Stack Exchange 사이트도 있습니다 . 성능 조정에 대한 추가 조언이 필요하면 해당 질문 아카이브를 검색하거나 데이터베이스 엔진 고유의 태그를 찾아보십시오.


1
또한 요즘에는 스왑 / 온 디스크 작업에 SSD를 사용할 수 있습니다. 그러면 디스크에서 큰 임시 테이블을 사용하는 쿼리 속도가 향상됩니다. 따라서 일반적으로 SSD를 추가하는 것이 좋습니다.
피터

2
@Peter 스왑 공간을 위해 SSD를 권장하지 않습니다. (만약 적극적으로 스왑하는 경우 매우 높은 이탈률이 있습니다.) SSD의 크기가 충분하고 마모 수준이 높으면 디스크 수명이 길어질 수 있습니다. SSD가 임시 테이블 스페이스에 사용되어 좋은 결과를 얻었습니다.
voretaq7

SSD에 대한 의견에서이 조언은 이제 7 살입니다. 2019 년 이후 데이터베이스 서버에 데이터베이스를 보유한 모든 스토리지는 SSD 여야합니다.
Mark Henderson

1

일반적으로 성능을 테스트하려면 현실적인 사용 사례가 필요합니다. 모범 사례는 응용 프로그램 개발자와 최종 사용자를 참여시키는 것입니다.

그들이 일반적으로하고있는 것을 기록하고, 각 유스 케이스에 대해 그것을 수행 (내용, 동시 조치 수)하여 평가하십시오.

그런 다음 클라이언트 측을 빌드하십시오. 단일 물리적 시스템으로는 종종 생산로드를 구축하기에 충분하지 않습니다.

그런 다음 그것을 발사하고, 용리하고, 강화하고 다시 테스트하십시오.

bottlneck이 어디에서 일어나는지 놀랄 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.