过去几周我一直在调整和搞乱PostgreSQL,我将在下一个项目中使用它。
我的规格是:
我尝试过的事情:
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错误日志中删除任何事务(通常过早关闭连接或资源暂时不可用 <或者< strong>抱歉,已经有太多客户通过PostgreSQL返回了。
我为php-fpm尝试了TCP / IP和unix套接字,而TCP / IP似乎比unix socket更具可扩展性。
PHP可以使用连接池吗?因为我从Web服务器调用数据库的方式仍然相同(与pgpool或pgbouncer建立了很多个人连接)。
我的目标是同时处理至少10,000个交易。决定因素是什么?它是web服务器与db(php-fpm)或PostgreSQL本身之间的瓶颈吗?通常,大公司(PHP Web应用程序)如何处理这样的卷?
答案 0 :(得分:5)
最佳负载测试是实际负载;越接近你的负载测试,就越好。
如果您有许多并发请求,则必须使用连接池,并且pgBouncer是标准答案。
在答案的范围内进行性能调整是不可能的,事实上这个问题可能会因为过于宽泛而被关闭,但我会给你一些一般的线索:
目标是找到瓶颈,即系统达到极限的资源。缩小范围:是应用程序,Web服务器还是数据库?一旦知道哪个组件限制了您,就找到个人限制资源。是I / O吗? CPU时间?记忆?建立数据库连接所需的时间?锁?
一个重要的规则是不在您知道问题所在之前随机开始旋转旋钮。这可能会给你一个配置错误的系统。找到理论,尝试解决方案,如果它没有达到预期的效果,将设置重置为之前的值。
我不明白你的设置:首先你说你有一台数据库机器和一台应用程序,然后你说你尝试了本地套接字连接。