[英]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.