PostgreSQL - кластеризация никогда не завершается - длинный ключ? - PullRequest
1 голос
/ 29 апреля 2011

У меня проблемы с кластеризацией таблицы, в которой ключ состоит из одного поля char (23) и двух полей TimeStamp. Поле char (23) содержит буквенно-цифровые значения. Операция кластеризации никогда не заканчивается. Я дал ему поработать 24 часа, а он все еще не закончился.

Кто-нибудь сталкивался с такой проблемой раньше? Имеет ли смысл моя теория о том, что причина в длинной ключевой области? Мы имели дело с гораздо большими таблицами, у которых нет длинных ключей, и мы всегда могли выполнять операции с БД над ними без каких-либо проблем. Это заставляет меня думать, что в этом случае это может быть связано с размером ключа.

1 Ответ

0 голосов
/ 21 марта 2013

Кластер переписывает таблицу, поэтому он должен ждать блокировок.Возможно, он никогда не получит нужную блокировку.Почему вы устанавливаете varchar (64000)?Почему бы не просто неограниченный varchar?И насколько велик этот индекс?

Если размер является проблемой, он должен основываться на размере index , а не на размере ключа.Я не знаю, как влияют атрибуты поджаренных ключей на кластер, потому что они перемещаются в расширенное хранилище.TOAST может усложнить CLUSTER, и я никогда не слышал, чтобы кто-нибудь кластеризовал атрибут TOASTed.Это не имеет большого смысла, чтобы сделать это.TOASTing необходим для любого атрибута размером более 4 КБ.

Лучшим вариантом является создание индекса для значений без значения, возможно, toasted, а затем кластеризация по нему.Это должно дать вам нечто очень близкое к тому, что вы получите в противном случае.

...