mysql如何处理现实世界中的大量连接?

时间:2012-06-26 18:29:44

标签: mysql connection scalability

我一直在研究这个问题,但没有得到令人信服的答案。

从mysql教程中,默认连接数小于200,并且只要你有足够的资源,就可以在Linux框中将max_connection_num设置为2000。我认为这个数字在现实世界部署中远远不够,因为可能有数百万人同时访问您的网站。

有几篇文章讨论如何优化以减少每个查询的时间成本。但他们都没有告诉我这个问题是由root引起的。我认为必须有一些机制,如队列,以防止大规模连接同时发生。否则你最终会得到“太连接”的例外。

任何人都有这方面的专业知识吗?谢谢。

3 个答案:

答案 0 :(得分:2)

有几种选择。

  1. Connection pooling
  2. 如你所说:排队。如果同时连接的客户端太多,则应用程序层应处理此异常,将请求置于休眠状态一小段时间后再次尝试。在如此高的交通环境中,通常应禁止持续超过几秒钟的请求。
  3. 通过replication和/或clustering
  4. 进行负载均衡

答案 1 :(得分:0)

通常,您的应用程序应该重用已建立的连接。但是,您选择实现应用程序的语言会带来一些限制。如果您使用Java或.Net,则可以拥有连接池。对于PHP情况并非如此,您可以查看this discussion

答案 2 :(得分:0)

如果超过max_connection_num,则会出现太多连接错误。但是,如果您的Web服务器上确实有100万用户同时使用,那么无论如何都无法处理一台服务器,100万并发连接确实需要一个非常大的服务器场来处理。

但是,数据库的客户端是一个webapp,webapp通常通过称为connection pool的抽象连接到数据库,这会限制客户端数据库的连接数量,只要所有数据库连接通过同一个池。