【问题背景】

某天早上做活动,流量大量增长,导致大量更新库存操作失败。

操作mysql返回的错误均为“Lost Connection to mysql server”,即mysql服务端主动断开了连接,导致update操作失败。

都是在sql执行过程中返回的“Lost”,且都是update操作返回“Lost”,同一时刻的“select”操作并无异常。

都是update执行操过了1s后返回的“Lost”

【原因】

秒杀情景下是大量update同时操作同一表的同一记录

对同一记录的写操作都要加“行锁”,且有“死锁检测”,使得sql操作串行执行,有阻塞

猜测:某些请求由于等到超时了,被mysql服务关了连接

【老流程】

如果需要更新 item1(分库1)、item2(分库2)、item3(分库4)的库存

流程

=>所有分库,每个分库上均开启一个事务

=>查询。。

=>循环处理3个item

=>=>如果该次操作以前没做过(没有seqid)继续;否则处理下一个item

=>=>更新库存

=>=>更新是否售空

=>=>插入

=>所有分库,每个分库均提交事务

1)如果有一个item更新失败,回滚所有事务

2)尽量保证要不所有item都更新成功,要不都失败

问题

1)一个事务中,sql操作太多;如果事务中有update操作,则从update操作执行到事务提交将会一直锁住操作行,因此事务越长,锁越长,性能损耗越大

2)每个分库都要等所有item更新完后才提交,增长事务时间(也就是锁时间)

【优化后】

如果需要更新 item1(分库1)、item2(分库2)、item3(分库4)的库存

流程

=>循环在每个item所在分库对item进行处理

=>=>在分库1中开启事务

=>=>插入seq表

=>=>更新库存and是否售空

=>=>提交事务

问题

1)一次操作多个item时,不保证要不都成功,要不都失败

2)只要有sql操作失败,就返回失败

【对比】

原文:http://www.cnblogs.com/taoxinrui/p/6399691.html

mysql去掉秒杀场景_秒杀场景下mysql减库存逻辑优化相关推荐

  1. mysql崩溃恢复过程_一起看下MySQL的崩溃恢复到底是怎么回事

    思考一个问题 为什么在你当update时,事物提交之前先不断的写redo log呢? 如果你看过白日梦前面介绍buffer pool的文章,这个问题的答案想必你也能很快的想出来:MySQL为了提高性能 ...

  2. mysql 条件查询分页_百万数据下mysql条件查询及分页查询的注意事项

    接上一节<百万数据mysql分页问题>,我们加上查询条件:select id from news where cate = 1 order by id desc limit 500000 ...

  3. mysql star item 失败_解决CentOS7下MySQL服务启动失败的问题.md

    --- title: 解决CentOs7下MySQL服务启动失败的问题 date: 2021-01-06 15:21:31 tags: MySQL --- 老夫前几天才在虚拟机的CentOS安装好My ...

  4. mac下mysql不支持中文_解决mac下mysql无法使用中文的问题

    MySQL.png 针对 mac 系统下 mysql 无法使用中文,在网上查找解决办法,大部分都是将 mysql 下的 default.cnf 复制到 /etc下并修改为 my.cnf 然后对文件进行 ...

  5. mysql连接字符串 端口_浅析C#下MySQL连接字符串数据库服务器端口号

    正常的C#下MySQL连接字符串配置,这是在MSSQL服务器端口是1433(默认)的情况下. 但是有时候,为了数据库服务器安全,这个端口会被改成其它的,这时再用这C#下MySQL连接字符串,连接数据库 ...

  6. spring mysql中文乱码问题_解决Spring下MySQL出现乱码的问题

    花了我宝贵的3个小时才搞定,失败! 以前都是用Postgres,基本没有用过Mysql .怎么Postgres的时候从来没有这么麻烦啊,惆怅~~ 本来我的代码都是基于UTF-8的,用本机的Window ...

  7. mac mysql密码错误_解决mac 下mysql安装后root用户登录密码错误问题

    使用的mac OS 10.11  安装mysql后访问root/root用户失败,网上找了一些解决办法,下面记录下解决方法方便以后自己查询 概述(看懂下面就不用看了): 停服务:sudo /usr/l ...

  8. mysql中文问号 linux,解决Linux系统下Mysql数据库中文显示成问号的问题

    Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 (需暂停服务的方式) Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 本机采用Ubuntu16.04系统,tar方式安装My ...

  9. 查询电脑上mysql的密码忘记了怎么办_windows下mysql忘记root密码的解决方法 -电脑资料...

    方法一: 1.在DOS窗口下输入net stop mysql5 或 net stop mysql 2.开一个DOS窗口,这个需要切换到mysql的bin目录, 一般在bin目录里面创建一个批处理1.b ...

最新文章

  1. C++随笔——虚拟继承
  2. 操作系统之磁盘调度——SCAN实例讲解
  3. Scratch-介绍“克隆”
  4. 如何在Python中获取当前时间
  5. mysql自定义多选排序,mysql 使用order by field() 自定义排序
  6. java项目_值得学习和练手的Java企业级开源项目,强烈推荐!
  7. 2016012052+小学四则运算练习软件项目报告
  8. 马斯克血洗推特!传机器学习裁员90%,团队直接解散
  9. Winserver AD管理Powershell——GUI 计算机加入域
  10. 电源 PFC(功率因数校正)电路拓扑,共计100多份,内含A PFC,连续断续,交错,维也纳,各功率段的PFC电路
  11. 房屋租赁合同电子版(可下载)
  12. mysql命令创库创表_MySQL基础创库创表知识
  13. 【Ubuntu】硬盘读写速度测试
  14. vscode格式化html代码失效了,VSCode格式化代码功能失效的bug解决方法
  15. 6-1 调用函数打印闰年 (15 分)
  16. Windows操作系统+朝鲜红星+国产麒麟+红旗+渗透专用系统+Oracle专用+技术专栏【资源大合集】 | 寻找C站宝藏
  17. 老司机带你快速实现Python下载与安装
  18. game.php中文什么意思,game是什么意思中文翻译
  19. STM32 五个时钟源HSI、HSE、LSI、LSE、PLL 如何识别
  20. python tkinter listbox_Python中tkinter控件中的Listbox控件详解

热门文章

  1. 图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)
  2. c++标准模板库STL【快速查找】【最全】【常用】【语法】
  3. python 数据类型 、运算符
  4. docker和docker-compose 端口映射
  5. 转发萌新人鱼博客-Java面向对象-面向对象编程之基本概念
  6. 开启物联网的真正潜力需要在更大程度上克服数据挑战
  7. PhpStorm 配置Xdebug
  8. 一次批量修改博客文章的经验(下):操作过程
  9. 距离向量路由环路解决的方法.
  10. 推荐13个.Net开源的网络爬虫