PostgreSQL 性能调整和最大连接数(实际上)
PostgreSQL performance tuning and max connections (practically)
在过去的几周里,我一直在调优和处理 PostgreSQL,我将在我的下一个项目中使用它。
我的规格是:
- DigitalOcean 8 核 16GB SSD x2(一个用于数据库,另一个用于 Web)
- Centos 7
- PHP5, Nginx
我尝试过的事情:
Pgtune
PgBouncer & Pgpool(连接池和负载均衡)
调整 php-fpm 和 nginx (worker_processes, worker_connections,
pm.max_children 等)
Linux 文件句柄限制和套接字调整。
我正在通过使用 ApacheBench 调用要插入的网页来测试它。实用吗?
ab -n 17500 -c 1750 -r http://example.com/insert.php
到目前为止,我只能让它同时处理 1700-2000 个连接而不会丢失任何事务(通常是 过早关闭连接 或 资源暂时不可用 在 nginx 错误日志中或 抱歉,PostgreSQL 已经有太多客户端 return)。
我为 php-fpm 尝试了 TCP/IP 和 unix 套接字,TCP/IP 似乎比 unix 套接字更具可扩展性。
可以PHP使用连接池吗?由于我从 Web 服务器调用数据库的方式仍然相同(与 pgpool 或 pgbouncer 建立大量单独连接)。
我的目标是同时处理至少 10,000 笔交易。决定因素是什么? Web 服务器与数据库(php-fpm)或 PostgreSQL 本身之间是否存在瓶颈?通常,大公司(PHP 网络应用程序)如何处理这样的数量?
最好的负载测试是使用真实世界的负载;负载测试越接近越好。
如果你有很多并发请求,连接池是必须的,pgBouncer是标准答案。
不可能在答案范围内进行性能调优,事实上这个问题可能会因为太宽泛而被关闭,但我会给你一些一般性的线索:
目标是找到瓶颈,即您的系统处于极限的资源。缩小范围:是应用程序、Web 服务器还是数据库?一旦您知道是哪个组件限制了您,就可以找到个别的限制资源。是I/O吗? CPU时间?记忆?建立数据库连接所花费的时间?锁?
一个重要的规则是不要在你知道问题出在哪里之前随意开始转动旋钮。这很可能会给你一个配置错误的系统。找到一个理论,尝试一个解决方案,如果没有达到预期的效果,将设置重置为之前的值。
我不明白你的设置:首先你说你有一台用于数据库的机器和一台用于应用程序的机器,然后你说你尝试了本地套接字连接。
在过去的几周里,我一直在调优和处理 PostgreSQL,我将在我的下一个项目中使用它。
我的规格是:
- DigitalOcean 8 核 16GB SSD x2(一个用于数据库,另一个用于 Web)
- Centos 7
- PHP5, Nginx
我尝试过的事情:
Pgtune
PgBouncer & Pgpool(连接池和负载均衡)
调整 php-fpm 和 nginx (worker_processes, worker_connections, pm.max_children 等)
Linux 文件句柄限制和套接字调整。
我正在通过使用 ApacheBench 调用要插入的网页来测试它。实用吗?
ab -n 17500 -c 1750 -r http://example.com/insert.php
到目前为止,我只能让它同时处理 1700-2000 个连接而不会丢失任何事务(通常是 过早关闭连接 或 资源暂时不可用 在 nginx 错误日志中或 抱歉,PostgreSQL 已经有太多客户端 return)。
我为 php-fpm 尝试了 TCP/IP 和 unix 套接字,TCP/IP 似乎比 unix 套接字更具可扩展性。
可以PHP使用连接池吗?由于我从 Web 服务器调用数据库的方式仍然相同(与 pgpool 或 pgbouncer 建立大量单独连接)。
我的目标是同时处理至少 10,000 笔交易。决定因素是什么? Web 服务器与数据库(php-fpm)或 PostgreSQL 本身之间是否存在瓶颈?通常,大公司(PHP 网络应用程序)如何处理这样的数量?
最好的负载测试是使用真实世界的负载;负载测试越接近越好。
如果你有很多并发请求,连接池是必须的,pgBouncer是标准答案。
不可能在答案范围内进行性能调优,事实上这个问题可能会因为太宽泛而被关闭,但我会给你一些一般性的线索:
目标是找到瓶颈,即您的系统处于极限的资源。缩小范围:是应用程序、Web 服务器还是数据库?一旦您知道是哪个组件限制了您,就可以找到个别的限制资源。是I/O吗? CPU时间?记忆?建立数据库连接所花费的时间?锁?
一个重要的规则是不要在你知道问题出在哪里之前随意开始转动旋钮。这很可能会给你一个配置错误的系统。找到一个理论,尝试一个解决方案,如果没有达到预期的效果,将设置重置为之前的值。
我不明白你的设置:首先你说你有一台用于数据库的机器和一台用于应用程序的机器,然后你说你尝试了本地套接字连接。