2011-02-12 43 views

回答

6

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

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

有关更多信息,请阅读general中的交易以及MySQL中的实施。

+0

虽然一个查询是单线程的。 – 2013-10-31 23:17:25

5

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

通常,希望查询不会彼此阻塞。然而,根据引擎和查询,他们可能会。 MySQL中有很多锁定,本手册将对此进行详细讨论。

但是,如果他们不互相阻塞,他们仍然可以通过消耗资源来减慢彼此的速度。 IO操作是这些减速的一个特定来源。如果你的数据不适合内存,你应该将并行查询的数量限制在你的IO子系统可以处理的范围内,否则事情会变得非常糟糕。衡量是关键。

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