首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何并发/并行执行mysql查询

如何并发/并行执行mysql查询
EN

Database Administration用户
提问于 2022-05-15 13:51:33
回答 3查看 560关注 0票数 0

我必须找出在RHEL5上运行RHEL5 5.5的5000个表的“确切”行计数。据我所知,唯一的方法是"SELECT COUNT(*) from table_name"。但这需要太多的时间。

所以我试着并行运行这些查询。我将查询拆分到10个不同的文件中,每个文件包含500个查询,并从10个不同的终端运行它们,我还尝试使用不同的uid/pwd进行日志记录。每次都是同样的时间。我错过了什么?如何并行运行这些查询。

它是一个16 vCPU和94 It内存系统。我认为吞吐量也是不错的。几乎每个表都有主键。总共需要6小时以上。

EN

回答 3

Database Administration用户

发布于 2022-05-21 02:21:31

如果您没有使用该ENGINE=INNODB,请这样说;这个答案是完全错误的。

无论您如何运行它,都必须从磁盘读取相同数量的数据。这就是为什么并行是无用的,至少当有比RAM中缓存的数据更多的数据时。

您应该适当地设置innodb_buffer_pool_size (70%的可用内存)。

有一个诡计会加速一些计数。向任何大型表添加辅助索引;将其索引为最小的列,如ENUMTINYINT。(如果已经有索引,则不要添加额外的索引;不要为小型表添加额外的索引。)这个技巧很有帮助,因为InnoDB为COUNT(*)选择了最小的笨重索引,从而完成了最少的I/O操作。

票数 0
EN

Database Administration用户

发布于 2022-05-21 07:31:06

我们升级到MySQL 8.0。我认为它比5.5更能处理并行性

我在10个不同的会话中并行运行这些查询,执行时间从11小时缩短到2.4小时。

票数 0
EN

Database Administration用户

发布于 2022-06-05 21:25:01

使用您的MySQL 8.0,请尝试此查询。

代码语言:javascript
复制
SELECT IFNULL(table_schema,'Total') db,COUNT(1) 
    table_count,SUM(information_schema.tables.table_rows) row_count 
    FROM information_schema.tables WHERE table_schema 
 NOT IN ('information_schema','performance_schema','mysql','sys','innodb')
  AND table_type='Base Table'  
GROUP BY table_schema WITH ROLLUP; 

你可能需要把这里显示的前2行放在一起。

期望表计数和行计数按架构计算,最后一行为总计。查看联系人信息的配置文件,并在需要时保持联系。

请张贴您的确切计数和行计数之间的差异,此查询提供的总数以及此查询所消耗的时间量。

对RolandoMySQLDBA MySQL I/O冻结导致RDS实例崩溃的原意

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

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

复制
相关文章

相似问题

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