开发者社区> 问答> 正文

针对高并发与热点库存的场景,有哪些内核调优的办法?

针对高并发与热点库存的场景,有哪些内核调优的办法?

展开
收起
游客4skzfvnrxrzbi 2022-01-04 16:32:31 1902 0
1 条回答
写回答
取消 提交回答
  • 针对高并发与热点库存的场景,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

    2022-01-04 18:02:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
徐雷-Java为王,互联网高并发架构设计与选型之路6.0 立即下载
Redis 的高并发实战:抢购系统 立即下载
MySQL高并发场景实战 立即下载