programing

테이블을 분할하기에 좋은 크기(행 수)는 무엇입니까?

skycolor 2023. 10. 19. 22:09
반응형

테이블을 분할하기에 좋은 크기(행 수)는 무엇입니까?

400만 줄짜리 테이블이 있다면요

이가 입니다.STATUS다음 값을 가정할 수 있는 필드:TO_WORK,BLOCKED아니면WORKED_CORRECTLY.

한 번만(대부분 to_work에서 work로 올바르게) 변경되는 필드에서 파티션을 분할하시겠습니까?몇 개의 파티션을 만들겠습니까?

파티션의 절대 행 수는 가장 유용한 메트릭이 아닙니다.테이블이 커짐에 따라 안정적이고 파티셔닝의 잠재적인 이점을 제공하는 열이 진정으로 필요합니다.가용성, 테이블 공간 관리 및 성능 등이 여기에 해당합니다.

예를 들어 예제 열에는 세 개의 값이 있습니다.즉, 세 개의 파티션을 가질 수 있으며 세 개의 테이블스페이스를 가질 수 있습니다.따라서 테이블 공간이 손상되면 데이터의 3분의 1을 잃게 됩니다.파티셔닝을 통해 테이블을 좀 더 쉽게 사용할 수 있게 되었습니까?사실 그렇지 않아요.

파티션을 추가하거나 삭제하면 대용량 데이터를 보다 쉽게 관리할 수 있습니다.하지만 당신은 모든 을 삭제할 가능성이 있습니까?WORKED_CORRECTLY 리가 없는데요 그럴 가능성은 거의.파티셔닝을 통해 테이블을 보다 쉽게 관리할 수 있게 되었습니까?사실 그렇지 않아요.

파티셔닝의 성능 이점은 쿼리 프루닝에서 얻을 수 있으며, 여기서 최적화자는 테이블의 청크를 즉시 할인할 수 있습니다.이제 각 파티션에는 130만 개의 행이 있습니다.그래서 당신이 질문을 해도.STATUS='WORKED_CORRECTLY'아직 우승해야 할 기록이 엄청나게 많습니다.또한 STATUS를 포함하지 않는 모든 쿼리는 분할되지 않은 테이블에 대해 수행한 것보다 성능이 떨어질 가능성이 있습니다.파티셔닝을 통해 테이블 성능이 향상되었습니까?아마 아닐 것입니다.

지금까지는 당신의 파티션이 균등하게 분포되어 있다고 가정해 왔습니다.하지만 당신의 마지막 질문은 그렇지 않다는 것을 보여줍니다.모든 행이 아닌 경우 대부분의 행이 끝납니다.WORKED_CORRECTLY 더 됩니다 따라서 다른 파티션에 비해 파티션의 크기가 커지게 되며, 파티션 분할로 인한 이점의 가능성은 훨씬 더 멀어지게 됩니다.

마지막으로 제안한 계획이 탄력적이지 않습니다.현재 볼륨으로 각 파티션에는 130만 개의 행이 있습니다.테이블이 총 4,000만 행으로 늘어나면 각 파티션에는 1,330만 행이 저장됩니다.큰일이네요.

그렇다면 파티션 키에 적합한 후보는 무엇일까요?많은 파티션을 생성하는 파티션, 크기가 거의 동일한 파티션, 키의 값이 변경될 가능성이 낮은 파티션, 값이 기본 개체의 수명 주기에서 어느 정도 의미를 갖는 파티션, 마지막으로 테이블에 대해 실행되는 쿼리에서 유용한 파티션 등이 있습니다.

이러한 이유로 DATE_CREATED와 같은 제품이 데이터 웨어하우스에서 사실 테이블을 파티셔닝할 때 널리 사용되는 제품입니다.세분화 범위(일, 월 또는 연도가 일반적인 선택 사항임)에 걸쳐 상당한 수의 파티션을 생성합니다.주어진 시간 내에 생성된 레코드의 수는 대략 동일합니다.데이터 로딩 및 데이터 아카이빙은 일반적으로 사용 기간(즉, 생성일)을 기준으로 수행됩니다.BI 쿼리는 거의 항상 TIME 차원을 포함합니다.

테이블의 행 수는 일반적으로 테이블 분할 여부 및 분할 방법을 결정하는 데 사용하기에 좋은 메트릭이 아닙니다.

어떤 문제를 해결하려고 합니까?쿼리 성능을 향상시키고자 하십니까?데이터 로드 성능?데이터를 삭제하는 성능은?

쿼리 성능을 개선하고자 하는 경우를 가정해 보십시오.모든 쿼리에 술어가 있습니까?STATUS칼럼?그들은 한 줄로 된 행 검색을 하고 있습니까?아니면 쿼리에서 전체 파티션을 검색하시겠습니까?

언급URL : https://stackoverflow.com/questions/6885924/what-is-a-good-size-of-rows-to-partition-a-table-to-really-benefit

반응형