如何在MySQL数据库中处理同时查询?

use*_*052 8 mysql sql performance

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

Hol*_*ust 10

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

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

有关更多信息,请阅读有关一般事务和MySQL中的实现.

  • 嗯,这就是 MySQL(以及通常所有 SQL 数据库)的工作方式:基本上有一个请求-响应协议。您向服务器发送一个查询(例如“SELECT”或“UPDATE”查询),然后等待响应,该响应只有在查询完成后才会到达(对于游标、存储程序或自定义存储引擎但仍然保留基本原则)。只有当客户端发送的当前查询完成后,服务器才开始处理下一个查询。要并行运行多个客户端查询,您需要多个客户端连接。 (2认同)

Mar*_*rkR 5

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

通常,希望查询不会相互阻塞.然而,根据引擎和查询,它们可能会.MySQL中有很多锁定,在手册中有详细讨论.

但是,如果它们不相互阻挡,它们仍然可以通过消耗资源来减慢速度.IO操作是这些减速的特定来源.如果您的数据不适合内存,您应该将并行查询的数量限制为您的IO子系统可以处理的内容,否则事情会变得非常糟糕.测量是关键.

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