>在php(Supervisor)中分叉多个进程。每个创建与同一Mysql DB的连接并并行执行相同的SELECT查询(Gearman)。如果我增加进程的数量(即相同的时间连接)并且更多相同的查询将并行运行,则会导致每个进程中的SHOW PROCESSLIST中的发送数据时间增加。 这是一个事务级别为"未提交"的简单选择。是一些 mysql 配置问题吗?还是选择查询导致表锁定?或者也许完全扫描可以?
服务器:Ubuntu 16.04.2 LTS.1 CPU内核。MySQL 5.7.17。innodb_buffer_pool_size 12 GB
它使用 32 个表,包括自连接(13 个唯一表),在一个连接中在 3 秒内执行
得看看细节。 听起来像是索引缺失或不足。
这是"实体-属性-值"吗? 如果是这样,您是否遵循了此处的提示:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta
InnoDB不会锁定表。 但它可以进行表扫描,这将锁定所有行。 同样,听起来像是错误的索引和/或查询公式。
请提供所有 13 张桌子的SHOW CREATE TABLE
,以及SELECT
和EXPLAIN SELECT ...
。
如果在后台进行某种写入,则可能会影响SELECT
,即使在READ UNCOMMITTED
模式下也是如此。
至少 16GB 内存?
分叉多少个进程? 您有多少个 CPU 内核?