zoukankan      html  css  js  c++  java
  • 初识内存优化表

    创建数据库

    创建内存优化数据文件组

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

    创建内存优化数据文件

       在文件组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内存优化表!官方表示内存优化表将来会有很多改进,让我们拭目以待吧!

  • 相关阅读:
    一套完整的测试应该由哪些阶段组成?
    测试结束的标准是什么?
    :你的测试职业发展目标是什么?
    您认为做好测试用例设计工作的关键是什么?
    Servlet API中forward()与redirect()的区别?
    AOP 核心概念?
    Spring 中使用了哪些设计模式?
    ArrayList类?
    如何实现拦截器?
    什么是集合?
  • 原文地址:https://www.cnblogs.com/poepoe/p/7196284.html
Copyright © 2011-2022 走看看