首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行运行查询

问并行运行查询
EN

Database Administration用户
提问于 2017-06-09 12:53:52
回答 6查看 11.9K关注 0票数 2

我正在mysql 5.7.18 ubuntu服务器16.04上运行一个sql脚本,它在一个表中执行大量更新。50k更新中的每一个更新都不到一秒钟,但总运行时间非常长(>20m)。

我从PROCESSLIST中可以看到,只有一个线程正在运行,并且正在一个接一个地处理更新。

如何使用多个线程来加快执行速度?

EN

回答 6

Database Administration用户

回答已采纳

发布于 2017-06-09 13:12:07

因为你写了“每一个.”听起来像是在更新单个行。您是否探索过编写SQL,从而允许DB在一个SQL语句中更新多个行,而不是一次执行一行?这可能会给你带来比手工多线程更好的性能。

票数 1
EN

Database Administration用户

发布于 2020-02-06 11:32:34

从这本书,高性能MySQL -第二版-2008年:

MySQL不能在许多CPU上并行执行一个查询。这是一些其他数据库服务器提供的特性,但不是MySQL。我们提到它,这样您就不会花费大量的时间来研究如何在MySQL!https://www.oreilly.com/library/view/high-performance-mysql/9780596101718/ch04.html上并行执行查询。

来自Percona博客-2019年1月23日

最后: MySQL 8.0.14 (目前有限)具有执行并行查询执行的能力。在编写本报告时,它仅限于select count(*) from table查询和检查表查询。https://www.percona.com/blog/2019/01/23/mysql-8-0-14-a-road-to-parallel-query-execution-is-wide-open/

票数 1
EN

Database Administration用户

发布于 2023-02-19 03:38:04

您可以使用xargs实现一些mysql并行性:

cat <./file.sql> | xargs -n <num of cores> -d '\n' -I {} mysql -e {}

xargs -d ' \n‘状态只使\n成为分隔符(如果每一行o .sql文件都有空格,则有用)

-n限制了xargs生成的每个命令行的参数数。如果没有-n 1并使用-P 0,有时可能只执行一个执行程序。

-P一次限制xargs生成进程的数量(缺省值为1)。-P 0(P0)与-P ($nproc)相同。

但是,尽管有多个实例o mysql并行运行(在单独的子subshells中),但性能不能达到2x。也许是DB锁的问题。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/175888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档