postgresql autovacuum 进程CPU占用高,而且analyze进程一直在执行不结束

postgresql autovacuum 进程CPU占用高,而且analyze进程一直在执行不结束,第1张

在某些情况下,最好是把autovacuum关掉,因为postgresql.conf中,你看到autovacuum前面加了#号,但其实是默认设置为开启。而且这个vacuum是对所有的数据库进行vacuum,如果有那么一个数据库中table多,count也多,那就导致cpu超高,而且持续时间老长。

想要结束这样的情况,就只有对经常使用的database进行vacuum,且设定自动的时间最好是数据库使用不多的时间段,比如半夜。

在进行vacuum时,耗资源耗内存,有时候还会锁死,所以analyze想要的结果,当然耗时就增加。个人观点仅供参考

1.使用EXPLAIN

EXPLAIN命令可以查看执行计划,在前面的blog中已经介绍过。这个方法是我们最主要的调试工具。

2.及时更新执行计划中使用的统计信息

由于统计 信息不是每次 *** 作数据 库 都 进 行更新的,一般是在 VACUUM 、 ANALYZE 、 CREATE INDEX等DDL执行的时候会更新统计信息,

因此执 行 计 划所用的 统计 信息很有可能比 较 旧。 这样执 行 计 划的分析 结 果可能 误 差会 变 大。

以下是表tenk1的相关的一部分统计信息。

SELECT relname, relkind, reltuples, relpages

FROM pg_class

WHERE relname LIKE 'tenk1%'

relname | relkind | reltuples | relpages

----------------------+---------+-----------+----------

tenk1 | r | 10000 | 358

tenk1_hundred | i | 10000 | 30

tenk1_thous_tenthous | i | 10000 | 30

tenk1_unique1 | i | 10000 | 30

tenk1_unique2 | i | 10000 | 30

(5 rows)

其中 relkind是类型,r是自身表,i是索引index;reltuples是项目数;relpages是所占硬盘的块数。

3.明确用join来关联表

一般写法:SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id

如果明确用join的话,执行时候执行计划相对容易控制一些。

例子:

SELECT * FROM a CROSS JOIN b CROSS JOIN c WHERE a.id = b.id AND b.ref = c.id

SELECT * FROM a JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id)

4.关闭自动提交(autocommit=false)

5.多次插入数据是用copy命令更有效率

我们有的处理中要对同一张表执行很多次insert *** 作。这个时候我们用copy命令更有效率。因为insert一次,其相关的index都要做一次,比较花费时间。

6.临时删除index

有时候我们在备份和重新导入数据的时候,如果数据量很大的话,要很几个小时才能完成。这个时候可以先把index删除掉。导入在建index。

7.外键关联的删除

如果表的有外键的话,每次 *** 作都没去check外键整合性。因此比较慢。数据导入后在建立外键也是一种选择。

8.增加maintenance_work_mem参数大小

增加这个参数可以提升CREATE INDEX和ALTER TABLE ADD FOREIGN KEY的执行效率。

9.增加checkpoint_segments参数的大小

增加这个参数可以提升大量数据导入时候的速度。

10.设置archive_mode无效

这个参数设置为无效的时候,能够提升以下的 *** 作的速度

・CREATE TABLE AS SELECT

・CREATE INDEX

・ALTER TABLE SET TABLESPACE

・CLUSTER等。

11.最后执行VACUUM ANALYZE

表中数据大量变化的时候建议执行VACUUM ANALYZE。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9940253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存