• 初识内存优化表


    创建数据库

    创建内存优化数据文件组

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

    创建内存优化数据文件

       在文件组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 Boot整合JPA
    Emmet Cheat Sheet All In One
    CCTV《航拍中国》系列视频 All In One
    上海市税务局服务 All In One
    CCTV 天气预报 All In One
    Next.js Tutorials All In One
    如何使用 GitHub Actions 发布 Gatsby 静态网站 All In One
    GitHub Code Security & Code Scanning All In One
    数字滚动显示组件 All In One
    Gatsby plugins All In One
  • 原文地址:https://www.cnblogs.com/poepoe/p/7196284.html
Copyright © 2020-2023  润新知