PostgreSQL 性能调整和最大连接数(实际上)

标签 postgresql sockets nginx pgpool pgbouncer

在过去的几周里,我一直在调优和处理 PostgreSQL,我将在我的下一个项目中使用它。

我的规范是:

  • DigitalOcean 8 核 16GB SSD x2(一个用于数据库,另一个用于 Web)
  • Centos 7
  • PHP5 , Nginx

我尝试过的事情:

  1. Pgtune

  2. PgBouncer & Pgpool(连接池和负载均衡)

  3. 调整 php-fpm 和 nginx(worker_processes、worker_connections、 pm.max_children 等)

  4. Linux 文件句柄限制和套接字调整。

我正在通过使用 ApacheBench 调用要插入的网页来测试它。实用吗?

ab -n 17500 -c 1750 -r http://example.com/insert.php

到目前为止,我只能让它同时处理 1700-2000 个连接而不会丢失任何事务(通常是 过早关闭连接资源暂时不可用 在 nginx 错误日志或 < strong>抱歉,太多的客户已经通过 PostgreSQL 返回)。

我为 php-fpm 尝试了 TCP/IP 和 unix 套接字,TCP/IP 似乎比 unix 套接字更具可扩展性。

PHP可以使用连接池吗?因为我从 Web 服务器调用数据库的方式仍然相同(与 pgpool 或 pgbouncer 建立大量单独连接)。

我的目标是同时处理至少 10,000 笔交易。决定因素是什么? Web 服务器与 db (php-fpm) 或 PostgreSQL 本身之间是否存在瓶颈?通常,大公司(PHP 网络应用程序)如何处理这样的数量?

最佳答案

最好的负载测试是使用真实世界的负载;负载测试越接近越好。

如果你有很多并发请求,连接池是必须的,pgBouncer是标准答案。

在答案的范围内进行性能调整是不可能的,事实上这个问题可能会因为太宽泛而被关闭,但我会给你一些一般性的线索:

目标是找到瓶颈,即您的系统处于极限的资源。缩小范围:是应用程序、Web 服务器还是数据库?一旦您知道是哪个组件限制了您,就可以找到个别的限制资源。是输入/输出吗?处理器时间?内存?建立数据库连接所花费的时间?锁?

一个重要的规则是不要在您知道问题出在哪里之前随机开始转动旋钮。这很可能会给你一个配置错误的系统。找到一个理论,尝试一个解决方案,如果没有达到预期的效果,将设置重置为之前的值

我不明白你的设置:首先你说你有一台用于数据库的机器和一台用于应用程序的机器,然后你说你尝试了本地套接字连接。

关于PostgreSQL 性能调整和最大连接数(实际上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43038985/

相关文章:

postgresql - 如何删除 PostgreSQL 列中 ',' 之后的所有内容

javascript - 使用 Sequelize 获取 "TypeError: Cannot read property ' findAll' of undefined"

java - Java Play! 是否有审计工具?框架

ssl - Nginx 没有正确转发我的 SSL WebSockets 连接?

ruby-on-rails - Rails 中的弱 ETAG?

postgresql - 执行动态 sql 未设置在 psql 中找到

c - 通过套接字传输压缩文件?

linux - Unix vs BSD vs TCP vs Internet 套接字?

java - Java套接字将多个对象发送到同一服务器

api - 如何根据代理响应有条件地在 nginx 中提供静态文件?