Postgresql
集群命令鎖定只讀查詢副本
我注意到集群可能需要很長時間並完全鎖定表,即使是讀取也是如此。
索引組織表和增量集群將是完美的,但遺憾的是 PostgreSQL 不支持它們。
現在我意識到它還鎖定了副本的表,所以顯然沒有辦法在沒有大量停機的情況下進行集群?
在主實例和副本實例上設置
rds.logical_replication
為1
沒有幫助。我想每週聚集四個大表以獲得更好的性能。
讓查詢在表被聚集(或 VACUUM FULL)時對錶進行操作的問題是,即使從使用者的角度來看是僅選擇的查詢,仍然可以以使用者不可見的方式寫入表,以設置提示位例如,在回滾事務後進行清理。
您可以設置兩個副本,一個在表集群操作開始之前已暫停重播,因此在 CLUSTER 期間對讀者開放,另一個允許正常重播。然後一旦 CLUSTER 完成,每個人都從暫停的副本切換到另一個,以便暫停的副本可以趕上。不過,您是否可以容忍使用落後數小時的副本是另一個問題。
有些項目會對錶進行線上集群,例如 pg_reorg 和pg_repack。它們不是 PostgreSQL 核心的一部分,但它們可能值得一看。我沒有在生產中使用它們,但主要是因為我對它們沒有生產需求。
另一種選擇是對錶進行分區。然後每個分區可以單獨重新集群,如果分區約束完成與集群相同的事情 - 為部分掃描生成更有效的 IO 模式,您可能根本不需要進行集群。