如果你的系统有高并发的要求,可以尝试使用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:\Database\SomeDatabase_InMemory'
)
TO FILEGROUP Memory; ALTER DATABASE SomeDatabase
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON;
GO

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

CREATE TABLE [dbo].[CachedData]
(
[Key] [VARCHAR]() 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 = ,
MAX_MEMORY_PERCENT =
);
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

最新文章

  1. php内部函数
  2. IIS Community Newsletter June 2013
  3. MySQL Cluster在线添加数据节点
  4. [dpdk] 熟悉SDK与初步使用 (二)(skeleton源码分析)
  5. 17+个ASP.NET MVC扩展点【附源码】
  6. DotNetOpenAuth使用笔记
  7. Activiti开启SQL Log
  8. 好的 iOS 代码习惯
  9. codeforces 356 C. Compartments 构造 贪心
  10. CSS3如何实现2D转换和3D转换,他们有何区别
  11. 安装 SQL Server 2012 的硬件和软件要求(官方全面)
  12. .net 框架
  13. PHP date()函数详解
  14. Jquery中的 Deferred分析
  15. Apple Watch 开发详解
  16. Java判断对象是否为NULL
  17. [转]JavaScript与元素间的抛物线轨迹运动
  18. C 中的typedef应用
  19. Netty 源码剖析之 unSafe.read 方法
  20. LeetCode题解之Missing Number

热门文章

  1. Codeforce-620C
  2. 记录一些实用的小技巧-JS篇
  3. 函数计算: 让小程序开发进入 Serverless 时代
  4. 【Feign】自定义配置
  5. 浅析堆栈段,BBS段,数据段,代码段
  6. .NET Core依赖注入集成Dynamic Proxy
  7. ubuntu19_nginx_uwsgi_flask_apt安装
  8. Winform中实现自定义屏保效果(附代码下载)
  9. CTF KFIOFan: 2 Vulnhub Walkthorugh
  10. Bash脚本编程之算术运算