【问题标题】:MySQL - Concurrent SELECTS - one client waits for another?MySQL - 并发选择 - 一个客户端等待另一个?
【发布时间】:2009-03-25 16:20:08
【问题描述】:

我有以下场景:

我有一个包含大约 400 万行的特定 MyISAM 表的数据库。我使用存储过程(MySQL 5.1 版)和一个特别是根据各种条件搜索这些行。这个表上有几个索引,通过这个存储过程的查询通常非常快(

大多数查询在一秒钟内运行(我使用 LIMIT 随时只获取 15 行)。但是,有一些罕见的查询需要更长时间才能运行(比如 2-3 秒)。我已尽我所能优化搜索表。

我开发了一个 Web 应用程序,我可以在一秒钟内在我的开发机器上运行并查看快速查询的结果。

但是,如果我打开两个浏览器实例并同时进行搜索(针对开发机器),一个具有运行时间较长的查询,另一个具有更快的查询,结果会同时返回,即看起来好像快速查询在返回结果之前等待较慢的查询完成。即两个查询都需要 2-3 秒...

这是有原因的吗?因为我认为 MyISAM 处理 SELECTS 彼此无关,而目前这不是我正在经历的行为......

提前致谢! 蒂姆

【问题讨论】:

    标签: mysql select myisam concurrency


    【解决方案1】:

    这只是因为您是在同一台机器上进行的,如果搜索来自两台不同的机器,它们会同时进行。您真的希望一个人只需打开一堆浏览器窗口并点击刷新就可以让您的 MySQL 服务器陷入瘫痪吗?

    【讨论】:

    • 可能是原因!我还没有从不同的机器上尝试过,但我想你是对的!谢谢!
    【解决方案2】:

    没错。 MyISAM 表上的每个选择查询都会锁定整个表,直到完成。他们的借口是这实现了“非常高的读取吞吐量”。切换到 innoDB 将允许并发读取。

    【讨论】:

    • 我想查看该声明的参考。我可以从MySQL manual 并发选择中得到什么互相阻塞(它们获得了读锁)。
    猜你喜欢
    • 2018-11-27
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2015-11-06
    相关资源
    最近更新 更多