it-swarm-ko.tech

RAID 5 구성에서 데이터베이스를 실행해야합니까?

RAID 5의 쓰기 성능이 때때로 끔찍할 수 있다고 들었습니다. 제공하는 중복성을 원하지만 데이터베이스 삽입/업데이트 시간을 희생하고 싶지 않습니다.

이것이 내가 걱정해야 할 사항이며 만약 그렇다면 중복성을 얻기위한 권장 사항은 무엇입니까 with 좋은 쓰기 성능?

13
Scott Saad

I/O가 너무 무작위이기 때문에 일반적으로 RAID 10이 권장됩니다. 여기에 예가 있습니다. 계산은 약간 단순하지만 꽤 대표적입니다.

6 개의 드라이브 어레이가 있고 드라이브가 초당 100 개의 I/O (IOPS)를 수행 할 수 있다고 가정 해 보겠습니다. 100 % 읽기가있는 경우 6 개의 드라이브가 모두 사용되며 RAID 10 및 RAID 5 모두에 대해 약 600 IOPS가 있습니다.

최악의 시나리오는 100 % 쓰기입니다. 이 시나리오에서 RAID 10의 성능은 (각 쓰기가 두 개의 드라이브로 이동하기 때문에) 절반으로 줄어들어 300 IOPS를 얻습니다. RAID-5는 각 쓰기를 2 개의 읽기와 2 개의 쓰기로 변환하므로 성능의 1/4 또는 약 150 IOPS를 얻을 수 있습니다. 그것은 꽤 큰 히트입니다.

실제 읽기/쓰기 패턴은이 두 극단 사이에 위치하지만, 이것이 일반적으로 데이터베이스에 RAID 10이 권장되는 이유입니다.

그러나 바쁜 데이터베이스 서버가 없으면 RAID-6을 수행 할 수도 있습니다. RAID 10 또는 RAID 5보다 훨씬 더 많은 안전을 제공하기 때문에 데이터베이스가 병목 현상을 일으키지 않을 것이라는 것을 알고 있다면 자주 그렇게합니다.

23
TorgoGuy

트랜잭션 데이터베이스

RAID-5 컨트롤러가 쓰기시 ​​패리티를 재 계산하기 위해 충분한 데이터를로드해야하므로 쓰기 속도가 상대적으로 느립니다. 쓰기 작업에는 최소 4 개의 디스크 작업이 발생합니다.

  • 패리티 블록에서 읽기

  • 이전 블록 (이미 캐시에 있지 않다고 가정)에서 XOR 패리티 블록이있는 값으로) 읽기.

  • 새 패리티 블록 작성 (이전 패리티 블록 XOR 이전 데이터 블록 XOR 새 데이터 블록))

  • 새 데이터 블록 작성.

시스템이 후기 입 캐싱을 사용하지 않는 경우 이는 이러한 모든 작업이 I/O 완료를위한 중요한 경로에 있음을 의미합니다. 종종 이것은 데이터베이스 쓰기의 경우입니다. 실제로 Microsoft (예 : Microsoft)에는 공급 업체가이 동작을 보장해야하는 SQL 서버와 함께 사용하기위한 SAN 장비)에 대한 인증 프로그램이 있습니다. RAID-5 장비는이 최적화를 사용하지 않았으며 전체 스트라이프에서 패리티를 다시 계산해야했습니다.

RAID-1 모든 단일 드라이브에 대한 미러가 있으며 패리티를 계산하기 위해 추가 데이터를 읽을 필요가 없습니다. 이는 쓰기에 훨씬 적은 물리적 I/O가 필요함을 의미합니다.

RAID-5 볼륨이 여러 RAID-5 볼륨으로 분할되어 차례로 스트라이프되는 가운데 어딘가에 있습니다. 3 + 1 체계로 스트라이프 된 그룹으로 만든 RAID-50에서 쓰기는 최대 3 개의 추가 디스크 I/O 요청을 생성합니다. 그렇게 생각한다면 RAID-5와 RAID-10을 RAID-50의 특별한 경우로 볼 수 있습니다. RAID-50은 주로 많은 물리 디스크에 대용량을 제공하는 데 사용됩니다.

RAID-6 (세트당 두 개의 중복 디스크가있는 패리티 체계)과 같은 다른 패리티 체계도 존재합니다. 최신 디스크는 어레이를 재 구축하는 데 상당히 오랜 시간이 걸릴 수있을만큼 충분히 큽니다.이 기간 동안 두 번째 디스크 오류가 발생할 위험이 있습니다. 재건은 상당히 중요합니다. RAID-6은 두 번째 패리티 디스크를 사용하여 데이터 손실을 유발하는 세 개의 디스크 오류를 필요로함으로써 이러한 위험을 완화합니다. RAID-50 구성표와 유사한 트릭을 사용하여 RAID-60 어레이를 만들 수 있습니다.

마지막으로 단일 미러링 쌍 (RAID-1이라고 함)은 일부 작업에 대해 중복성과 충분한 성능을 제공 할 수 있습니다. 특히 RAID-1이 상당히 많은 데이터베이스 로그 트래픽에 대해 충분한 처리량을 제공한다는 것을 알게 될 것입니다. 자세한 내용은 아래에서 확인하세요.

쓰기가 많은 워크로드가있는 경우 RAID-10 볼륨에서 성능 향상을 얻을 수 있습니다. 디스크에 충분한 공간이 있다고 가정하면 더 적은 수의 물리적 디스크에서 필요한 처리량을 얻을 수 있으므로이 방법이 도움이 될 수 있습니다. 데이터베이스 서버의 로그 또는 템포 레이 영역과 같은 일부 항목은 쓰기 트래픽이 많이 발생하므로 RAID-1 또는 RAID-10 볼륨에 있어야합니다.

로그

로그 볼륨은 대부분 순차적 인 데이터 액세스 패턴을 특징으로하며 기본적으로 '이 데이터를이 블록에 쓰기'행을 따라 명령으로 구성된 링 버퍼입니다. 핵심 DBMS 엔진에 의해 생산자로 기록되고 소비자로 처리됩니다. 로그 리더 기능으로. 미러링 된 단일 쌍은 실제로 많은 로그 트래픽을 처리합니다.

읽기가 많은 시스템 및 파일 서버

데이터웨어 하우스와 같이 읽기가 많은 시스템에서는 하나 이상의 RAID-5 볼륨을 사용할 수 있습니다. 파일 서버에서 디스크 액세스는 대개 전체 파일 단위로 수행되므로 쓰기는 어쨌든 패리티 블록을 구성하는 대부분의 블록을 쓸 것입니다. 이 경우 RAID-5의 성능 패널티가 더 가벼워집니다.

과거에는 디스크 비용 절감이 상당했지만 지금은 문제가되지 않습니다.

후기 입 캐싱 및 RAID-5

SAN 또는 배터리 지원 캐시가있는 내부 RAID 컨트롤러에서 'Write-back'캐싱을 활성화 할 수 있습니다. 이렇게하면 쓰기를 캐시하고 애플리케이션에 제어를 반환합니다. I/O는 다음과 같습니다. 컨트롤러가 완료 한 것으로보고합니다. 그러나 데이터를 즉시 디스크에 쓸 필요는 없습니다.이 기능을 사용하면 RAID-5 패리티 읽기/쓰기 작업을 상당히 최적화하고 RAID-5x 볼륨에 대한 쓰기 성능 저하를 완화 할 수 있습니다.

그러나 이것은 여전히 ​​데이터 무결성 문제의 작은 위험을 수반합니다. 호스트 시스템은 이것이 사실이 아닐 때이 쓰기가 완료되었다고 들었습니다. 하드웨어 장애로 인해 데이터베이스 서버의 로그와 데이터 볼륨간에 데이터 불일치가 발생할 수 있습니다. 이러한 이유로 쓰기 저장 캐싱은 트랜잭션 시스템에 권장되지 않지만 ETL 프로세스와 같은 경우 성능이 향상 될 수 있습니다.

요약

디스크 공간 은 요즘 너무 저렴해서 트랜잭션 시스템은 로그 볼륨에 RAID-1 또는 RAID-10을, 데이터 볼륨에 RAID-10을 사용해야합니다. 물리적 디스크 크기는 데이터베이스보다 훨씬 클 수 있으며 RAID-10은 동일한 수의 디스크에 대해 더 많은 쓰기 처리량을 허용하여 잠재적으로 시스템을 지원하는 데 필요한 디스크 볼륨의 수를 줄입니다.

데이터웨어 하우스와 같은 경우에도 크고 색인이 많은 팩트 테이블로 공간을 씹을 수 있으므로 RAID-5 또는 RAID-50 데이터 볼륨으로 적은 가격으로 이익을 얻을 수 있습니다. 그러나 로그와 tempdb는 ETL 처리 중에 많은 작업을 수행하므로 RAID-10 볼륨에 계속 배치해야합니다. 그러나 디스크 비용 절감은 상당히 적을 수 있습니다.

글을 얼마나 많이 쓰는지에 따라 다릅니다.

상당히 가벼운 "웹 앱"이라면 RAID5에서 성능 저하를 볼 가능성이 거의 없습니다.

대용량 ETL이 포함 된 다중 GB 데이터웨어 하우스를 구축하는 경우 RAID 5의 쓰기 버퍼가 빠르게 오버플로되어 RAID 5의 "낮은 쓰기 성능"으로 곧바로 넘어갑니다.

모든 RAID5 쓰기는 최소 3 회의 쓰기 (CRC 계산 포함)를 발생시킵니다. 버퍼링 될 때 이것은 훌륭하고 빠릅니다 (작은 짧은 활동 버스트-단일 레코드 업데이트 및 삽입). 이것이 지속적인 쓰기 (대량 대량 삽입/업데이트) 인 경우이를 알 수 있습니다.

성능과 공간 사이의 균형입니다. RAID 10 (스트라이핑 드라이브 미러)은 성능과 복원력을 모두 제공하지만 용량은 50 % 감소합니다.

RAID5는 더 높은 용량, 좋은 읽기 성능을 제공하지만 낮은 (대용량) 쓰기 성능을 제공합니다.

3
Guy

글쎄, 그것은 당신의 결함/위험 허용 범위에 크게 의존합니다. RAID5에는 많은 문제 가 있습니다. 내 DB 서버에는 현재 두 개의 미러링 된 드라이브가 있으며,이를 확장하려면 더 많은 패리티 (예 : RAID6 또는 RAID10)를 사용합니다.

또한 애플리케이션의 가동 시간이 중요하다면 마스터-마스터 또는 핫 스페어 등 복제 기능이있는 두 개의 데이터베이스 서버를 사용하는 것이 좋습니다. RAID는 디스크 오류에만 도움이되지만 서버에서 잘못 될 수있는 것이 훨씬 더 많습니다. :)

3
mikl

짧은 대답 : 아니요.

긴 대답 : 데이터베이스가 매우 작거나 최소한의 요구 사항이 아니라면 아니요. 데이터 검색은 초당 디스크 I/O 작업에 크게 의존하며 스트라이핑 오버 헤드는 시간이 지남에 따라 디스크 액세스를 소모합니다. 특히 긴 쿼리 실행으로. 대부분의 데이터베이스는 RAID 10 스타일 설정에서 실행되거나 데이터 파티션이있는 특정 볼륨으로 실행됩니다. 예, RAID 10은 쓰기 비용이 들지만 읽기 성능 (올바른 설정)은 위로가됩니다.

2
Avery Payne

좋은 몇 가지 "왜 안 되는가"가이드의 경우, 이것은 제가 함께 일해온 Oracle DBA에게 항상 매우 인기가있었습니다.

레이드 파이브와의 전투- http://www.miracleas.com/BAARF/

2
Mark Regensberg

RAID 1, 이것이 제 최종 답변입니다.

원인:

미러링 된 쌍은 실패한 디스크에 대해 적절한 중복성을 제공하고 RAID는 마지막 디스크에서 계속 작동합니다.

미러링 된 쌍은 데이터와 인덱스를 신중하게 배치하면 읽기에 대한 I/O 성능이 향상됩니다 ... [힌트 : 데이터와 인덱스에 대해 별도의 볼륨을 사용하십시오]. 컨트롤러를 이중화하여 더 많은 성능을 얻을 수 있습니다.

2
ninegrid

좋은 쓰기 성능으로 중복성을 확보하기위한 권장 사항은 무엇입니까?

대용량 후기 입 캐시. 하드웨어 RAID 컨트롤러에서 RAM 또는 소프트웨어 RAID 솔루션에서 사용할 수있는 RAM) (예 : Linux의 MDADM의 경우 시스템 RAM을 늘리고 MDADM 풍선을 사용하여 다른 방법으로 사용)을 늘립니다. 사용하지 않는 시스템 RAM 쓰기 캐시).이 조언은 주어진 "large"값에 적용됩니다. 크기에 상관없이 쓰기 캐시를 채우면 별 차이가 없습니다.

1
David Hicks

실제로 OS 파일에서 데이터 파일, 로그 파일을 분리하는 것입니다. 로그는 순차적으로 쓰기 데이터에 많은 임의 읽기 및 일부 임의 쓰기가 발생합니다.

이러한 특성을 지원하는 RAID 구성을 구축하면 성능이 크게 향상됩니다.

RAID 1-미러링은 로그 파일에 적합합니다. Raid 10은 데이터 파일에 적합합니다. TempbDB와 백업을 별도의 드라이브로 분리하는 것도 살펴볼 가치가 있습니다. 파일 그룹을 추가하는 것은 성능을 높이는 또 다른 방법입니다. SAN과 관련하여 이것은 명확하지 않습니다. 각 LUN에 대해 특정 RAID 구성을 구축하는지 또는 스핀들 수에 의존하는지에 따라 다릅니다.

1
CPU_BUSY

최근 StackOverflow 블로그 기사 의 정신으로 이미 인터넷에서 사용 가능한 답변을 다시 표시해서는 안된다고 말하면서 this

RAID-5는 제공하는 중복성에서 고유하지 않으며 일부 대안보다 추가 디스크를 적게 사용하면서 수행합니다. 동일하거나 더 나은 중복성과 더 나은 쓰기 성능을 가진 다른 것을 선택할 수 있습니다.

0

RAID5에서 데이터베이스를 실행하는 것은 일반적으로 실수입니다. 필자는 쓰기가 거의없고 읽기 집약적 인 잘 엔지니어링 된 데이터베이스와 RAID5로 인한 "공간 낭비"가 정치적으로 실행 가능하지 않은 데이터베이스의 두 가지 경우에서만 수행되는 것을 확인했습니다.

RAID5는 트랜잭션 성능을 파괴합니다.

또한 RAID5를 고려하고 있다면 RAID6를 작동시킬 수 있는지 확인하십시오. 이론적 신뢰성은 훨씬 더 좋지만, 미성숙 한 구현으로 인해 실제 신뢰성이 종종 더 나빠집니다.

0
carlito