【问题标题】:I'm confused about concurrent MySQL connections我对并发 MySQL 连接感到困惑
【发布时间】:2011-03-20 14:04:27
【问题描述】:

所以,我在 Mysql 中读了一本书,它说有多少并发用户可以访问数据库。

这是否意味着如果我有 20k 用户同时浏览我的 Web 应用程序,我的 Web 应用程序将无法将数据加载到我的数据库中?因为每次我的网站加载时,我的 Web 应用程序都会访问数据库。

【问题讨论】:

  • 据我所知,Linux 和 Solaris 只能同时处理 10K 连接。您需要研究平衡服务器,并且可能最终会使用 HAProxy 在数据库之间进行平衡。
  • 即使您的 mysql 可以同时连接 20k - 它也无法处理所有查询。
  • 我同意你的观点,但我只是在回答这个问题,也许有时它会对更有经验的人有所帮助。
  • @Pentium10: 呵呵 ;-) 好的。
  • 我想知道大型网站如何处理雅虎或谷歌等并发连接。只是为了学术目的..

标签: mysql


【解决方案1】:

20k 用户同时加载一个页面 ?这相当多——而且您的网络服务器本身可能不会接受那么多并发请求(例如,Apache 通常只接受 200 到 400 个并行请求)

连接限制是同时连接到您的数据库的最大用户数 -- 如果每个页面需要 100 毫秒来生成,则一个用户将只能连接小于 100 毫秒。
如果您在需要执行第一个 SQL 查询时连接到数据库,并在最后一个 SQL 查询后立即断开连接,这可以减少您的 Web 服务器连接到数据库的时间。

如果您有用户阅读您网站上的内容,您可以考虑他们会:

  • 加载页面(在您的服务器上可能需要 100 毫秒)
  • 除了阅读几分钟之外什么都不做(这绝对不会占用您服务器上的资源)


作为旁注:在获得 20k 并发连接之前很长一段时间(这意味着大约每秒 20,000 个连接!),您可能必须处理几个与缩放相关的问题...

【讨论】:

  • 这完全取决于数据库查询是否需要时间。有些网站设计得非常糟糕,以至于每次点击都会产生一个(或多个)数据库查询,而且查询速度很慢。在这样的网站上,您可以轻松地达到几乎与并发用户一样多的数据库并发请求。
  • 这与应用程序执行的查询有关吗?即假设我的主机最多支持 25 个并发连接,而​​我只有一个用户,但应用程序执行了大约 75 个 MySQL 查询。
【解决方案2】:

如果您在尝试连接到 mysqld 服务器时收到Too many connections 错误,这意味着所有可用连接都被其他客户端使用。

允许的连接数由max_connections 系统变量控制。它的默认值是100。如果需要支持更多的连接,你应该为这个变量设置一个更大的值。

您应该要求您的系统管理员仅在必要时进行这些更改。

【讨论】:

  • 由于 MySQL 带有许多预配置的 ini 文件,要确定您正在使用哪个 ini 文件并且需要更改(在 windows 中),请右键单击 MySQL 服务并选择属性。 path 属性会告诉你正在使用哪个 ini 文件。
【解决方案3】:

对我来说,我认为至少这是不可能的,因为执行/处理时间是以毫秒为单位计算的

【讨论】:

    【解决方案4】:

    阅读后我发现了这个sn-p

    20.000 个并发用户是 20.000 个并发数据库查询...一个用户 阅读您网站上的帖子,应该 不计入并发用户 号码... 他登录到您的 网站,但他不需要任何东西 从数据库...现在,如果他点击 在一个链接中,数据库将执行一个 查询,然后,这个用户应该是 计入并发用户 数字...仅当 20.000 个用户点击时 在您网站上的某个地方 TIME 你将有 20.000 个并发 用户

    【讨论】:

      【解决方案5】:

      数据库非常适合瓶颈。如果您的服务器上有如此大的流量,您应该关注降级到数据库的连接数。页面和数据缓存可以在这件事上创造奇迹 - 在我的情况下它确实......

      【讨论】:

        【解决方案6】:

        假设您有一个标准的 Web 应用程序架构,后面有一个数据库,而 Web 服务器从数据库中获取数据,那么 Web 服务器的每个实例通常都是一个数据库用户。

        从您的应用程序的角度来看,每个远程用户都是一个用户,但从数据库的角度来看,您的应用程序是一个用户。

        从 Web 服务器的角度来看,重要的性能数字是每秒被要求执行的操作数。例如,如果您有一个博客网站,那么用户通常会在两次点击之间阅读一分钟,那么 10,000 个活跃用户可能会产生每秒 10,000 / 60 = 166 个请求的请求率,这通常在 Apache 的能力范围内。 (您必须从 Web 服务器的角度考虑应用程序的性能组合:CPU 时间、网络带宽、磁盘带宽、内存消耗……以更完整和准确地了解 Web 应用程序在单个 Web 服务器。)

        如果您有足够的负载,因此您需要多个 Web 服务器,例如前面有一个负载平衡器,那么每个 Web 服务器都是一个数据库用户。如果您已经扩展到需要 10,000 台 Web 服务器来为您的客户群提供服务的地步,那么您通常不得不求助于其他技术来解决其他数据库性能扩展问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-18
          • 1970-01-01
          • 1970-01-01
          • 2010-09-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多