2011-04-29 67 views
1

我遇到的问题与密钥由一个字符(23)字段和两个时间戳字段组成的表。 char(23)字段包含Alpha-Numeric值。群集操作永远不会结束。我已经让它运行了24小时,但仍未完成。PostgreSQL - 群集永远不会完成 - 长键?

有没有人遇到过这种问题?我的理论是,长期关键领域的理由是否合理?我们已经处理了更多的没有长键的表,并且我们一直能够毫无问题地对它们执行数据库操作。这让我觉得在这种情况下它可能与密钥的大小有关。

+0

究竟是什么“聚类操作”?请向我们展示您正在运行的(完整)SQL。 – 2011-04-29 15:47:06

+0

多少行?字符(23)和两个时间戳不是很长' – 2011-04-29 16:20:35

+0

该表有大约7850万条记录。如前所述,它共有25个字段,包括涉及密钥的3个字段。它也有一个VARCHAR(64000)字段。我正在运行的查询是“cluster using ” – user731288 2011-04-29 17:58:55

回答

0

集群重写表,因此它必须等待锁。它可能永远不会获得它所需要的锁。你为什么设置varchar(64000)?为什么不只是不受限制的varchar?这个指数有多大?

如果大小是一个问题,它必须基于索引大小而不是密钥大小。我不知道烤过的关键属性对群集有什么影响,因为它们被移入扩展存储。 TOAST可能会使CLUSTER复杂化,我从来没有听说任何人在TOASTed属性上聚类。这样做没有多大意义。对于任何超过4k大小的属性,TOASTing都是必需的。

一个更好的选择是创建一个没有可能的烘烤值的值的索引,然后对其进行聚类。这应该会给你非常接近的东西,否则你会得到。