=====================================

网上针对“秒杀”的解决方案很多,数据拆分化解热点,READPAST解决锁问题,应用程序排队限制并发等等很多方式,各有优缺点,只为证明一句名言:条条大路通罗马。

=====================================

今天拿SQL SERVER 2014的内存表来试水“秒杀”,内存表使用“版本”解决了高并发下锁请求和阻塞的问题,使用HASH索引来处理数据页“热点”的问题,解决了PAGE_LATCH等待,虽然本地编译在本测试中效果不是那么明显,但是聊胜于无。

由于测试代码在别人代码基础上修改而来,就不拿出来共享了,具体实现思路:

1. 使用本地编译存储过程来封装秒杀(实现对库存UPDATE和对秒杀成功订单的INSERT操作)

2. 在步骤1的基础上封装一层,实现重试逻辑,重试相关基础请重击

3. 将秒杀商品拆分到多条记录中,避免单条记录成为热点

4. 将秒杀成功的订单表设计为内存表,避免插入记录时的PAGE_LATCH等待

=========================================

测试环境

Windows版本:Windows Server 2012 企业版

数据库版本:SQL SERVER 2014 企业版

服务器CPU: 4个物理CPU 64个逻辑CPU

服务器内存:128GB

模拟秒杀300000商品,1200个线程模拟并发

测试结果

记录数 耗时(毫秒) 每秒秒杀商品数
300 2786 107681.26
100 3620 82872.93
50 4363 68760.03
20 5240 57251.91
10 7690 39011.70
5 12266 24457.85
2 31186 9619.70
1 69770 4299.84
 
以上测试结果仅供参考!
 
--=============================================
虽然内存表没有锁阻塞的情况,但是对两个事务更新同一条数据时,只有第一个事务提交后第二个事务才能更新成功,而事务提交受日志写入速度的影响,因此在对单条记录或少量记录更新的时候,磁盘单词写入的时间(Avg. Disk sec/Write) 至关重要,本次测试的服务器上,Avg. Disk sec/Write 平均值在0.05ms到0.09ms之间,因此理论上对单条记录的每秒最大更新次数在1w到2w左右,这也是为什么要拆分成多条记录的原因。
 
--=============================================
福利依旧是妹子

SQL SERVER 2014--内存表实现秒杀场景的更多相关文章

  1. SQL Server 2014内存优化表的使用场景

    SQL Server 2014内存优化表的使用场景 最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表是从SQL Server 2014开始引入,可能大家对内存优化表 ...

  2. SQL Server 2014内存优化表的使用场景(转载)

    最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表作为In-Memory OLTP功能是从SQL Server 2014开始引入,用来对抗Oracle 12C的In- ...

  3. sql server 2014内存表

    内存数据库,指的是将数据库的数据放在内存中直接操作.相对于存放在磁盘上,内存的数据读写速度要高出很多,故可以提高应用的性能.微软的SQL Server 2014已于2014年4月1日正式发布,SQL ...

  4. SQL Server 2014新特性探秘(1)-内存数据库

    简介    SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQL PASS Summit 2012的开幕式时,微软就宣布 ...

  5. [SQL Server 2014] SQL Server 2014新特性探秘

    SQL Server 2014新特性探秘(1)-内存数据库   简介 SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQ ...

  6. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  7. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

  8. 在SQL Server 2014里可更新的列存储索引 (Updateable Column Store Indexes)

    传统的关系数据库服务引擎往往并不是对超大量数据进行分析计算的最佳平台,为此,SQL Server中开发了分析服务引擎去对大笔数据进行分析计算.当然,对于数据的存放平台SQL Server数据库引擎而言 ...

  9. SQL Server 2014里的IO资源调控器

    在本文中,我们将来看看SQL Server 2014在资源调控器方面增加了哪些新的功能.资源调控器(Resource Governor)是从SQL Server 2008开始出现的一项功能.它是用于管 ...

随机推荐

  1. bootstrap下拉框的例子,提示Error: Bootstrap's JavaScript requires jQuery

    bootstrap很多js依赖jquery,所以需要引入jquery   遇到的问题: 页面访问提示:Error: Bootstrap's JavaScript requires jQuery   解 ...

  2. html图片链接不显示图片

    html图片链接不显示图片,如下示: <a href="index.jsp"><img src="/img/index.png"/>&l ...

  3. 第六章 图(a)概述

  4. Android 获取ROOT权限原理解析

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android玩家中常说的“越狱”有一个更深层次的认识. 二. Root的介绍 1.       Root 的目的 可以让 ...

  5. 品味性能之道<八>:Loadrunner关联技巧与字符处理

    一.概述       Loadrunner作为HP出品的性能测试工具,拥有太多奇妙魔法甜点供予性能测试人员享用,其中吃起来比较有嚼劲的那就是关联了.当然在关联之后我们还需要一些简单的字符处理,用以生成 ...

  6. Laravel 5.5 Api

    Laravel api token验证使用方法 从 Laravel 5.2 开始, Laravel 的将路由的配置进行了分拆, 在 routes 目录下有 web.php 和 api.php 两个路由 ...

  7. android触控,先了解MotionEvent(一)

    http://my.oschina.net/banxi/blog/56421 这是我个人的看法,要学好android触控,了解MotionEvent是必要,对所用的MotionEvent常用的API要 ...

  8. 前端之css笔记1

    1  css引入方式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  9. springcloud-eureka简单实现

    请参考 spring+cloud为服务实战 第三章 一.创建Eureka服务 1.使用Idea创建一个项目 结构如下: 2.pom.xml配置: <?xml version="1.0& ...

  10. redis学习-有序集合(zset)常用命令

    zadd:有序集合增加一个或者多个键值对 与set集合不同,zset添加的时候需要 指定 score,这个是用来排名的 zrange:返回指定范围的键 zcount:返回集合指定范围的个数(以每个键值 ...