话虽如此,请理解在大多数情况下,像 MySQL 这样的数据库不是 CPU-bound 而是 IO-bound,这意味着造成延迟瓶颈的不是 CPU 能力,而是读写延迟和二级存储的吞吐量。在某些情况下,您可能会受到 CPU 限制,例如,在某些特殊情况下,在 FusionIO 设备中执行某些校验和时,如果您需要 SSL/其他类型的加密,如果您在 SQL 级别执行复杂的数学运算,或者应用可以专门在内存上完成的行过滤器。
如果您过去遇到过 CPU 峰值,或者 CPU 使用率一直很高,这可能会有所帮助,但前提是您可以并行化查询计算:它不会使单个查询的 ALTER TABLES 或 SQL 解析更快。再加上我们许多人在使用 MySQL 时推荐的“轻量级”方法(试图避免 MySQL 端的业务逻辑存储过程),使得我之前提到的实验室基准测试难以在现实中重现。使用额外的并发性有时需要最新版本的 MySQL 和配置更改。一般来说,对于 MySQL,投资更强大的内核比投资许多内核要好得多。
MySQL Server只会在单个前台线程中执行每个查询,SQL 端不支持多线程执行。它还执行维护操作,例如可以在单个线程中重建整个表的 ALTER TABLE。
然而,像InnoDB这样的引擎,特别是在最近的版本中,能够同时执行其后台线程,这意味着某些 IO 操作(如刷新数据、预缓存和数据清除)可以同时发生,MySQL 供应商的一些“实验室”基准表明它可以在高压力下最多可扩展到 64 个内核。
话虽如此,请理解在大多数情况下,像 MySQL 这样的数据库不是 CPU-bound 而是 IO-bound,这意味着造成延迟瓶颈的不是 CPU 能力,而是读写延迟和二级存储的吞吐量。在某些情况下,您可能会受到 CPU 限制,例如,在某些特殊情况下,在 FusionIO 设备中执行某些校验和时,如果您需要 SSL/其他类型的加密,如果您在 SQL 级别执行复杂的数学运算,或者应用可以专门在内存上完成的行过滤器。
如果您过去遇到过 CPU 峰值,或者 CPU 使用率一直很高,这可能会有所帮助,但前提是您可以并行化查询计算:它不会使单个查询的 ALTER TABLES 或 SQL 解析更快。再加上我们许多人在使用 MySQL 时推荐的“轻量级”方法(试图避免 MySQL 端的业务逻辑存储过程),使得我之前提到的实验室基准测试难以在现实中重现。使用额外的并发性有时需要最新版本的 MySQL 和配置更改。一般来说,对于 MySQL,投资更强大的内核比投资许多内核要好得多。
InnoDB
InnoDB 可以访问多个内核,但不要期望它是开箱即用的。InnoDB 必须配置为这样做。
Mar 16, 2012
:在 Debian 上使用多个内核进行单个 MySQL 查询Sep 20, 2011
:多核和 MySQL 性能Sep 12, 2011
:可以让 MySQL 使用多个核心吗?May 26, 2011
:关于单线程与多线程数据库的性能如果不配置多核特性,那么旧版本的 MySQL 会更好
Jun 19, 2011
:如何正确执行 MySQL 烘烤?Oct 05, 2011
:查询在一些较新的 MySQL 版本中运行时间较长Nov 24, 2011
:为什么 mysql 5.5 比 5.1 慢 (linux,using mysqlslap)虚拟机环境
当涉及到 VM 中的 MySQL 时,必须非常小心且非常保守地处理 InnoDB。为什么 ?
当 InnoDB 开箱即用时(不针对线程进行调整),它可能会提供小于线性增益。您甚至可以说它降低了一些(参见本 PDF 的第 8 页)。更糟糕的是,更多的虚拟 CPU 需要增加调度开销(参见本 PDF 的第 18 页)。
结语
了解 VM 中 MySQL 问题的两面性后,您现在可以适度调整更多 CPU。这一点很重要,因为如果你有大量的物理内核和 192+ GB 的 RAM,你可能会在裸机服务器上发疯。
因此,要从拥有更多 CPU 中受益,您必须负责任地调整 InnoDB。
你只能更自由一点,如果