IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

MySQL 并行了吗?

SQL部落 2009-11-29 21:57:05 累计浏览 3,771 次
本机暂存

    前些日子与一位同行讨论mysql的并行运行能力。为给那些只为获得答案的看众节省时间。提前下个结论,mysql目前暂不具备并行运行某一查询的能力。相信很多人有一个误解,似乎MySQL 5.4对某一查询带来的性能改进是非常巨大的。事实上,这需要针对具体应用来讲,如果追求某个具体查询的响应时间,5.4 将比5.1或之前的版本差。简单的来说,5.4提高的是并发量,而不是减少单条语句的执行时间。

    初次看到这个话题的人要注意几个概念,并行和多线程不是同一个概念。“同时进行”的技术分很多类,有查询间的并行,查询内的并行和操作内的并行。举个生活中的例子,

如果你与其他人合租房子的话,早上起来后,多个人可以同时刷牙,洗脸和做饭,大家各忙各的(虽然女房客可能会给厕所加上mutex而其他人只能在原地spin)。单单这套房子来说,它在较短的时间内解决了好几个人的早上洗漱问题。这就是查询间并发了。早上诸多行动中,以刷牙、做法、吃饭这三个动作为例,我们通常的做法是把微波炉转上,然后刷牙,刷牙结束后,早饭也弄好了(至少我是这么做的),这样我们达到了查询内的并行。再细化下去,现在加一个动作:整理电脑包,按照上一种方式我们可以按这样的顺序做事情:

做饭

刷牙 -》 吃饭 -》 整理电脑包

如果你有两只手的话,我们可以用一只手刷牙,另外一只手整理电脑包,这样进一步缩短你的运行时间,这样你就做到了操作内的并行。

    总结起来:第一种情况整体吞吐量很大。第二种情况,个人的处理时间减少了。 第三种情况,个人的处理时间进一步减少。

    有兴趣的人可以在database system concepts这本书中了解相关概念。查询间的并行对于数据库管理软件来说是再正常不过的功能,所以下面我们将直接跳过这类“同时进行”。从理论上讲,数据库的多个模块:IO、SQL解析和SQL执行等都可以达到并行执行的目的。

    通过将关系划分到多个磁盘来减少从磁盘检索关系所需的时间,从而使得数据库IO可以并行执行。另外在一个查询中的多个联接操作和排序操作也可并行发生。对等值联接和自然联接, 可以将两个输入关系划分到多个处理器上, 各处理器在本地计算联接.

    当然以上讨论的一切一切都基于CPU是多核的。

    但是目前我个人不支持mysql并行化,这也符合很大一部分mysql开发人员的意见。理由:

并行化,将导致MySQL工程越来越复杂,随之而来的是Bug数量快速增加。(从上面例子中,我们也可看出操作内的并行比较挑战你的操作能力。例如你需要能够不看镜子刷牙、偶尔还要去看看饭做的怎么样了、单手拿laptop等等,中间不小心摔东西的概率就增加了)就mysql目前的应用来看,使用者更在意mysql数据库的吞吐量,而不是效应速度(当然了,响应速度也是很重要的)。mysql目前的简单架构replication可大幅提高数据库端的吞吐量。目前现存的其他开源技术亦能满足并行查询的需求如hadoop、map reduce。

    支持并行运行的MySQL意味着什么?查询优化器和JOIN::Execution的代码将被大量修改,mysql项目将有可能会被长时间拖延处于beta状态。(Perl6 雄心勃勃对Perl 5进行巨大改进,然而8年过去了,还未见其像样的RC版。)

    最后,我们还可以利用mysql proxy来达到并行的目的。查询在mysql proxy中被划分成多个部分,各个部分可在不同的mysql服务器上查询获得数据,再由mysql proxy合并返回给读者。

    以上为一家之言

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,252)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,400)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,352)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. 如何查找消耗资源较大的SQL (累计阅读 15,211)
  7. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,058)
  8. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  9. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,909)
  10. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,709)