初识内存优化表

Posted Garen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识内存优化表相关的知识,希望对你有一定的参考价值。

创建数据库

创建内存优化数据文件组

   注意:每个数据库只能创建一个内存优化数据文件组。

创建内存优化数据文件

   在文件组MemoryOptimizedData中添加一个文件夹MemoryOptimizedDataFile用来保存内存优化表数据

 

创建内存优化表

    内存优化表分为两种类型:

  • 持久表(默认):把数据保存在内存和内存优化数据文件组中。
  • 非持久表:数据仅保存在内存中,一旦系统因为故障导致重启数据将会丢失。

    因为SSMS目前不支持可视化创建,So只能手动创建内存优化表:

 1 USE MyDB;
 2 GO
 3 
 4 CREATE TABLE MemoryOptimizedTable
 5 (
 6     [ID] INT NOT NULL PRIMARY KEY NONCLUSTERED HASH --此处必须定义非聚集哈希索引主键
 7                       WITH (BUCKET_COUNT = 1024), --此处必须由WITH设置BUCKET_COUNT(存储槽)
 8     [Name] NVARCHAR(50) NOT NULL
 9 )
10 WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA); --此处表示开启持久内存优化

    注意:目前内存优化表有这些限制(1.不支持外键或约束检查;2.不支持IDENTITY自动增长列;3.不支持DML触发器;4.内存一旦耗尽将导致数据写入失败)

    插入15W条测试数据(用时197s):

 创建本地编译存储过程

    本地编译存储过程比普通存储过程执行更快内存占用更少。

    循环执行15W次查询:

 1 CREATE PROCEDURE MemoryProc
 2     WITH NATIVE_COMPILATION, --声明本地编译
 3          SCHEMABINDING, --将视图绑定到架构上
 4          EXECUTE AS OWNER --指定执行用户为当前所有者
 5 AS
 6 BEGIN ATOMIC WITH 
 7 (
 8     TRANSACTION ISOLATION LEVEL = SNAPSHOT, --指定事务隔离级别(SNAPSHOT确保是提交后的最新结果并且可以重复读取)
 9     LANGUAGE = \'us_english\' --指定语言
10 ) 
11     DECLARE @num INT = 1;
12     WHILE @num <= 150000
13     BEGIN
14         SELECT [ID], [Name] --此处为绑定到架构的具体对象,所以不能使用\'*\'
15         FROM dbo.MemoryOptimizedTable --此处必须指定当前所有者dbo
16         WHERE [ID] = RAND() * 150000;
17         SET @num = @num + 1;
18     END;
19 END;

 内存优化表 VS 普通表

    创建普通表:

1 USE MyDB;
2 GO
3 
4 CREATE TABLE GeneralTable
5 (
6     [ID] INT NOT NULL PRIMARY KEY,
7     [Name] NVARCHAR(50) NOT NULL
8 )

    同样的插入15W条测试数据(用时324s):

 

    创建普通的存储过程(循环执行15W次查询):

 1 CREATE PROCEDURE GeneralProc 
 2 AS
 3 DECLARE @num INT = 1;
 4 WHILE @num <= 150000
 5 BEGIN
 6     SELECT [ID], [Name]
 7     FROM GeneralTable
 8     WHERE [ID] = RAND() * 150000;
 9     SET @num = @num + 1;
10 END;

    普通表并发压力性能测试:

    并发线程数(Number of Threads):10

    用时(Elapsed Time):6907s

    内存优化表并发压力性能测试:

 

    并发线程数(Number of Threads):10

    用时(Elapsed Time):137s

总结

    从并发压力性能测试结果可以看出内存优化表完爆普通表!厉害了!Word内存优化表!官方表示内存优化表将来会有很多改进,让我们拭目以待吧!

以上是关于初识内存优化表的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

SQLServer 2014 内存优化表

React初识整理

优化 R 中输出表生成的代码

《初识PE》导出表

Java初识方法