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

最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题

大家知道,内存优化表作为In-Memory OLTP功能是从SQL Server 2014开始引入,用来对抗Oracle 12C的In-Memory OLTP选件

不过SQL Server的In-Memory OLTP功能是完全内置的功能,不像Oracle需要额外付费才能获得

由于是比较新的技术,可能大家对内存优化表还是比较陌生,网上也鲜有内存优化表使用场景的文章

朋友公司做的业务是跟蜂鸟配送类似的配送业务,整个配送系统平台每天订单量超过30W


坐标问题

系统中某一个部分需要保存跑男的坐标

坐标需要保存到redis和数据库,一旦坐标更新也需要更新redis中的数据

刚开始朋友用传统表来保存坐标数据,但是很快遇到问题,传统表在更新的速度跟不上

后来改用内存优化表,使用了之后

刚开始上传坐标的接口,延迟很大,用了内存表,100毫秒以内,搞定

这些坐标是需要持久化的,而内存优化表是完全支持ACID的,所以也不需要担心数据丢失的问题

内存优化表更新速度快的另一个原因:无锁机制,  并发(如闩锁争用或阻塞)影响的应用程序迁移到内存中 OLTP 时,其性能会显著提高。

大家知道,内存优化表需要有一个非聚集哈希主键索引,大概的表结构是

每个跑男占用一行记录

对应到redis里面大家应该都知道怎麽存储了吧,使用redis的散列类型来存储跑男的坐标

hmset 跑男ID X坐标 value Y坐标 value 跑男在线时间 value
hmset 1 X坐标 12 Y坐标 10 跑男在线时间 60

因为数据库高可用的问题,朋友就购置了新服务器,用来搭建AlwaysOn,新服务器都用SSD固态硬盘

内存优化表的瓶颈主要在事务日志固化,虽然有延迟持久化,但是延迟持久化在意外宕机的时候可能丢失部分数据

现在新服务器使用SSD固态硬盘之后,事务日志固化的瓶颈基本消失

使用新服务器之后,支撑30w/日订单是完全没有问题的


另一个问题是AlwaysOn问题

实际上,SQL Server 2014的AlwaysOn集群已经支持内存优化表,只是不支持在辅助副本上查询内存优化表数据,在故障转移之后

辅助副本上的内存优化表数据是完全没有丢失的,SQL Server 2016对AlwaysOn集群的内存优化表做了改进,支持在辅助副本上查询内存优化表数据


总结

实际上,如果大家对内存优化表研究比较深入的话,内存优化表实际上相当于把redis嵌入到SQL Server,再在上面加上事务等关系型数据库特性

因为两者实现的底层都是哈希表

注意:内存优化表跟redis一样,是纯内存操作的,所以机器内存不能太小,SQL Server在启动时候会把内存优化表数据库文件

里面的数据全部load入内存,朋友的redis服务器和SQL Server服务器都用的256G内存,内存还算足够

这篇文章写得比较粗糙,最后祝大家新年快乐!

参考文章

http://www.cnblogs.com/lyhabc/p/3691911.html

http://www.cnblogs.com/lyhabc/articles/4230547.html

https://msdn.microsoft.com/en-us/library/dn635118(v=sql.120)

如有不对的地方,欢迎大家拍砖o(∩_∩)o 

本文版权归作者所有,未经作者同意不得转载。

SQL Server 2014内存优化表的使用场景的更多相关文章

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

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

  2. SQLServer 2014 内存优化表

    内存优化表是 SQLServer 2014 的新功能,它是可以将表放在内存中,这会明显提升DML性能.关于内存优化表,更多可参考两位大侠的文章:SQL Server 2014新特性探秘(1)-内存数据 ...

  3. sql server 2014内存表

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

  4. SQLSERVER 2014 内存优化表相关

    更新了SP2的补丁能够解决  不能收缩日志文件的bug了. 但是因为已经不用内存优化表了, 所以想着能够删除内存优化表的file group 但是发现 很难删除 先说结论: 以下是针对内存优化文件组的 ...

  5. 试试SQLServer 2014的内存优化表

    SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据 ...

  6. 试试SQLServer 2014的内存优化表(转载)

    SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据 ...

  7. 试试SQLSERVER2014的内存优化表

    试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技 ...

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

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

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

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

随机推荐

  1. Struts2不配置result参数 进行跳转实现

    的 this.getRequest().getRequestDispatcher("url").forward(this.getRequest(),this.getResponse ...

  2. FreeRTOS 使用指南(转)

    源:FreeRTOS 使用指南 繁星电子开发团队制作 作为一个轻量级的操作系统,FreeRTOS 提供的功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能等,可基本满足较小系统的需要. ...

  3. Lua学习系列(四)

    lua 资源:http://www.dcc.ufrj.br/~fabiom/lua/ 第一个Lua程序 http://www.dcc.ufrj.br/~fabiom/lua/ 原文:https://w ...

  4. js动画(三)

    咳咳咳咳,感冒了感冒了,鼻塞,蓝瘦啊!嘴巴也开裂,哎,心疼自己.想到这是第三只唇膏了!只怪,放荡不倔爱自由, 行驶在冷风路上么,北风那个吹啊吹啊吹啊,好了,发神经发完了,接下来进入正题,严肃脸.(字数 ...

  5. cronolog 对 tomcat 7 进行日志切割

    一.安装 软件 cronolog-1.6.2.tar.gz tar zxvf cronolog-1.6.2.tar.gz cd cronolog-1.6.2 ./configure && ...

  6. 4、手把手教你Extjs5(四)主界面上加入顶部和底部区域

    这一节为主界面加一个顶部区域和底部区域.一个管理系统的界面可以粗分为顶部标题部分.中间数据展示和处理的部分.底部备注和状态部分. 在增加这二个区域之前,我们先在MainModel.js中加入一些数据. ...

  7. HTML5 - Canvas动画样例(谷歌弹跳球)

    1,样例说明 (1)在没有鼠标介入的情况下,这些球就像有磁性一样拼成"Google"字样. (2)在鼠标移动到其中后,小球像是受到了排斥,向画布的四周扩散,然后不规则地反弹回来. ...

  8. truetype技术和矢量字库的技术原理及实现(转)

    源:truetype技术和矢量字库的技术原理及实现 广泛汉字矢量字库(HZKSLxxJ)格式             在矢量字库中,每个汉字都是以128   X   128点阵制成矢量数据.每个汉字  ...

  9. LPC1768的USB使用--宏定义

    #ifndef __USBREG_H #define __USBREG_H /* usb设备中断定义 usb_devintst usb_devinten usb_devintclr usb_devin ...

  10. FZU 2112 Tickets

    这个问题可以转变一下,先要知道有几个连通块,连通块之间肯定需要添加一条边, 还需要知道每个连通块内部需要添加几条边,这个问题等价于求一张图至少需要几笔画成,这个问题的答案是度为奇数的点的个数/2 #i ...