PHP、MySQL 和大量简单查询

Posted

技术标签:

【中文标题】PHP、MySQL 和大量简单查询【英文标题】:PHP, MySQL and a large nummer of simple queries 【发布时间】:2010-08-30 09:00:57 【问题描述】:

我正在实现一个应用程序,该应用程序将有很多客户端从我的网络服务器查询大量小数据包。现在我不确定是否使用持久数据连接到数据库。该数据库目前与网络服务器位于同一系统上,并且可以通过套接字进行连接,但这可能会在不久的将来发生变化。

据我所知,在 php 之前的几个版本中,mysqli_pconnect 已被删除,因为它的表现欠佳。与此同时,它似乎又回来了。

根据我的情况,我想我不会再有机会处理每分钟数千个查询,但要处理大量持久连接和每个连接只保留很少资源的 MySQL 配置,对吧?

感谢您的意见!

【问题讨论】:

请注意,共享持久连接的所有客户端也共享在其上创建的临时表(在连接完成之前临时表不会被回收)。 【参考方案1】:

测试时发生了什么?

有了世界上的巢穴,没有实用的方法可以传达人们在 SO 响应中提供明确答案所需的所有信息。但是通常在建立 mysql 连接时开销很小,特别是如果它与数据库客户端(在本例中为 web 服务器)驻留在同一系统上。如果您使用文件系统而不是网络套接字,则开销会更少。

因此,我建议您将所有数据库调用抽象化,这样您就可以轻松地在连接类型之间切换,但编写您的系统以使用按需连接,并确保您的代码尽快显式释放连接 - 然后看看它是如何实现的行为。

C.

【讨论】:

好的,谢谢!测试场景并不容易。我只想做好准备,而不是立即遇到问题。【参考方案2】:

Are PHP persistant connections evil?

问题是只能这样 主机之间有许多活动连接 “Apache”和主机“MySQL”

持久连接通常会导致您达到最大连接数的问题。此外,在您的情况下,它并没有带来很大的好处,因为您的数据库服务器位于同一主机上。暂时保持正常连接。

【讨论】:

【参考方案3】:

正如他们所说,您的情况可能会有所不同,但我从未有过使用 PHP 持久连接的良好体验,包括 MySQL 和 Oracle(ODBC 和 OCI8)。每次我测试它时,系统都无法重用连接。在高负载下,我最终达到了上限,而我有数百个空闲连接。

所以我的建议是你实际尝试一下,看看你的设置是否正确地重用了连接。如果它没有按预期工作,无论如何也不会造成太大损失:与其他 DBMS 相比,打开 MySQL 连接并不是特别昂贵。

此外,不要忘记在适当的时候重置所有相关设置(无论您更改什么会话值,它都会等待您下次建立连接并碰巧重用该连接)。

【讨论】:

以上是关于PHP、MySQL 和大量简单查询的主要内容,如果未能解决你的问题,请参考以下文章

哪个更快/更高效——大量的小 MySQL 查询或一个大的 PHP 数组?

为啥 PHP 使用大量内存来存储查询结果

如何使用 php 和 mysql 优化这个简单的数据库和查询?

在 MySQL 和 PHP 中使用多表和 LEFT JOIN 查询非常慢

MySQL介绍以及简单查询

php mysql 一个查询优化的简单例子