Postgresql Heroku超级用户查询阻止我获得AccessExclusiveLock。我怎样才能放下桌子?
我使用的是一个Heroku管理的psql数据库,它为生产流量提供服务。我想删除“Foo”表:Postgresql Heroku超级用户查询阻止我获得AccessExclusiveLock。我怎样才能放下桌子?,postgresql,heroku,Postgresql,Heroku,我使用的是一个Heroku管理的psql数据库,它为生产流量提供服务。我想删除“Foo”表: 删除表“Foo” 当然,此语句需要表“Foo”上的AccessExclusiveLock。我无法获取此锁,因为其他进程持有AccessSharedLock 通过查找持有锁的进程(使用查询),我能够识别两个在表Foo上持有AccessSharedLocks并阻止我的查询的进程。一是: WITH table_scans as ( SELECT relid, tables.idx_sc
删除表“Foo”代码>
当然,此语句需要表“Foo”上的AccessExclusiveLock。我无法获取此锁,因为其他进程持有AccessSharedLock
通过查找持有锁的进程(使用查询),我能够识别两个在表Foo上持有AccessSharedLocks并阻止我的查询的进程。一是:
WITH table_scans as (
SELECT relid,
tables.idx_scan + tables.seq_scan as all_scans,
( tables.n_tup_ins + tables.n_tup_upd + tables.n_tup_del ) as writes,
pg_relation_size(relid) as table_size
FROM pg_stat_user_tables as tables
),
all_writes as (
SELECT sum(writes) as total_writes
FROM table_scans
),
indexes as (
SELECT idx_stat.relid, idx_stat.indexrelid,
idx_stat.schemaname, idx_stat.relname as tablename,
idx_stat.indexrelname as indexname,
idx_stat.idx_scan,
pg_relation_size(idx_stat.indexrelid) as index_bytes,
indexdef ~* 'USING btree' AS idx_is_btree
FROM pg_stat_user_indexes as idx_stat
JOIN pg_index
USING (indexrelid)
JOIN pg_indexes as indexes
ON idx_stat.schemaname = indexes.schemaname
AND idx_stat.relname = indexes.tablename
AND idx_stat.indexrelname = indexes.indexname
WHERE pg_index.indisunique = FALSE
),
index_ratios AS (
查询的其余部分不可用,因为track_activity_query_size的设置无法在Heroku psql实例上更改
第二个是用户postgres运行的神秘查询。我无法在pg_stat_活动中查看此查询。相反,我看到的是
。我也无法从heroku pg:ps
中找到有关此查询的任何信息
我最好的猜测是,这要么是自动真空运行,要么是Heroku的度量生成查询
我可以使用pg\u terminate\u backend
终止(1)类型的查询,但它们会不断出现。我无法终止(2)类型的查询
我该怎么办?这些阻塞查询正在阻止我的
删除表请求。等待他们出来似乎不是一个可行的选择——我的请求已经被阻止了24小时。我直接向Heroku寻求帮助。事实上,问题在于长期存在的博士后自动真空。此过程由超级用户控制,Heroku用户无权访问超级用户
Heroku代表我采取了以下行动:
(1) 截断表格
(2) 关掉自动吸尘器
然后我可以放下桌子。我直接向Heroku寻求帮助。事实上,问题在于长期存在的博士后自动真空。此过程由超级用户控制,Heroku用户无权访问超级用户
Heroku代表我采取了以下行动:
(1) 截断表格
(2) 关掉自动吸尘器
然后我就可以放下桌子了