zoukankan      html  css  js  c++  java
  • 使用SQL Server内存优化表 In-Memory OLTP

    如果你的系统有高并发的要求,可以尝试使用SQL Server内存优化表来提升你的系统性能。你甚至可以把它当作Redis来使用。

    要使用内存优化表,首先要在现在数据库中添加一个支持内存优化的文件组。

    Memory Optimized File Group

    可以使用下列脚本来向现有数据库添加内存优化文件组:

    ALTER DATABASE SomeDatabase
    ADD FILEGROUP Memory
    CONTAINS MEMORY_OPTIMIZED_DATA;
    
    ALTER DATABASE SomeDatabase
    ADD FILE
        (
            NAME = 'SomeDatabase_InMemory',
            FILENAME = 'E:DatabaseSomeDatabase_InMemory'
        )
    TO FILEGROUP Memory;
    
    ALTER DATABASE SomeDatabase
    SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON;
    GO

    创建内存优化表,使用MEMORY_OPTIMIZED = ON来启用内存优化:

    CREATE TABLE [dbo].[CachedData]
    (
        [Key] [VARCHAR](900) NOT NULL,
        [Data] [VARBINARY](MAX) NOT NULL,
        [Expiry] [DATETIME] NOT NULL,
        PRIMARY KEY NONCLUSTERED ([Key] ASC)
    )
    WITH (MEMORY_OPTIMIZED = ON);

    这样内存优化表就可以使用了,另外如果你的数据不需要进行持久化存储,可以使用DURABILITY = SCHEMA_ONLY,来得到更好的性能:

    优化进阶

    在使用内存优化表的过程中发现,当并发大或数据库压力大时,访问内存优化表会提示内存不足的情况,但实际内存是够的。这其实是一个误报,可以查看微软官方文档了解更多详情:

    简单的说,要解决这个问题就是需要打开Resource Governor,Resource Governor在默认情况下是关闭的。

    为了更好的管理资源的使用情况,我们需要给缓存的这个数据库创建一个独立的Resource Pool,与系统默认的Resource Pool独立开。

    Create Resource Pool

    创建一个新的Resource Pool:

    -- Disable resource governor
    ALTER RESOURCE GOVERNOR DISABLE;
    GO
    CREATE RESOURCE POOL CacheDbPool
    WITH
    (
        MAX_CPU_PERCENT = 50,
        MAX_MEMORY_PERCENT = 30
    );
    GO
    -- Reconfigure resource governor
    -- Reconfigure enables resource governor
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    GO

    详细配制参数可参阅微软官方文档:

    Bind Resource Pool

    将新建的Resource Pool和数据库进行关联:

    -- Bind Database with resource pool
    EXEC sys.sp_xtp_bind_db_resource_pool @database_name = N'SomeDatabase',
                                          @pool_name = N'CacheDbPool';
    
    -- Take database offline and then bring it back online to begin using resource pool.
    GO
    USE [master];
    GO
    ALTER DATABASE [SomeDatabase] SET OFFLINE;
    GO
    ALTER DATABASE [SomeDatabase] SET ONLINE;
    GO
     

    这样内存优化就设置完成了。

    如果需要删除Resource Pool,需要先解绑数据库:

    -- Unbind resource pool and drop it.
    EXEC sys.sp_xtp_unbind_db_resource_pool @database_name = N'SomeDatabase';
    DROP RESOURCE POOL CacheDbPool;

    原文地址:http://www.zkea.net/codesnippet/detail/sql-server-in-memory-oltp.html

  • 相关阅读:
    让你的网站(MAXCMS4_0)按地区、年份、语言生成分页面(已经修正)
    IPTV
    超简单,MAX普通版改为资源版方法
    Jmter操作数据库
    JMter中添加断点和关联
    jmeter返回报文乱码问题
    Jmter安装和配置
    JMter压力测试
    今天注册了
    不能登陆后删除Cookies解决
  • 原文地址:https://www.cnblogs.com/seriawei/p/sql-server-in-memory-oltp.html
Copyright © 2011-2022 走看看