【问题标题】:Database concurrent connections in regard to web (http) requests and scalability关于 Web (http) 请求和可扩展性的数据库并发连接
【发布时间】:2011-04-13 14:50:17
【问题描述】:

一个数据库连接等于一个 Web 请求(当然,如果您的客户端在每个请求上读取数据库)。通过使用连接池,这些连接是预先创建的,但它们仍为每个请求使用一个。

现在来看一些数字 - 如果您在 Google 上搜索“Tomcat 并发连接”或“Apache 并发连接”,您会发现它们支持 16000-20000 并发连接没有任何问题。

另一方面,MySQL administrator best practices 表示最大并发数据库连接数是 4096

通过快速搜索,我找不到任何关于 PostgreSQL 的信息。

Q1:PostgreSQL 中的并发连接是否有软件限制,MySQL 确实是 4096 的限制

Q2.如果硬件和操作系统允许大量并发连接,我是否遗漏了什么,或者 MySQL(或任何施加最大并发连接限制的数据库)将成为瓶颈?

更新:第 3 季度较高的连接数究竟对性能有何负面影响?

【问题讨论】:

  • 想知道你以后是否找到了更多关于这方面的信息,如果你在这里写一个答案会很有帮助。

标签: mysql database postgresql scalability


【解决方案1】:

Q2:您的网站上的用户可能比连接到数据库的用户多得多,因为每个用户都不会打开连接。用户只需要经常连接,而且只需要很短的时间。您的网络应用程序连接池通常会远远少于 4096 限制。

想一个餐馆的比喻。一家餐厅可能有 100 个顾客(用户),但只有 5 个服务员(连接)。它之所以有效,是因为客户只需要每隔很短的时间提供服务员。

出现问题的时间是所有 100 名客户都举手并说“请检查”,或者所有 16,000 名用户同时点击“提交订单”按钮。

【讨论】:

  • 这就是为什么我说apache支持20,000个并发连接,如果发生这种情况,mysql就会成为瓶颈
【解决方案2】:

从您提供的链接到“MySQL 管理员最佳实践”

"注意:连接占用内存,您的操作系统可能无法处理大量连接。Linux/x86 的 MySQL 二进制文件允许您拥有多达 4096 个并发连接,但自编译二进制文件的限制通常较小。 "

所以 4096 似乎是当前的最大值。请记住,每个服务器都有限制,您可以拥有多个可用于提供查询的从属服务器。

http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-scaleout.html

【讨论】:

    【解决方案3】:

    Q1:您设置了一个名为 max_connections 的配置参数。 可以设置为远高于 4096,但出于性能原因,绝对建议您将其设置为远低于此值。

    Q2:您通常不需要那么多连接,如果您限制数据库上并发查询 的数量,事情会快很多。您可以在事务模式下使用 pgbouncer 之类的东西,在更少的连接上交错许多事务。

    【讨论】:

    • 你确定吗(Q1)。因为手册听起来很清楚。另外,如果我增加 max_connections,性能下降的确切原因是什么
    • @Bozho:Magnus 正在谈论 PostgreSQL。您可以为 PostgreSQL 使用超过 4096 个连接,但您会看到巨大的性能损失。每个连接都将在它自己的进程中运行,你需要很多处理器核心来处理这么多进程。如果需要这么多并发连接,最好使用连接池。
    • 连接池在哪里?在客户端,连接池是通过预先创建连接来完成的。
    【解决方案4】:

    The Wikipedia Study Case

    • 高峰期每秒 30 000 个 HTTP 请求
    • 3 Gbit/s 的数据流量
    • 3 个数据中心:坦帕、阿姆斯特丹、首尔
    • 350 个服务器,介于 1x P4 到 2x Xeon Quad- 核心,0.5 - 16 GB 内存
    • ...由 ~ 6 人管理

    这有点离题了。但我认为你会发现这很有用。您并不总是为每个请求踢数据库。正确的缓存策略几乎总是可以应用于 Web 应用程序的最佳性能改进。许多静态内容可能会保留在缓存中,直到它显式更改。 this is how Wikipedia does it.

    【讨论】:

    • 当然,我会使用缓存。但我只是想知道如果 20,000 个(因此不可缓存数据)用户同时出现,mysql 将成为问题。
    • @Bozho:好的,我明白了。这使它更加离题:P.希望它对你有帮助:)
    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2017-07-24
    • 2012-02-05
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多