왜 파티션하지 않습니까?


10

언제 데이터베이스를 파티션하고 싶지 않습니까? ( MySQL 파티셔닝 생각 )

나의 경우에는

  • 수백만 행부터 시작하겠습니다.
  • 가장 빈번한 쿼리 제한 역할을하는 문자 필드의 기본 키입니다 (그리고 조회는 최소한 초당 1 회 이상).
  • 파티션 키 역할을하기 위해 기본 키가 해시됩니다.
  • 위에서 언급 한 빈번한 쿼리에서 가져온 모든 행이 업데이트됩니다.
  • 덜 빈번한 조회 (날짜 열 또는 기타 열에 대한)는 모든 파티션에 도달해야합니다.

마지막 시점에서도 조회가 병렬로 실행되지 않으므로 모든 경우에 이것이 승리 입니까? 파티셔닝의 단점은 무엇입니까? 적어도 백만 개 이상의 레코드를 볼 때 왜 모두가 기본적으로 사용하는 것이 아닌가?

업데이트-나는 zgguy의 답변을 선택했지만 나에게 매우 유용한 비슷한 질문에 대한 정말 좋은 답변에 대한 링크를 포함하여 내 연구 결과와 함께 내 자신의 답변을 추가했습니다.

답변:


5

성능 문제에 대한 은색 글 머리 기호가 없으며 분할도 마찬가지입니다.

모든 파티션은 본질적으로 자체 테이블입니다. 따라서 데이터베이스가 한 파티션에서만 행을 찾을 수 있도록 작성된 쿼리가 더 빨라집니다. 큰 전체 테이블을 스캔해야하지만 쿼리가 분할 된 테이블에서 하나의 파티션 만 스캔하도록 제한 할 수있는 쿼리에는 차이가 클 수 있습니다. 고유 한 키 조회의 경우 차이가 훨씬 작습니다.

그러나 데이터베이스가 모든 또는 대부분의 테이블 (인덱스) 파티션을 방문해야하는 방식으로 인덱스 조회를 사용하는 쿼리는 상당히 느리게 실행됩니다.

병렬 실행은 자체 주제입니다. 밤새 큰 일괄 처리를 실행하고 전체 작업을 수행하여 단일 작업을 수행하는 경우 병렬 처리가 좋습니다. 그러나 데이터베이스가 많은 동시 사용자의 쿼리를 지속적으로 제공하는 OLTP 시스템에서는 한 명의 사용자가 모든 리소스를 차지하지 않기를 원합니다.


PK 지수가 더 빠르기 때문에 고유 / 기본 키 조회는 실제로 크게 개선되지 않습니다 (있는 경우)? PK 지수가 느려질 때가 있습니까? 조회가 최근에 추가 된 PK로 왜곡되면 어떻게됩니까? PK를 기반으로 한 파티션 (파티션 키 알고리즘은 모듈러스 또는 유사하고 해시가 아닌 것이어야한다고 생각합니까?)?
chell

기본 / 고유 키 조회는 최소한의 성능 향상을 보게됩니다. 반면 DML 문의 경합을 줄이는 것이 목표 인 경우 DML이 소수에 집중되는 대신 모든 파티션에 균등하게 분산되도록 방식으로 분할해야합니다.
zgguy

10 일 후에 다시 돌아와서 미안하지만 요점을 밝힙니다. 파티션을 불필요하다고 생각할만한 충분한 이유를 제시 했지만 , 시나리오에는 모든 레코드를 읽은 후 (초당 몇 번) 업데이트하는 것이 포함됩니다. 너무 많은 쓰기가 필요한 경우 (분배가 균일 한) 파티션에 대해 더 확실한 사례가되므로 쓰기로드가 분산됩니까?
chell

또한 많은 파티션에 충돌하는 쿼리에 대한 귀하의 의견을 이해하려고합니다 (느린). 쿼리가 파티션 키로도 사용 (해시) 된 PK에 대한 쿼리 인 경우 DB가 조회의 해시를 기반으로 어떤 파티션으로 갈지 즉시 알지 못합니까? 도와 주셔서 감사합니다!
chell

최근에 스택 교환을 방문 할 수 없었습니다. 당신이 연결 한 대답은 훌륭합니다. 나는 그것이 당신의 두 질문에 모두 대답한다고 생각합니다.
zgguy

2

여기에 대한 답변 은 잘 작성되어 있으며 zgguy의 답변 과 비슷한 주장을 합니다. 파티셔닝은 기본 키 또는 이와 유사한 것으로 인해 가장 빈번한 조회가 가정되는 단일 머신 시나리오에 도움이되지 않습니다. 색인 된 조회는 속도가 빨라야합니다).

사실, 일반적인 조언은 분할의 주된 이유가 탄젠트이며 대부분 관리와 관련된 것입니다. 예를 들어 오래된 레코드를 너무 자주 제거해야하는 경우 날짜를 기준으로 데이터를 분리하십시오. 데이터가 대부분의 모든 쿼리가 최근에 추가 된 레코드에만 적중 할 경우 조회 성능에 도움이 될 수 있습니다.

또한 MySQL이 병렬로 아무것도하지 않는다는 언급을 보았습니다 (링크에 대한 자세한 설명이나 자세한 설명은 좋을 것입니다).

글쓰기 활동이 다른 고려 사항을 추가하는지 아닌지 말하는 사람은 없습니다.


글이 당신의 대답을 바꾸지 않는다고 생각합니다. 내가 찾은 4 가지 사용 사례 중 2 개를 언급했습니다 . 8.0에서도 병렬 처리는 없습니다.
Rick James

1

가장 먼저 염두에 두어야 할 것은 파티션 정리입니다 . 그렇지 않으면 쿼리에서 사용할 수있는 것이 아닙니다.

파티셔닝이 도움이되므로 테이블에서 많은 양의 데이터를 제거해야합니까? 오래되었지만 피터의이 게시물은 고려해야 할 몇 가지 사항이 있습니다.

그리고 생각할 수있는 또 다른 것은 간단한 테이블의 사용 편의성입니다. 파티셔닝에는 추가 작업과 유지 관리가 필요합니다.


최신 버전에는 명시 적으로 쿼리를 파티션으로 제한하는 구문이 있습니다. 나는 그런 것을 사용하는 유효한 이유를 생각할 수 없다.
Rick James
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.