2023-01-16 mysql列存储引擎-多线程聚合-pack异步释放-需求分析
2023-09-27 14:25:42 时间
摘要:
目前在聚合多线程扫表的时, 遇到在线程切换时, 当LOCK_ONE策略导致其他线程的pack被释放引发crash的问题。并且当LOCK_ONE时, 每读取一个新的pack就会释放持有的旧的pack, 这样性能也不好.
考虑将pack的释放设计为异步的策略, 由独立的线程来完成对pack的释放.
多线程聚合在扫表时由于LOCK_ONE策略将发生在线程切换时候pack地址丢失.
除去已经新增的LOCK_ALL和LOCK_LRU策略, 考虑线程pack标识来作为控制。
遇到的问题:
- 独立的清理线程, 是新写一个独立的线程, 还是用现有的thread_pool?
- 用来标识pack是否正在使用的标识的数据结构如何设计?
- 如果对工作线程和清理线程的临界区设置线程同步策略?
- 要不要使用锁?
- 使用锁的坏处是什么, 会造成多大的坏处
- 锁的使用规则是什么? 为什么要加锁?
- 还是使用CAS?
- CAS的原子变量和标识的数据结构如何配合?
- 要不要使用锁?
- 工作线程设置和清理pack标识的接口
- LockPack
- 读取一个新pack时
- 设置读取的pack标识, 并清理保存的上一个pack的标识
- pack的标识为临界区, 与清理线程存在线程间同步
- 当能从缓存的pack池内查到, 并且标识位被清除导致pack被清理时, 重置该pack的标志位, 不清理该pack,继续使用缓存到的pack
- UnlockAll
- 释放时也仅仅是对pack标识的处理
- 不阻塞工作线程
- LockPack
- 清理线程的休眠和唤醒规则
- 是否要用条件
相关文章
- MySQL 性能优化的最佳 20+ 条经验
- PHP Mysql-连接
- 【MySQL高级】MySql中常用工具及Mysql 日志
- 【PHP】MySQL原生PHP操作-天龙八步
- 深入浅出MySQL++数据库开发、优化与管理维护+第2版+唐汉明 -- 存储引擎 - 数据类型 - 字符集和校验规则 -
- MySQL最新版MySQL8.0百度云下载
- 基于C语言+MySQL实现(控制台)图书馆借书系统【100010553】
- MySQL数据仓库基础
- mysql limit的使用方法
- mysql存储引擎的一点学习心得总结
- MySQL Merge存储引擎
- ubuntu 在配置MySQL维修
- MySQL更改表的存储引擎
- 图数数据库引擎tinkerpop(3) 使用java调用tinkerpop,存储到mysql数据库
- MySQL 数据库引擎与编码