2011-04-29 70 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都是必需的。

一個更好的選擇是創建一個沒有可能的烘烤值的值的索引,然後對其進行聚類。這應該會給你非常接近的東西,否則你會得到。