2023-01-13 mysql列存储引擎-聚合多线程并行扫表-多线程开启条件及工作线程数分析
2023-09-27 14:25:42 时间
摘要:
使用多线程聚合, 存在额外的代价。
在数据量偏少的情况下, 额外的代价将会超过分割数据并行处理减少的代价, 导致总代价出现增高的情况。
本文分析多线程聚合的代价, 并确定开启多线程聚合的条件。
多线程聚合代价评估:
线程自身代价:
- 单个线程的独立栈空间:
- 默认为8192KB, 即8MB
- 当前对于线程使用并非是常规线程池, 而是随着业务创建和销毁
- 线程切换代价:
- 线程和进程在kernel层都是task, 区别在于内存可见性, 都要遵守task切换机制
- 导致线程切换时, PCB描述表, 栈空间, 寄存器这些除了堆空间外的整个上下文都需要切换
- 开辟的工作线程的数量
- 当前为物理cpu核数/4
- 开辟的线程数不能>=cpu核数, 否则将影响其他客户端的查询线程
- 为什么是四分之一?
- 原有的逻辑遗留下来的magic number
- TODO: 线程数是否合理?
- 当前为物理cpu核数/4
锁导致多线程串行代价:
- 聚合group by的逻辑仅读取表, 此时无谓词运算, 可以理解为只读逻辑
- 除了全局的data_cache持有的cahe加锁外, 上层逻辑不应加锁
合并多个工作线程聚合结果的代价:
- 由于聚合结果现在都在内存的线性hash表, 所以合并可以理解为是一个内存拷贝的过程
- 导致其代价受两个因素影响:
- 工作线程的数量, 决
相关文章
- MySQL for Mac 终端操作说明
- mysql重做日志
- Python3 多线程(连接池)操作MySQL插入数据
- MySQL详解--锁,事务
- 【MySQL】B+树索引深度计算
- Mysql 删除从数据库的relay logs最佳方式、最安全方式
- 2022-09-01 mysql/stonedb-多线程并行遍历元组遇到的问题分析
- 2023-01-18 mysql列存储引擎-对于聚合多线程的架构设计及开发过程的思考
- MySQL的安装与配置
- mySQL-简易用法(一)
- 函数:MySQL中字符串匹配函数LOCATE和POSITION使用方法
- 设置MYSQL函数GROUP_CONCAT长度
- MySQL性能优化的最佳20+条经验
- mysql多线程备份与还原工具mydumper
- mysql中的视图、事务和索引