MySQL Master/Slaves,异步查询和意外 table 锁定?

MySQL Master/Slaves, asynchronous query and unintended table locking?

我只是在 mysql master/salve 环境中遇到一些关于 SELECT 查询和 table 锁定(?)的奇怪问题。

我有1个master和2个slave。我所有的 table 都是 innoDB(其中一些曾经是 MyISAM)。我使用 php 和 mysqli 来并行地从两个从站进行异步查询。

问题是,在处理我的并行查询期间,所有其他 MySQL 相关任务都被搁置,即使我尝试 select 来自根本没有任务的主控,直到所有的查询由于某些原因已完成。

我怀疑是因为 table 锁定了???我确实尝试了 "ISOLATION LEVEL READ UNCOMMITTED" 并将所有 table 更改为 innoDB 但仍然没有成功。我不知道去哪里诊断了

更新 #1 : 刚刚找到了更多线索。在奴隶密集 select 期间,从 PHP 到主人的新连接将是 held/freeze 直到 select 对奴隶的查询完成。

更新 #2 : 发现了更多线索。只需将所有剩余的 mysql 连接更改为 mysqli。它有效!...但在某些不使用 session_start() 的页面上。为什么 session_start() ? session_start() 如何保持我与数据库的连接??

更新 #3: 找到了解决方案。下面我会post

找到解决方案

共有 2 个问题。

  1. 我仍然正常 mysql connection/queries 与 mysqli 共存。只需将其全部更改为 mysqli 即可。我不知道是什么或为什么它不能一起工作。但是将其全部更改为 mysql我可以在某个时候解决我的问题。

  2. 我刚刚了解到PHP的会话也可以被锁定。如果您的页面花费大量时间 compute/process。不要忘记放置 session_write_close() 以防止会话锁定在 PHP.