0

我已经研究了一段时间,但没有得到令人信服的答案。

在mysql教程中,默认连接数小于200,它说只要你有足够的资源,在Linux机器中max_connection_num可以设置为2000。我认为这个数字在实际部署中还远远不够,因为可能有数百万人同时访问您的网站。

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

有人在这方面有一些专业知识吗?谢谢你。

4

3 回答 3

2

有几种选择。

  1. 连接池
  2. 正如你提到的:排队。如果同时连接的客户端太多,那么应用层应该处理这个异常,让请求休眠一小段时间,然后再试一次。在如此高流量的环境中,通常应该禁止持续超过几秒钟的请求。
  3. 通过复制和/或集群实现负载平衡
于 2012-06-26T20:44:39.783 回答
0

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

于 2012-06-26T18:38:13.893 回答
0

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

但是,您的数据库的客户端是一个 webapp,该 webapp 通常通过称为连接池的抽象连接到数据库,只要所有数据库连接都通过相同的连接池,它就会限制客户端与数据库的连接数水池。

于 2012-06-26T18:39:30.900 回答