我在用PG调频帮助我使用 PostgreSQL 9.5 调整 Web 应用程序
一些背景信息 - 该 Web 应用是一个房地产搜索网站,白天最多有 200 名活跃用户执行相当复杂的基于位置的查询。GeoDjango 用于托管该网站。
我的问题是关于调整work_mem
和max_connections
。在 PGTune 中,我注意到当我增加 时max_connections
,建议work_mem
会减少。我有几个问题:
- 根据经验法则,您是否应该
max_connections
尽可能保持低水平,以便work_mem
释放更多资源,从而为每个单独的查询提供更好的性能? - 对于一个同时拥有最多 200 个活跃用户并不断执行查询的网站 -
max_connections
我应该拥有多少个查询? - 我目前设置
max_connections
为 500,而 PGTune 建议work_mem
的是 8388kB。是否值得减少max_connections
到 400 或 300,这样我就可以增加work_mem
?
答案1
我注意到,当我增加 max_connections 时,建议的 work_mem 会减少
PGTune 假设如果打开更多连接,那么将有更多查询同时运行,然后可能会分配更多倍数,但这种分配是动态发生的。实际上,这取决于发送到数据库的查询将执行的操作,而 PGTune 无法知道。和work_mem
之间没有硬依赖关系。max_connections
work_mem
由于您的数据库已经在生产中运行,因此您可以比 PGTune 更好地了解如何通过观察它来调整它。
查询是否使用磁盘上的临时存储?监控temp_files
并temp_bytes
pg_database。如果没有,你也不需要增加work_mem
。
服务器是否有大量可用内存?如果有,您可以增加内存work_mem
而不必担心max_connections
。
select count(*) from pg_stat_activity
与 相比,您实际拥有的连接数 ( ) 是多少max_connections
?如果您接近限制并且正在减少它,您的应用程序将无法连接。