在队列MYSQL中运行查询

时间:2017-06-20 13:31:40

标签: php mysql innodb

我想知道一些对我的网站非常重要的东西,想象一下,如果我有数千名访问过该网站的用户,那么,当时可能有数千个查询可能同时运行,所以,Don&#39填充数据库池同时有数千个查询。所以,为了解决这个问题,如何在队列中运行MYSQL查询? 此外,我使用InnoDB作为MYSQL存储引擎,任何其他建议也表示赞赏。

3 个答案:

答案 0 :(得分:2)

问题不存在。

  • 正确编写的查询可以在眨眼间进出。
  • 你不会有成千上万的"用户同时实际执行查询。实际指标是"每分钟页数"。
  • 如果你要排队"查询,延迟会很糟糕,用户会转移到某个竞争网站。
  • 如果您遇到性能问题,几乎总是因为缺少索引,查询说法不当和/或架构设计不当。

另一种更合适的扩展方法是使用Replication允许多个只读Slave并让多个客户端(在其他服务上)通过负载均衡器命中这些Slave。例如,这就是雅虎处理流量的方式。而且每个房产只需要少量服务器(新闻,天气,体育,金融等)。你还处于那种规模吗?

答案 1 :(得分:0)

RDMS在内部处理查询队列。您可以使用缓存系统以增加响应时间并使用nosql数据库来扩展您的解决方案。另一方面,如果您的目的是限制访问者,则必须在应用程序端处理它。

答案 2 :(得分:0)

我建议您监控MySQL中的几个状态变量:

sudo pip3 install Scrapy -i https://pypi.douban.com/simple

Threads_connected 是当前连接并占用MySQL服务器中的线程的客户端数。通常,这是每个并发PHP请求一个(如果您正在使用PHP)。

Threads_running 是此时连接并实际执行查询的客户端数量。

您可能连接了数百个线程,但在任何给定时间只运行少量线程。这是因为PHP脚本在SQL查询之间运行代码。在此期间,MySQL连接仍处于打开状态,但在MySQL服务器中没有执行任何操作。这很正常。

您可能拥有数千名用户,但由于人们在点击某些内容以请求下一个网页之前通常会查看网页至少几秒钟,因此在页面浏览量之间会有一段时间您的网络服务器或者您的数据库服务器需要为给定用户执行任何操作。

因此,即使您拥有数千名用户,MySQL服务器也可以处理流量,因为只有极少数用户同时运行查询。