增加到mysql的连接会导致在同一查询中每次发送数据的时间增加

增加到mysql的连接会导致在同一查询中每次发送数据的时间增加,mysql,select,parallel-processing,innodb,gearman,Mysql,Select,Parallel Processing,Innodb,Gearman,在php中分叉多个进程(主管)。每个数据库都创建到相同Mysql数据库的连接,并并行执行相同的SELECT查询(Gearman)。如果我增加进程数量(即,相同时间的连接),并且更多相同的查询将并行运行,则会增加每个进程中显示进程列表中的发送数据时间。这是一个简单的select,事务级别读取未限制。这是mysql配置的问题吗?还是选择查询导致的表锁定?或者全扫描可以吗 服务器:Ubuntu 16.04.2 LTS。1个CPU核心。MySQL 5.7.17。innodb_缓冲区_池_大小12 GB

在php中分叉多个进程(主管)。每个数据库都创建到相同Mysql数据库的连接,并并行执行相同的SELECT查询(Gearman)。如果我增加进程数量(即,相同时间的连接),并且更多相同的查询将并行运行,则会增加每个进程中显示进程列表中的发送数据时间。这是一个简单的select,事务级别读取未限制。这是mysql配置的问题吗?还是选择查询导致的表锁定?或者全扫描可以吗

服务器:Ubuntu 16.04.2 LTS。1个CPU核心。MySQL 5.7.17。innodb_缓冲区_池_大小12 GB


它使用32个表,包括在一个连接中3秒钟内执行的自连接(13个唯一表)

我得看看细节。听起来像是缺少索引或索引不足

这是“实体属性值”吗?如果是,您是否遵循了以下提示:

InnoDB不锁定表。但它可能会进行表扫描,从而锁定所有行。同样,听起来像是坏的索引和/或查询公式

请为所有13个表提供
SHOW CREATE TABLE
,以及
SELECT
EXPLAIN SELECT…

如果后台正在进行某种写入操作,则可能会影响
选择
,即使在
读取未提交
模式下也是如此

至少16GB内存


分叉多少进程?您有多少CPU核心?

可能是关于网络延迟、表结构、索引和查询效率。因此,您应该提供有关架构和查询的更多详细信息。它使用32个表,包括自联接(13个唯一表)在一个连接中执行3秒,但在两个并行连接中,每个进程将花费6秒,以此类推,就像它们在队列中执行一样。查询足够大,有许多连接,但没有任何聚合和排序。只有一个表使用_where和45%筛选扫描4262行,其他表使用索引ook,如您在每个连接中锁定表查询。您是否使用BEGIN TRANSACTION?如果每个查询再增加~3秒,它显然会锁定表。不,没有BEGIN TRANSACTION,自动提交处于启用状态。但为什么要简单地读取锁定表?即使在读取未限制模式下也是如此。原因是一些完整的表扫描吗?但我无法在解释1 CPU核心、15GB RAM中看到它。即使是2个进程,也会导致t增加每个数据库输入两次ime。整个数据库上没有插入/更新活动。是的,似乎有一个不好的查询。但不能很好地优化它,因为它是在API中实现的。水平切分也可能有帮助吗?也许CPU在运行时是100%的?这可以解释一个3秒,两个6秒。如果你不能更改生成的查询,你就不能实现切分g、 让我们看看这个查询。