一个数据库连接等于一个Web请求(当然,您的客户端会在每个请求中读取数据库)。通过使用连接池,可以预先创建这些连接,但仍然可以按请求使用它们。
现在有些数字 - 如果你谷歌搜索“Tomcat并发连接”或“Apache并发连接”,你会发现它们支持16000 - 20000并发连接没有任何问题。
另一方面,MySQL administrator best practices表示最大并发数据库连接数 4096 。
在快速搜索中,我找不到有关PostgreSQL的任何信息。
Q1 :PostgreSQL中的并发连接是否存在软件限制,而MySQL确实是4096
Q2。如果硬件和操作系统允许大量并发连接,我是否会遗漏某些内容,或者MySQL(或任何强加最大并发连接限制的数据库)将成为瓶颈?
更新: Q3 更高的连接数对性能的影响是多少?
答案 0 :(得分:3)
Q1:您设置了一个名为max_connections的配置参数。它可以设置在4096以上,但出于性能原因,建议你保持低得多。
Q2:您通常不需要那么多连接,如果限制数据库上并发查询的数量,事情会快得多。您可以在事务模式中使用类似pgbouncer的东西来通过较少的连接交错许多事务。
答案 1 :(得分:2)
Q2:您的网站上的用户数远远多于与数据库的连接数,因为每个用户都没有打开连接。用户只需要经常连接,然后只需要很短的时间。您的Web应用程序连接池通常远低于4096限制。
想想餐馆的比喻。餐厅可能有100个顾客(用户),但只有5个服务员(连接)。它的工作原理是因为客户每隔一段时间只需要一个服务员很短的时间。
出现问题的时间是所有100位客户举起手来说“请检查”,或者当所有16,000名用户同时点击“提交订单”按钮时。
答案 2 :(得分:0)
从您提供的链接到“MySQL管理员最佳做法”
“注意:连接占用内存,你的操作系统可能无法处理大量连接。用于Linux / x86的MySQL二进制文件允许你有多达4096个并发连接,但自编译的二进制文件通常具有较少的限制。 “
所以4096看起来像目前的最大值。请记住,限制是每台服务器,您可以拥有多个可用于提供查询的从属服务器。
http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-scaleout.html
答案 3 :(得分:0)
这有点偏离您的问题。但我认为你会发现这很有用。你并不总是为每个请求踢数据库。正确的缓存策略几乎总是可以应用于您的Web应用程序的最佳性能改进。许多静态内容可能会保留在缓存中,直到它明确更改为止。 this is how Wikipedia does it