簡體   English   中英

在postgres中改變表太慢了

[英]Alter Table too slow in postgres

我正在嘗試添加新列

ALTER TABLE "Cidade" ADD COLUMN "BoundBox" VARCHAR(255)

到這個表:

 "Cidade"
    "Id" integer not null
        constraint "Cidade_PK"
            primary key,
    "Nome" varchar(120),
    "EstadoId" integer not null
        constraint "Estado_Cidade_FK"
            references "Estado",
    "PontoCentralLatitude" numeric,
    "PontoCentralLongitude" numeric

但查詢永遠不會完成,我已經等了5分鍾,什么都沒發生。 該表只有5,000條記錄,我不能等待太多時間,因為它阻止了對表的訪問。 我有一個測試數據庫(等於生產),它工作得非常快。 postgres版本是9.5.6。

如果您正在運行PostgreSQL 9.6+,您可以使用pg_blocking_pids()來查找鎖定您的查詢的PID。

select pid, pg_blocking_pids(pid) as blocked_by, query as blocked_query
from pg_stat_activity
where pg_blocking_pids(pid)::text != '{}';

此語句非常快,但它需要訪問表上的獨占鎖。 必須有一個長時間運行的事務,它會鎖定表並阻止您。

使用pg_stat_activity視圖查找長事務。

根據你的描述,似乎這個表在系統中被高度使用,你的alter語言需要時間來獲取表上的鎖來完成這項工作。 嘗試找到一個窗口,您可以減少系統負載並運行。

如果沒有什么阻止您的查詢和查詢執行很長時間,並且此表有許多DELETE查詢嘗試清理您的表:

VACUUM (VERBOSE, ANALYZE) table_name;

坦克的幫助,這是一個阻止我的ALTER TABLE的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM