PostgreSQL - кластеризация никогда не завершается - длинный ключ?
У меня проблемы с кластеризацией таблицы, в которой ключ состоит из одного поля char(23) и двух полей TimeStamp. Поле char(23) содержит буквенно-цифровые значения. Операция кластеризации никогда не заканчивается. Я дал ему поработать 24 часа, а он все еще не закончился.
Кто-нибудь сталкивался с такой проблемой раньше? Имеет ли смысл моя теория о том, что причина в длинной ключевой области? Мы работали со значительно большими таблицами, у которых нет длинных ключей, и мы всегда могли выполнять операции с БД над ними без каких-либо проблем. Это заставляет меня думать, что это может иметь отношение к размеру ключа в этом случае.
1 ответ
Кластер переписывает таблицу, поэтому он должен ждать блокировок. Возможно, он никогда не получит нужную блокировку. Почему вы устанавливаете varchar(64000)? Почему не просто неограниченный varchar? И насколько велик этот показатель?
Если размер является проблемой, он должен основываться на размере индекса, а не на размере ключа. Я не знаю, как влияют атрибуты поджаренных ключей на кластер, потому что они перемещаются в расширенное хранилище. TOAST может усложнить CLUSTER, и я никогда не слышал, чтобы кто-нибудь кластеризовал атрибут TOASTed. Это не имеет большого смысла, чтобы сделать это. TOASTing необходим для любого атрибута размером более 4К.
Лучшим вариантом является создание индекса для значений без возможного значения с тостами, а затем кластеризация по нему. Это должно дать вам нечто очень близкое к тому, что вы получите в противном случае.