【发布时间】:2021-05-24 15:51:39
【问题描述】:
这是表架构:
CREATE TABLE public.page_by_category
(
id integer NOT NULL DEFAULT nextval('page_by_category_id_seq'::regclass),
page_id bigint NOT NULL,
category_id bigint NOT NULL,
weight integer NOT NULL,
CONSTRAINT id_pk PRIMARY KEY (id),
CONSTRAINT category_id_fkey FOREIGN KEY (category_id)
CONSTRAINT page_id_fkey FOREIGN KEY (page_id)
)
这是需要很长时间的查询:UPDATE page_by_category SET weight=0 3m 行。
查看 pg_stat_activity 这是结果:
30366 "2 days 18:32:12.141453" "user" "UPDATE page_by_category SET weight=0"
如何检查查询是否卡住?由于没有 IO,CPU 使用率很高...在我的 centos 上我使用的是 top,iotop 来查看是否使用了 cpu 或磁盘但仅占 5% 的使用率...
PostgreSQL 版本:""PostgreSQL 10.7 on x86_64-pc-linux-gnu"
【问题讨论】:
-
此查询不应需要 2 天才能运行。听起来可能存在某种僵局或争用。
-
如何检查是否有死锁?
-
@EmrahMehmedov:它可能“只是”一个 锁 而不是死锁(因为如果它是死锁,你会收到一条错误消息)
-
锁定问题出现在查询开始之前我猜?我可以看到查询没有被任何锁阻止...
-
该会话的
state列显示了什么?
标签: sql postgresql sql-update database-performance