SQL Server 2016新特性: In-Memory OLTP

原创 2016年06月01日 16:57:03


内存中OLTP有助于OLTP工作负荷实现显著的性能改进,并减少了处理时间。可以通过将表声明成“内存中优化”来启用内存中OLTP的功能。内存优化表完全支持事务,并且可以使用Transact-SQL进行访问。 Transact-SQL存储过程可以被编译成机器代码从而进一步提升内存优化表的性能。引擎针对高并发进行设计,并使阻塞最小化。

下面的示例(取自MSDN),展示了如何通过T-SQL创建memory-optimized filegroupMemory-Optimized Tables,最终可以看到基于磁盘表和内存优化表之间的性能差异,及Native SP带来的进一步性能提升。


  1.  创建数据库,及其内存优化文件组(memory-optimized filegroup

CREATE DATABASE imoltp;   
go

ALTER DATABASE imoltp ADD FILEGROUP [imoltp_mod]
    CONTAINS MEMORY_OPTIMIZED_DATA;

ALTER DATABASE imoltp ADD FILE
    (name = [imoltp_dir], filename= 'c:\data\imoltp_dir')
    TO FILEGROUP imoltp_mod;
go

USE imoltp;
go

2创建Memory-OptimizedTables, and NCSProc

go
DROP PROCEDURE IF EXISTS ncsp;
DROP TABLE IF EXISTS sql;
DROP TABLE IF EXISTS hash_i;
DROP TABLE IF EXISTS hash_c;
go

CREATE TABLE [dbo].[sql] (
  c1 INT NOT NULL PRIMARY KEY,
  c2 NCHAR(48) NOT NULL
);
go

CREATE TABLE [dbo].[hash_i] (
  c1 INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
  c2 NCHAR(48) NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
go

CREATE TABLE [dbo].[hash_c] (
  c1 INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
  c2 NCHAR(48) NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
go

CREATE PROCEDURE ncsp
    @rowcount INT,
    @c NCHAR(48)
  WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
  AS 
  BEGIN ATOMIC 
  WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
  DECLARE @i INT = 1;
  WHILE @i <= @rowcount
  BEGIN;
    INSERT INTO [dbo].[hash_c] VALUES (@i, @c);
    SET @i += 1;
  END;
END;
Go

3执行下面的T-SQL,可看到内存优化表的性能状况

go
SET STATISTICS TIME OFF;
SET NOCOUNT ON;

-- Inserts, one at a time.

DECLARE @starttime DATETIME2 = sysdatetime();
DECLARE @timems INT;
DECLARE @i INT = 1;
DECLARE @rowcount INT = 1000000;
DECLARE @c NCHAR(48) = N'12345678901234567890123456789012345678';

-- Harddrive-based table and interpreted Transact-SQL.

BEGIN TRAN;
  WHILE @i <= @rowcount
  BEGIN;
    INSERT INTO [dbo].[sql] VALUES (@i, @c);
    SET @i += 1;
  END;
COMMIT;

SET @timems = datediff(ms, @starttime, sysdatetime());
SELECT 'A: Disk-based table and interpreted Transact-SQL: '
    + cast(@timems AS VARCHAR(10)) + ' ms';

-- Interop Hash.

SET @i = 1;
SET @starttime = sysdatetime();

BEGIN TRAN;
  WHILE @i <= @rowcount
    BEGIN;
      INSERT INTO [dbo].[hash_i] VALUES (@i, @c);
      SET @i += 1;
    END;
COMMIT;

SET @timems = datediff(ms, @starttime, sysdatetime());
SELECT 'B: memory-optimized table with hash index and interpreted Transact-SQL: '
    + cast(@timems as VARCHAR(10)) + ' ms';

-- Compiled Hash.

SET @starttime = sysdatetime();

EXECUTE ncsp @rowcount, @c;

SET @timems = datediff(ms, @starttime, sysdatetime());
SELECT 'C: memory-optimized table with hash index and native SP:'
    + cast(@timems as varchar(10)) + ' ms';
go

DELETE sql;
DELETE hash_i;
DELETE hash_c;
go

执行结果:





Expert SQL Server In-Memory OLTP(2nd) 无水印pdf

  • 2017年09月29日 12:20
  • 11.97MB
  • 下载

Expert SQL Server in-Memory OLTP(Apress,2015)

  • 2015年09月22日 22:57
  • 8.46MB
  • 下载

SQLServer 2014 内存优化表

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

锋利的SQL2014: 内存优化表

内存优化表是从SQLServer 2014开始引入的,它将数据的读取、写入操作都放置到内存中完成,这与传统的磁盘表是最大的不同。此功可以减少锁的等待问题,从而改善写入等待延迟,可以用于某些特殊负荷的操...
  • zhanghongju
  • zhanghongju
  • 2014年12月30日 20:38
  • 3298

SQL 2014新功能介绍系列1 - 内存中 OLTP (In-Memory OLTP)

SQL Server 2014引入了内存优化的数据库技术来优化OLTP的工作性能。更特别的是,它引入了内存优化的表来提高效率以及非争夺式数据访问,还引入了本地编译的存储过程来实现业务逻辑的有效执行。 ...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2015年01月17日 02:01
  • 764

SQL Server 2016:内存列存储索引

作者 Jonathan Allen,译者 谢丽SQL Server 2016的一项新特性是可以在“内存优化表(Memory Optimized Table)”上添加“列存储索引(Columnstore...
  • zhanghongju
  • zhanghongju
  • 2015年08月25日 13:56
  • 1823

SQL Server 2016 新功能之综述

SQL Server2016 新功能之综述 冬去春来,发现之前最后一篇写在2012年,又过去了5年了,时间如飞啊。那时候SQL 2012 发布让人兴奋了一把,哪知道时间如刀,刀刀催人老啊,今天SQ...
  • capsicum29
  • capsicum29
  • 2017年02月18日 15:10
  • 2334

SQL Server 2016新特性: 对JSON的支持

SQL Server 2005开始支持XML数据类型,提供原生的XML数据类型、XML索引及各种管理或输出XML格式的函数。随着JSON的流行,SQL Server2016开始支持JSON数据类型,...
  • Burgess_Liu
  • Burgess_Liu
  • 2016年06月01日 17:15
  • 3815

Expert SQL Server In-Memory OLTP(2nd) 无水印pdf

  • 2017年09月29日 12:20
  • 11.97MB
  • 下载

Expert SQL Server In Memory OLTP(2nd) 无水印pdf

  • 2017年09月29日 12:17
  • 11.97MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 2016新特性: In-Memory OLTP
举报原因:
原因补充:

(最多只允许输入30个字)