加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

使用SQL Server 2014内存数据库时需要注意的问题

发布时间:2016-09-30 21:39:36 所属栏目:MsSql教程 来源:网络整理
导读:本文从产品设计和架构角度分享了Microsoft内存数据库方面的使用经验,希望你在阅读本文之后能够了解这些新的对象、概念,从而更好地设计你的架构。 内存数据库

SQL 2014的内存数据库与现在有诸如群集、Alwayson、replication等高可用技术完全集成,故基于内存数据库的基础上,搭建SQL Server Alwayson Availability Group,考虑到同一数据中心带宽和网络延迟优于跨数据中心,可在同一数据中心采用同步模式作为高可用,不同数据库中心采用异步模式作为灾备。架构如下:

使用SQL Server 2014内存数据库时需要注意的问题

由于内存数据库本身常驻内存,在设计架构时需要注意不同高可用的局限性:

群集:考虑到数据库服务的高可用性,传统基于磁盘的数据库经常采用数据库群集保证应用服务的不间断性。同样内存数据库适用于数据库群集,故Active/Passive、Active/Active、以至于M/N(多个活动节点/多个被动节点)模式的群集均可考虑内存数据库,所需注意的是:

在故障切换时,由于内存优化表需要将所有数据装载到内存中,切换时间比基于磁盘的表时间略长。

非持久性内存优化表由于磁盘并未存放数据副本,在故障切换时,数据内容会被清空。

Alwayson: 在SQL 2012中出现的新功能Alwayson availability group可为数据库提供多个同步或者异步的数据库副本, 在SQL 14中内存数据库与Alwayson availability group可完全集成。依赖于Alwayson的部署向导,内存数据库可像传统数据库一样,快速加入Alwayson availability group中,所需注意的是:

在切换主从数据库时,切换时间较快,由于依赖于alwayson的事务日志记录的redo进程,无需从磁盘重新装载数据库到内存中。

若内存数据库中包含非持久性内存优化表,由于无法依赖于事务日志,非持久性内存优化表的数据仅存在于primary节点。

通常Alwayson也被使用于本地数据库的高可用性,和异地数据库的灾备场景,与内存优化表的结合在性能上,对于主从节点之间网络延迟、传递的事务的大小、以及内存数据库所在的磁盘是否较快,均可影响其性能。

Replication: 复制是将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性的一种技术。内存数据库中的内存优化表可作为单向事务性复制的订阅方,所需注意的是:

内存优化表的行数据限制在8060 bytes一下。

复制订阅方的数据类型要遵循内存优化表的限制。

数据库架构设计

由于持久性内存优化表需要在服务启动时,将数据装载到内存中,这涉及对现有RTO有一定量的影响。在设计内存数据库文件组的架构时,需注意完全持久的内存优化表的大小、以及装载数据的速度。

在由架构和业务数据量确定内存优化表的大小的前提下,可通过多个Container提升内存数据库的数据装载的速度。

由于每个Container包含着检查点文件对(Checkpoint File Pairs 即为CFPs),CFP 由数据文件和差异文件构成,内存优化表中的数据存储在 CFP 中。为提高数据库服务启动时RTO,在为内存优化数据库创建多个container时,可并行处理不同Container内的检查点文件对,即为提高装载数据到内存数据库的速度。

使用SQL Server 2014内存数据库时需要注意的问题

例如创建Container可在创建数据库时创建,或者一个或多个container添加到 MEMORY_OPTIMIZED_DATA 文件组,脚本如下所示:

CREATE DATABASE InMemory_DBTest ON  
PRIMARY (NAME = [InMemory_DB_hk_fs_data], FILENAME = 'D:InMemory_DBTestInMemory_DB_data.mdf'),
FILEGROUP [InMemory_DB_fs_fg] CONTAINS MEMORY_OPTIMIZED_DATA
(NAME = [InMemory_DB_fs_dir], FILENAME = 'D: InMemory_DBTest InMemory_DB_hk_fs_dir'),
(NAME = [InMemory_DB_fs_dir2], FILENAME = 'D: InMemory_DBTest InMemory_DB_hk_fs_dir2'),
(NAME = [InMemory_DB_fs_dir3], FILENAME = 'D: InMemory_DBTest InMemory_DB_hk_fs_dir3')
LOG ON (name = [test_log], Filename='D: InMemory_DBTest InMemory_DB.ldf', size=100MB)
COLLATE Welsh_100_BIN2
Go

此外,并在不同的驱动器上分配这些Container,以实现更多带宽来将数据传输到内存中。由于内存数据库引擎会根据轮询法跨Container分发数据文件和差异文件,为提高Container对磁盘的带宽的性能,应在每个磁盘均衡数据文件和差异文件。

对于设计内存优化表时,需要考虑bucket的数量,一般来讲建议bucket的数量为预估表记录的1-2倍。

相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。由于内存数据库是以牺牲内存资源为代价换取数据处理实时性的,以下图表显示了近些年计算机硬件(内存)飞速发展,为内存数据库的使用带来了可能性。

使用SQL Server 2014内存数据库时需要注意的问题

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读