一个价值“千万”的秒杀场景参数优化

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介:        秒杀最早来自天猫双11各种商品的促销活动中,现在已经有很多业务场景在使用,比如抢红包,抢票等。其特点有三高:瞬时并发高,数据一致性高,热点更新频度高。这样三高的场景下往往给数据库造成极大的压力,大量更新数据库中的同一行,这样必然会产生锁等待,导致数据库的性能急剧下降的问题,很容易容易.
       秒杀最早来自天猫双11各种商品的促销活动中,现在已经有很多业务场景在使用,比如抢红包,抢票等。其特点有三高:瞬时并发高,数据一致性高,热点更新频度高。这样三高的场景下往往给数据库造成极大的压力,大量更新数据库中的同一行,这样必然会产生锁等待,导致数据库的性能急剧下降的问题,很容出现雪崩效应。笔者记得有一年春节,一个电视台定时在整点发放红包,结果由于压力太高,导致更新数据库红包数额的请求全部堆积,业务全部挂掉,面对这样的情况我们当时也束手无策。
      面对秒杀业务的场景,数据库成为了底层系统中最重要的瓶颈点,阿里经过几年的沉淀也诞生了很多的技术手段来进行优化,这里我们就重点讲一下底层数据所做的优化。当大量的并发更新同一条记录时,使用排队的方式来保证高并发下热点记录更新依然能保持较好的性能,为threads_running设置一个硬上线,当并发超过此值是,拒绝执行sql,保护MySQL,我们将这个称之为高水位限流,这样就给数据库加上了一层限流的功能,使得数据库不被瞬间的高爆发请求打爆。
高水位限流实现:
      监控系统status变量threads_running,当满足拒绝条件,拒绝执行sql,返回用户:MySQL Server is too busy,判断逻辑在dispatch_command中,sql解析之后。
增加的系统variables:
     1.threads_running_ctl_mode: 限流的sql类型,有两个取值:[ALL | SELECTS],默认SELECTS,设置为ALL需谨慎。
      2.threads_running_high_watermark: 限流水位值,只有threads_running超过此值才会触发,默认值为max_connections,当set global threads_running_high_watermark=0时自动设置为max_connections。
拒绝必要条件:
     1..threads_running超过threads_running_high_watermark。
     2..threads_running_ctl_mode与sql类型相符。
以下情况不拒绝:
     1.用户具有super权限。
     2.sql所在事务已经开启。
     3.sql为commit/rollback。
阿里云的RDS已经集成了阿里秒杀场景下的参数优化,所以如果你的应用场景中具有大量并发更新同一行记录的场景,你可以打开数据库的限流参数:threads_running_ctl_mode和threads_running_high_watermark来保护数据库,让你的数据库平稳过渡。下面我们来看一则生产案例。
screenshot
从上图中看到该数据库的活跃连接数最高的时候到达了1W,通过show processlist可以看到大量的并发更新
screenshot
我们来看一下数据库并发更新的TPS有多大:

screenshot
可以看到数据库中的活跃连接数非常高,每秒的update非常不稳定。
我们在把限流开关打开后看一下性能表现:
mysql> set global  rds_threads_running_high_watermark=300;
Query OK, 0 rows affected (0.00 sec)

mysql> set global  rds_threads_running_ctl_mode='all';
Query OK, 0 rows affected (0.00 sec)


screenshot

从上图可以明显的观察到,通过打开数据库的限流开关,数据库的活跃连接数在300左右,同时数据库的TPS也没有再出现很大的波动,这样很好的保护住了DB。
screenshot
screenshot

使用阿里云RDS就可以获得阿里的秒杀优化技术,还可获得阿里云DBA的技术服务,赶快来使用吧。
https://www.aliyun.com/product/rds/?spm=5176.7960203.237031.32.YoWkko
加入我们:
http://duang.alicdn.com/html/HJutlATe

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 关系型数据库 MySQL
阿里云慢SQL优化挑战大赛分析
阿里云慢SQL优化挑战赛,本次慢SQL优化挑战赛的题目全部来自于生产案例,将众多考察点揉合到一条SQL中,主要考虑了以下方面:表设计,索引优化,执行计划等优化知识,同时将历年生产中遇到的SQL优化案例进行总结分析,希望能够帮助到更多的开发者。
14537 1
|
SQL 程序员 数据库
速围观!慢SQL数据库挑战赛PK大师0.00sec赢千元机械键盘
阿里云数据库挑战赛第一季火热开场!迄今为止两百多位数据库高手已加入挑战大军!挑战MySQL慢SQL性能优化极限!想挑战阿里高手么?想获得价值1479元的机械键盘吗?想和阿里研究员褚霸一起喝茶么?快来围观吧!
6613 0
|
监控 安全 关系型数据库
性能测试:自建数据库对比RDS中应当注意的地方(适用于MySQL,SQL SERVER,MongoDB)
常常很多用户对比测试自建数据库和RDS的性能差异,其测试结果往往是RDS不如ECS自建,用户往往怀疑难道我花了那么多的钱买的RDS难道还不如自己在ECS上搭建吗?
17115 0
|
缓存 数据安全/隐私保护 网络架构
原创 计算机网络2
原创 计算机网络2
60 0
原创 计算机网络2
|
机器学习/深度学习 传感器 人工智能
基于D星算法实现栅格地图机器人路径规划附matlab代码
基于D星算法实现栅格地图机器人路径规划附matlab代码
|
Kubernetes Cloud Native 微服务
作者推荐|剖析云原生服务框架中服务发现机制的核心原理与实现机制
作者推荐|剖析云原生服务框架中服务发现机制的核心原理与实现机制
440 0
|
开发者
文章一览
原创文章: 羊了个羊游戏系列教程4:道具的实现 羊了个羊游戏视频教程2:随机生成卡牌 羊了个羊游戏视频教程3:卡牌的拾取和删除 羊了个羊游戏视频教程4:三种道具的实现 新手做游戏的优势在哪里 更“大”的微信小游戏制作工具 当有100名学员的时候,我想谈点儿什么 一本人人都能做游戏的小册子 羊了个羊游戏系列教程5:制作更多层 不要全职去做游戏 普通人如何通过做游戏赚到钱 梳理这个月的原创文章的时候,多少有些慌张。因为数量又创新低了,感觉自己好像忙忙碌碌的度过了一个月,但是梳理总结起来才发现,好像是并没有做太多的事情。
89 0
|
9月前
|
XML Java 数据库连接
IDEA如何使mapper直接跳转到xml,超实用
【10月更文挑战第23天】本文介绍了如何在 MyBatis 框架中配置 Mapper 接口和 XML 文件的关联。方法一:使用 MyBatis-Generator 插件自动生成代码;方法二:手动配置,包括命名规范、文件路径设置和 IDEA 设置;此外,还可以通过快捷键、导航栏和 MyBatis-Plugin 插件来增强跳转功能。
4233 1
|
SQL 监控 算法
5 年 Java 经验,字节、美团、快手核心部门面试总结(真题解析)
由于个人发展的原因,前段时间又出去面试了,这次面试目标比较清晰,主要面一些业务量比较大、业务比较核心的部门。 前前后后面了一个多月,面了不少公司,面试轮次二三十轮应该是有的。 按照自己的习惯,将这次面试过程中的一些经验总结、心得体会记录下来,自己留个记录,也希望可以帮助到一些同学。
764 0