我有一个相当强大的数据库服务器,有大约24个内核和48 GB的RAM.我们正在运行MariaDB 10.0作为我们的数据库引擎.我的所有表都在InnoDB引擎上运行.我有一些查询在大表上使用相当广泛的连接,因此自然很慢.我正在努力做的一件事是尝试利用多核的力量.以下是我的观察:
>如果我并行运行2个查询,那么我可以看到正在使用2个核心
>如果我运行1个查询,我看到只有1个核心被用于100%
现在,这是正常行为吗?我的意思是,MariaDB / MySQL中没有办法为单个查询使用多个核心?如果使用多个cpu核心可以更快地运行单个繁重的查询,那将会很棒.
我尝试搜索多个论坛,并使用不同的参数,如Innodb_thread_cocurrency,但到目前为止还没能在多个核心上运行单个查询.
有没有其他引擎可以帮助我做到这一点(我目前正在阅读XtraDB)?
更新:
好吧,实际上我正试图分析社交媒体数据.想象一下拥有2-3百万条推文的数据库.当然,我们正在讨论与USer数据,主题标签,图像,链接等相关联的表.所以总的来说是一个相当大的数据库.在某些情况下,有些查询需要在多个表上进行某些连接,并且自然很慢.因此,想象一下,例如一个带有5-6个不同查询的仪表板查询.当单个用户登录时,这会将负载放在单个核心上,并且整个核心的使用时间为n秒.如果我有12个内核,假设有12个用户同时尝试访问系统,那么我就会遇到严重的瓶颈.我完全理解,分片,群集,分布式数据库,分区等选项可以帮助我.但是现在我正在尝试了解在我查看水平扩展(其中我引入更多服务器)之前如何最好地垂直扩展系统.使用多个内核本来是一个很好的选择,但我想现在我明白了,MysqL本身并不是这样设计的.我想我将开始研究各种[可能的架构,以便在多个实例上扩展数据库.
1)在撰写本文时,MariaDB和MysqL不支持在多个处理器上运行单个查询(除非您正在讨论分片).这并不意味着他们将来不会支持它.
2)并行查询可以在其他RDBMS(DB2,Oracle,sqlServer,Postgres等)中完成,它是数据仓库等环境的重要特性.
3)对于长时间运行的查询,通常并行化会缩短执行时间,尽管改进可能不是线性的.因此,说“一个查询使用多个核心使其更快地工作”是不正确的.除非我们对“更快地工作”有不同的定义,否则它对某些工作负载非常有意义.
4)Bottelnecking cpu并不一定意味着“你正在以错误的方式使用数据库”.是的,有些人确实写了可怕的查询(或驱动查询的程序)并将数据库扼杀致死,但这完全是另一个问题.
5)并行性会降低并发性.如果您的目标是支持更多用户(即更高的并发性),则必须放弃在多个处理器上运行查询(或者仅在每个查询的较少处理器上运行).这是你需要做出的权衡.存在过度泛化的风险,您希望OLTP环境查询以串行方式运行,并且OLAP查询并行运行.
干杯!