我在 10 台使用 php-fpm 的服务器上每秒有大约 11000 次点击。我正在从 mysql 迁移到 postgres,所以我的问题是使用 pg_* p *connect有意义吗?
3 回答
最好使用像PgBouncer这样的专用连接池。
性能应该与 相当pg_pconnect
,但 PgBouncer将允许在 PHP 代码出错后执行清理。pg_pconnect
不会自动清理打开的事务、锁、准备好的语句等。
建立与 PostgreSQL 服务器的连接预计比与 MySQL 服务器的连接要昂贵得多。这是由于这些数据库在如何处理独立连接之间的资源分配和特权分离方面的不同设计选择。
因此,对于一个网站,尽可能重用与 PostgreSQL 的连接是完全有意义的。
通常推荐的方法不是使用pg_pconnect
,而是使用更适合此任务的外部连接池,如pgBouncer或pgPoolII 。但是,当使用 PHP-FPM 时,您已经有了一个中间件,可以让您通过 fpm 进程管理器选项以某种方式控制打开的连接数,因此它可能已经足够好了。您可以考虑设置pm.max_requests
为非零值,以确保以合理的频率清理连接,并避免在非高峰时间保留一堆未使用的连接。
好吧,pg_pconnect 意味着每个 PHP 后端有一个连接,所以这取决于你有多少个后端。使用传统的 Apache mod-php 设置,它不会启动,但您可能会侥幸成功。
数据库服务器可以处理数百个空闲连接,但如果它们都同时发出查询,几乎可以肯定会停止。我已经看到每个核心不超过两个连接的经验法则 - 这是假设 I/O 不会首先限制您。
常见的方法是运行一个像pgbouncer这样的连接池并让 php 连接每个请求。这可以减少您的连接开销,同时保持并发的合理性。