我有安装了最新MySQL 5.7的高端48 CPU核心服务器
我对使用GROUP BY执行查询感到有点惊讶,无论我如何格式化我的查询,我只得到1个用于该查询的CPU核心,htop输出清楚地说明了
当然我可以同时执行多个查询,这就是我可以使用所有内核的方法,但它似乎不太方便,并且不是每个查询都可以拆分以使用完整服务器的功能
是否有任何MySQL扩展或SQL提示允许在使用GROUP BY处理数据时使用多个内核?
答案 0 :(得分:6)
正如RolandoMySQLDBA对Possible to make MySQL use more than one core?问题所接受的答案所说:
我实际上和MySQL专家讨论过innodb_thread_concurrency 2011年5月举行的Percona Live NYC会议。
我学到了一些令人惊讶的东西:尽管有文档,但确实如此 最好将innodb_thread_concurrency保留为0(无限并发)。 这样,InnoDB决定了innodb_concurrecy_tickets的最佳数量 打开给定的MySQL实例设置。
将innodb_thread_concurrency设置为0后,即可进行设置 innodb_read_io_threads和innodb_write_io_threads(自MySQL以来都是如此) 5.1.38)最大值为64.这应该使更多核心。
这是我发现的关于如何让MySQL使用更多核心的最佳指导。
答案 1 :(得分:0)
除后台线程外,一个连接只使用一个CPU内核。这适用于GROUP BY
,UNION
,PARTITION
以及您可能认为应该同时执行的任何其他操作。
该声明至少通过MySQL 8.0和MariaDB 10.2适用于InnoDB。
第三方软件可以使用多个核心:https://www.percona.com/blog/2014/05/01/parallel-query-mysql-shard-query/。
此外,"列商店"在MariaDB 10.2中可能使用多个核心。
答案 2 :(得分:-1)
这是mySQL的一个众所周知的局限,这就是为什么mysql通常不用于分析目的的原因。
作为一种解决方法,您可以在mysql之前使用Apache Spark(以分析闻名):
我让您发现如何使用Apache Spark,以及如何使用本机JDBC连接器。
此外,似乎PrestoDB(来自Facebook的分析引擎)(https://prestodb.github.io/docs/current/connector/mysql.html)也有可能。