我有一个体积很大的数据库服务器,具有大约24个内核和48 GB的RAM。我们运行MariaDB 10.0作为我们的数据库引擎。我所有的表都在InnoDB引擎上运行。我有几个查询在大表上使用相当广泛的联接,因此速度很慢。我正在努力做的一件事就是尝试并利用多核心的力量。这是我的观察:MySQL/MariaDB在多个内核上运行单个查询
- 如果我并行运行2个查询,然后我可以看到2个核被利用
- 如果我运行1个查询,我看到的只是被利用在100%1芯
现在,这是正常的行为?我的意思是MariaDB/MySQL没有办法为单个查询使用多个核心?如果单个大型查询可以通过使用多个CPU核心运行得更快,那将会非常棒。
我确实尝试过搜索多个论坛,并且使用了不同的参数(如Innodb_thread_cocurrency),但迄今为止还无法在多个核心上运行单个查询。
是否有任何其他引擎可以帮助我做到这一点(我目前正在阅读关于XtraDB)?
更新:
那么,其实我试图分析社交媒体数据。所以想象一个有2-3百万推文的数据库。当然,我们正在与用户数据,主题标签,图像,链接等相关联的表格。因此总的来说,这是一个相当大的数据库。在某些情况下,有些查询需要在多个表上进行连接,并且速度很慢。因此,想象一下,例如具有5-6个不同查询的仪表板查询。当单个用户登录时,这会将负载放在单个内核上,整个内核将在n秒内使用。如果我有12个核心,并假设12个用户同时尝试访问系统,那么我有一个严重的瓶颈。我完全理解,像分片,集群,分布式数据库,分区等选项可以帮助我。但现在我正试图理解如何在垂直缩放(其中我引入更多服务器)之前垂直缩放系统。多核心的使用将是一个很好的选择,但我想现在我明白了,MySQL本身并不是这样设计的。我想我会开始研究各种[可能的体系结构来扩展多个实例的数据库。
应该Serverfault或DBA stackexchange平台要求。已经有[重复](http://serverfault.com/questions/566330/mysql-multi-threading-for-a-single-query)。 – DanFromGermany
不,它没有任何意义,一个查询使用多个核心使其工作更快。这不是CPU的瓶颈 - 如果是这样,那么编写这样的SQL查询的人就应该得到某种程度的奖励。如果您是开发人员,您将如何并行查询执行?查询非常简单,它们变得易懂,然后MySQL知道你想要做什么,它开始寻找数据 - 这些步骤都不会受益于多核。当同时涉及2个查询时,一个核心一次处理一个查询。 – Mjh
您可以使用整体单一查询处理大块数据。像MapReduce在NoSQL中工作一样。 – DanFromGermany