针对高并发与热点库存的场景,有哪些内核调优的办法?
针对高并发与热点库存的场景,AliSQL 提供了 4 个补丁解决,其中库存注释、语句队列以及语句返回这 3 个补丁是针对热点库存更新。
库存注释是把持有行锁的时间行锁释放,交给数据库自己来做。使用排队和事务 性 Hint 来控制并发控制、快速提交或者回滚事务,成功就提交,失败就回滚, 将控制权交给 MySQL 内核可以减少行锁持有的时间,快速地结束事务,提升减库存的吞吐能力;
InnoDB 的事务锁是最细粒度的行级锁,如果语句针对相同行进行并发操作,会导致冲突比较严重,AliSQL 将冲突放在Server 层进行排队。对于相同行的冲突, 如果让它在 Server 层一个桶(队列)内排队,会减少 InnoDB 层冲突检测的开 销,进而减少引擎层和 Server 层上下文切换带来的消耗。
语句返回即更新完之后直接把结果返回,可以减少事务里多次语句交互的时长,这个特性在 PG 和 Oracle 中都有,叫 Returning,在 MySQL 没有,AliSQL 吸纳了这个特性;
对于高并发场景,AliSQL 使用线程池来解决。 在有大量线程进行并发访问时,线程池会自动调节并发的线程数量在合理范围内, 避免线程池因为线程数量过多造成大量缓存失效。 线程池会将语句和事务分为不同的优先级,分别控制语句和事务的并发数量,减 少资源竞争,根据不同语句的复杂性来控制它的优先级。 因此使用线程池可以将不同的 SQL 控制在一个合理的连接数范围,使数据库在高 并发的场景下保持较高性能。
资源来源于《阿里云数据库运维实战问题改》
https://developer.aliyun.com/topic/download?spm=a2c6h.20345107.J_6399686890.1.2e1e17dbzKUX5r&id=8198
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。