加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

对PostgreSQL数据库中的300万行缓慢的简单更新查询

发布时间:2020-12-13 16:37:52 所属栏目:百科 来源:网络整理
导读:我在Postegres 8.4上大概有3百万行的表上尝试一个简单的UPDATE表SET column1 = 0,但是它将永远完成。它已经运行超过10分钟。现在在我的最后一次尝试。 之前,我试图在该表上运行一个VACUUM和ANALYZE命令,我也试图创建一些索引(尽管我怀疑这将在这种情况下
我在Postegres 8.4上大概有3百万行的表上尝试一个简单的UPDATE表SET column1 = 0,但是它将永远完成。它已经运行超过10分钟。现在在我的最后一次尝试。

之前,我试图在该表上运行一个VACUUM和ANALYZE命令,我也试图创建一些索引(尽管我怀疑这将在这种情况下有任何区别),但没有一个似乎有帮助。

任何其他想法?

谢谢,
里卡多

更新:

这是表结构:

CREATE TABLE myTable
(
  id bigserial NOT NULL,title text,description text,link text,"type" character varying(255),generalFreq real,generalWeight real,author_id bigint,status_id bigint,CONSTRAINT resources_pkey PRIMARY KEY (id),CONSTRAINT author_pkey FOREIGN KEY (author_id)
      REFERENCES users (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,CONSTRAINT c_unique_status_id UNIQUE (status_id)
);

我试图运行UPDATE myTable SET generalFreq = 0;

看看这个话题: PostgreSQL slow on a large table with arrays and lots of updates

首先从更好的FILLFACTOR开始,做一个VACUUM FULL强制表重写,并检查HOT更新在您的UPDATE查询后:

SELECT n_tup_hot_upd,* FROM pg_stat_user_tables WHERE relname = 'myTable';

当你有很多记录更新时,HOT更新速度要快得多。有关HOT的更多信息,请参见本文:
http://pgsql.tapoueh.org/site/html/misc/hot.html

PS。你需要8.3或更好的版本。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读