2011-04-29 4 views
1

키가 하나의 char (23) 필드와 두 개의 TimeStamp 필드로 구성된 테이블을 클러스터링하는 데 문제가 있습니다. char (23) 필드는 영숫자 값을 포함합니다. 클러스터링 작업이 완료되지 않습니다. 나는 그것을 24 시간 동안 계속하도록 두었고 아직 끝나지 않았다.PostgreSQL - 클러스터링이 완료되지 않음 - 긴 키?

이전에 이런 종류의 문제가 발생한 사람이 있습니까? 그 이유는 긴 핵심 분야가 합리적이라는 나의 이론 때문입니까? 우리는 긴 키가없는 더 큰 테이블을 다루었으며 우리는 항상 문제없이 DB 작업을 수행 할 수있었습니다. 그래서이 경우 키의 크기와 관련이 있다고 생각합니다.

+0

정확히 "클러스터링 작업"은 무엇입니까? 실행중인 (완전한) SQL을 보여주십시오. –

+0

행 수는 어떻게됩니까? char (23) 및 두 개의 타임 스탬프가 실제로 '길지 않다' –

+0

테이블에 약 7,850 만 개의 레코드가 있습니다. 이전에 설명한대로 키에 관련된 3 개의 필드를 포함하여 총 25 개의 필드가 있습니다. VARCHAR (64000) 필드도 있습니다. 내가 실행중인 쿼리는 "를 사용하는 클러스터"입니다. – user731288

답변

0

클러스터는 테이블을 다시 작성하여 잠금을 기다려야합니다. 필요로하는 잠금을 결코 얻지 못할 수도 있습니다. 왜 varchar (64000)를 설정하고 있습니까? 왜 무제한 varchar가 아닌가? 그리고이 지수는 얼마나 큽니까?

크기가 문제가되는 경우 키 크기가 아닌 색인 크기를 기반으로해야합니다. 토스트 된 키 속성의 효과가 확장 된 저장소로 이동하기 때문에 클러스터에 미치는 영향을 알지 못합니다. TOAST는 CLUSTER를 복잡하게 만들 수 있으며 TOASTed 속성에서 클러스터링하는 사람은 들어 본 적이 없습니다. 그렇게하는 것이별로 의미가 없을 것입니다. TOAST는 크기가 4k를 초과하는 모든 속성에 필요합니다.

더 좋은 옵션은 토스트 된 값이없는 값에 대한 인덱스를 만든 다음 클러스터링하는 것입니다. 그것은 당신에게 당신이 얻을 수있는 것과 아주 가까운 것을 줄 것입니다.

관련 문제