在传统的数据库表中,由于磁盘的物理结构限制,表和索引的结构为B-Tree,这就使得该类索引在大并发的OLTP环境中显得非常乏力,虽然有很多办法来解决这类问题,比如说乐观并发控制,应用程序缓存,分布式等。但成本依然会略高。而随着这些年硬件的发展,现在服务器拥有几百G内存并不罕见,此外由于NUMA架构的成熟,也消除了多CPU访问内存的瓶颈问题,因此内存数据库得以出现。
内存的学名叫做RandomAccess Memory(RAM),因此如其特性一样,是随机访问的,因此对于内存,对应的数据结构也会是Hash-Index,而并发的隔离方式也对应的变成了MVCC,因此内存数据库可以在同样的硬件资源下,Handle更多的并发和请求,并且不会被锁阻塞,而SQLServer 2014集成了这个强大的功能,并不像Oracle的TimesTen需要额外付费,因此结合SSDAS Buffer Pool特性,所产生的效果将会非常值得期待。
SQLServer内存数据库的表现形式
在SQL Server的Hekaton引擎由两部分组成:内存优化表和本地编译存储过程。虽然Hekaton集成进了关系数据库引擎,但访问他们的方法对于客户端是透明的,这也意味着从客户端应用程序的角度来看,并不会知道Hekaton引擎的存在。如图1所示。
图1.客户端APP不会感知Hekaton引擎的存在
首先内存优化表完全不会再存在锁的概念(虽然之前的版本有快照隔离这个乐观并发控制的概念,但快照隔离仍然需要在修改数据的时候加锁),此外内存优化表Hash-Index结构使得随机读写的速度大大提高,另外内存优化表可以设置为非持久内存优化表,从而也就没有了日志(适合于ETL中间结果 *** 作,但存在数据丢失的危险)
下面我们来看创建一个内存优化表:
首先,内存优化表需要数据库中存在一个特殊的文件组,以供存储内存优化表的CheckPoint文件,与传统的mdf或ldf文件不同的是,该文件组是一个目录而不是一个文件,因为CheckPoint文件只会附加,而不会修改,如图2所示。
图2.内存优化表所需的特殊文件组
我们再来看一下内存优化文件组的样子,如图3所示。
图3.内存优化文件组
有了文件组之后,接下来我们创建一个内存优化表,如图4所示。
图4.创建内存优化表
目前SSMS还不支持UI界面创建内存优化表,因此只能通过T-SQL来创建内存优化表,如图5所示。
图5.使用代码创建内存优化表
当表创建好之后,就可以查询数据了,值得注意的是,查询内存优化表需要snapshot隔离等级或者hint,这个隔离等级与快照隔离是不同的,如图6所示。
图6.查询内存优化表需要加提示
此外,由创建表的语句可以看出,目前SQLServer 2014内存优化表的HashIndex只支持固定的Bucket大小,不支持动态分配Bucket大小,因此这里需要注意。
与内存数据库不兼容的特性
目前来说,数据库镜像和复制是无法与内存优化表兼容的,但AlwaysOn,日志传送,备份还原是完整支持。
性能测试
上面扯了一堆理论,大家可能都看郁闷了。下面我来做一个简单的性能测试,来比对使用内存优化表+本地编译存储过程与传统的B-Tree表进行对比,B-Tree表如图7所示,内存优化表+本地编译存储过程如图8所示。
图7.传统的B-Tree表
图8.内存优化表+本地编译存储过程
因此不难看出,内存优化表+本地编译存储过程有接近几十倍的性能提升。
内存数据库是将指定的表存放于内存,而不是整个库。这是强制行为,并非数据库出于性能考虑,内存充裕时就加载,内存不够时就置换。
内存数据库用文件流的方式组织磁盘中的数据文件,而不是区、页。在内存数据库中,磁盘上存储的数据文件不在是区、页的存储方式,而是基于文件流存储。文件流存储的一个特点之一就是支持快速的读 *** 作,这在数据库重启时将文件流中的数据load到内存中时很能提高效率。
该文件组是一个目录。在创建时位置有固定了,但这个目录是随机的:
目前SQL Server 2014内存优化表的Hash Index只支持固定的Bucket大小,不支持动态分配Bucket大小。
Microsoft SQL Server 2014已经内置最新的安全、功能更新。微软将在愚人节,即Build2014开发者大会期间开放SQL Server 2014资源下载服务。Microsoft SQL Server 2014为市场带来了部署到核心数据库中的新内存功能,包括内存 OLTP,它是对市场上大多数综合内存数据库解决方案的现有内存数据仓库和 BI 功能的补充。
SQL Server 2014 还提供新的云功能,以简化 SQL 数据库对云技术的采用并帮助您开创新的混合方案。
主要功能:
1.内存 OLTP:
提供部署到核心 SQL Server 数据库中的内存 OLTP 功能,以显著提高数据库应用程序性能。
内存 OLTP 是随 SQL Server 2014 Engine 一起安装的,而无需执行任何其他 *** 作,您不必重新编写数据库应用程序或更新硬件即可提高内存性能。SQL Server 2014 CTP2 增强功能包括 AlwaysOn 支持、增加的 TSQL 外围应用以及能够将现有对象迁移到内存 OLTP 中。
2.内存可更新的 ColumnStore:
为现有 ColumnStore 的数据仓库工作负载提供更高的压缩率、更丰富的查询支持和可更新性,为您提供甚至更快的加载速度、查询性能、并发性和甚至更低的单位 TB 价格。
3.将内存扩展到 SSD:
通过将 SSD 作为数据库缓冲池扩展,将固态存储无缝且透明地集成到 SQL Server 中,从而提高内存处理能力和减少磁盘 IO
4.增强的高可用性
1) 新 AlwaysOn 功能:可用性组现在支持多达 8 个辅助副本,可以随时读取这些副本,即便发生了网络故障。故障转移群集实例现在支持 Windows 群集共享卷,从而提高了共享存储利用率和故障转移复原能力。
2) 改进了在线数据库 *** 作:包括单个分区在线索引重建和管理表分区切换的锁定优先级,从而降低了维护停机影响。
5.加密备份:在内部部署和 Windows Azure 中提供备份加密支持。
6.IO 资源监管:资源池现在支持为每个卷配置最小和最大 IOPS,从而实现更全面的资源隔离控制。
7.混合方案:
1)智能备份:管理和自动完成将 SQL Server 备份到 Windows Azure 存储(从内部部署和 Windows Azure 中)。
2)添加 Azure 副本向导:轻松将 Windows Azure 中的副本添加到内部部署可用性组中。
3)SQL XI(XStore 集成):支持 Windows Azure 存储 Blob 上的 SQL Server 数据库文件(从内部部署和 Windows Azure 中)
4)部署向导:轻松将内部部署 SQL Server 数据库部署到 Windows Azure 中。
注:微软2014年3月26日正式宣布,云计算 *** 作系统Windows Azure更名为Microsoft Azure,新品牌自4月3日启用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)