当前位置:  开发笔记 > 编程语言 > 正文

在python工作流中调整Postgresql性能和内存使用

如何解决《在python工作流中调整Postgresql性能和内存使用》经验,为你挑选了0个好方法。

我使用Postgresql 9.4作为模型数据库.我的表看起来有点像这样:

CREATE TABLE table1 (
sid INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('table1_sid_seq'::regclass),
col1 INT, 
col2 INT,
col3 JSONB);

我的Python 2.7工作流通常如下所示:

curs.execute("SELECT sid, col1, col2 FROM table1")
data = curs.fetchall()
putback = []
for i in data: 
    result = do_something(i[1], i[2])
    putback.append((sid, result))
del data
curs.execute("UPDATE table1
              SET col3 = p.result
              FROM unnest(%s) p(sid INT, result JSONB)
              WHERE sid = p.sid", (putback,))

这通常可以很好地有效地工作.但是,对于大型查询,Postgresql内存使用有时会在UPDATE命令期间通过屋顶(> 50GB),我相信它正被OS X杀死,因为我得到了WARNING: terminating connection because of crash of another server process.我的Macbook Pro有16GB的RAM,有问题的查询有11M行,每行大约有100个字符要回写.

我的postgresql.conf:

default_statistics_target = 50
maintenance_work_mem = 512MB 
constraint_exclusion = on 
checkpoint_completion_target = 0.9
effective_cache_size = 4GB 
work_mem = 256MB 
wal_buffers = 16MB 
checkpoint_segments = 128 
shared_buffers = 1024MB 
max_connections = 80

所以我想知道

    为什么我的查询有时消耗过多的RAM?

    如何控制内存使用并仍能保证良好的性能?

    是否有一个很好的指导或工具来调整Postgresql?

更新:
我很确定@wildplasser查明了我的问题.在评论中,他建议首先将数据转储到数据库中,然后从那里解压缩.不幸的是,我无法弄清楚如何实施他的提议.如果有人知道如何做到这一点,他们的答案将很乐意接受.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有