首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL数据库中处理并发查询?

问如何在MySQL数据库中处理并发查询?
EN

Stack Overflow用户
提问于 2011-02-13 05:41:00
回答 3查看 20.5K关注 0票数 11

我正在使用MySQL数据库,我想知道如果我同时进行多个(500个或更多)查询,以便从多个表中获取信息,如何处理这些查询?顺序的还是并行的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-13 08:36:34

查询总是在多个会话(即客户端连接)之间并行处理。单个连接上的所有查询都会一个接一个地运行。可以根据可用的服务器资源配置多个连接之间的并行级别。

通常,一些操作在各个查询会话之间受到保护(称为事务)。InnoDB后端支持这些操作,但不支持MyISAM表(但它支持一个称为原子操作的概念)。隔离级别各不相同,不同之处在于操作彼此之间受到保护(以及一个并行事务中的操作如何影响另一个并行事务)及其性能影响。

有关general中的事务和MySQL中的实现的更多信息,请阅读。

票数 13
EN

Stack Overflow用户

发布于 2011-02-13 16:44:16

每个连接一次最多只能运行一个查询,并且在单个线程中执行。服务器为每个查询打开一个线程。

通常情况下,希望查询不会相互阻塞。但是,根据引擎和查询的不同,它们可能会。在MySQL中有很多锁定,这在手册中有一些详细的讨论。

但是,如果它们不互相阻止,它们仍然可以通过消耗资源来降低彼此的速度。IO操作是这些速度减慢的一个特殊来源。如果您的数据无法装入内存,那么您应该真正地将并行查询的数量限制在IO子系统可以处理的范围内,否则情况会变得非常糟糕。测量是关键。

我通常会说,如果一次运行500个查询(而不是等待锁),您可能无法从硬件中获得最佳价值(您有500个内核吗?有多少线程在等待IO?)

票数 5
EN

Stack Overflow用户

发布于 2011-02-13 08:38:28

正常情况下,所有查询都将并行运行。

但是..。但也有一些例外。根据您的事务隔离级别,可以在更新时锁定一行。点击这里阅读更多信息:http://dev.mysql.com/doc/refman/5.1/en/dynindex-isolevel.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4980801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档