使用Atomic Block必须设置两个选项:
3,解释型SP和本地编译SP的区别
解释性SP能够访问硬盘表(Disk-Based Table)和内存优化表(Memory-Optimized Table),其真正的区别是解释性(Interpreted)SP在第一次执行时编译,而本地编译(Natively Compiled)SP是在创建时编译,并且直接编译成机器代码,绑定的是内存地址。
4,延迟持久化
在本地编译SP中,设置Atoic Block的选项:DELAYED_DURABILITY = ON ,使SP对内存优化表的更新操作,以异步写事务日志方式,延迟持久化到Disk,这意味着,如果内存优化表维护了一个Disk-Based 的副本,数据在内存中修改之后,不会立即更新到Disk-Based 的副本中,这有丢失数据的可能性,但是能够减少Disk IO,提高数据更新的性能。
四,使用内存优化的表变量和临时表
传统的表变量和临时表,都使用tempdb存储临时数据,而tempdb不是内存数据库,使用Disk存储临时表和表变量的数据,会产生Disk IO和竞争,SQL Server提供了内存优化的表变量,将临时数据存储在内存中,详细信息,请参考我的博客:《In-Memory:在内存中创建临时表和表变量》。
五,在内存数据库中使用JSON
自从使用JSON之后,我的第一感概是:数据库岂能没有JSON,不管是数据库将值传递前端,还是前端将数据传递到数据库,使用JSON方便很多,相比XML,JSON的使用简单很多,详细信息,请参考我的博客:《使用TSQL查询和更新 JSON 数据》
六,内存数据库的事务处理
交叉事务是指在一个事务中,解释性TSQL语句同时访问内存优化表(Memory-Optimized Table,简称MOT)和硬盘表(Disk-Based Table,简称DBT)。在交叉事务中,访问MOT的操作和访问DBT的操作都拥有自己独立的事务序号,就像在一个大的交叉事务下,存在两个单独的子事务,分别用于访问MOT和DBT;在sys.dm_db_xtp_transactions (Transact-SQL)中,访问DBT的事务使用transaction_id标识,访问MOT的事务序号使用xtp_transaction_id标识。详细信息,请参考我的博客:《In-Memory:内存优化表的事务处理》
参考文档:
In-Memory OLTP (In-Memory Optimization)
Introduction to Memory-Optimized Tables
Natively Compiled Stored Procedures
Memory-Optimized Tables
试试SQLSERVER2014的内存优化表
SQLServer 2014 内存优化表
SQL Server 2014 内存优化表(1)实现内存优化表
CREATE TABLE (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
Creating Natively Compiled Stored Procedures