使用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:\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
使用SQL Server内存优化表 In-Memory OLTP的更多相关文章
- SQL Server 内存优化表的索引设计
测试的版本:SQL Server 2017 内存优化表上可以创建哈希索引(Hash Index)和内存优化非聚集(NONCLUSTERED)索引,这两种类型的索引也是内存优化的,称作内存优化索引,和基 ...
- Sql server2014 内存优化表 本地编译存储过程
参考文献:http://www.infoq.com/cn/news/2013/09/Compiled-Queries http://www.bianceng.cn/database/SQLServer ...
- SQL Server 2014内存优化表的使用场景
SQL Server 2014内存优化表的使用场景 最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表是从SQL Server 2014开始引入,可能大家对内存优化表 ...
- SQL Server 2014内存优化表的使用场景(转载)
最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表作为In-Memory OLTP功能是从SQL Server 2014开始引入,用来对抗Oracle 12C的In- ...
- SQL Server 内存泄露(memory leak)——游标导致的内存问题
原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...
- In-Memory:内存优化表的事务处理
内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...
- 试试SQLSERVER2014的内存优化表
试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技 ...
- In-Memory:内存优化表 DMV
在内存优化表的DMV中,有两个对象ID(Object ID): xtp_object_id 是内部的内存优化表(Internal Memory-Optimized Table)的ID,在对象的整个生命 ...
- SQL Server 内存中OLTP内部机制概述(一)
----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...
随机推荐
- [TimLinux] django aggregate和annotate示例
1. 聚合与注解 聚合(aggregate)比较好理解,注解(annotate)真不好理解,这篇示例参考了文章“django中聚合aggregate和annotate GROUP BY的使用方法”提供 ...
- 强化学习二:Markov Processes
一.前言 在第一章强化学习简介中,我们提到强化学习过程可以看做一系列的state.reward.action的组合.本章我们将要介绍马尔科夫决策过程(Markov Decision Processes ...
- 2017 CCPC秦皇岛 L题 One Dimensions Dave
BaoBao is trapped in a one-dimensional maze consisting of grids arranged in a row! The grids are nu ...
- 模电&数电知识整理(不定期更新)
模电总复习之爱课堂题目概念整理 Chapter 1 1) 设室温情况下某二极管的反偏电压绝对值为1V,则当其反偏电压值减少100mV时,反向电流的变化是基本不发生变化. 2) 二极管发生击穿后,在击穿 ...
- CentOS7安装部署squid服务(透明代理+反向代理)
一.squid服务介绍 Squid是一个高性能的代理缓存服务器,Squid支持FTP.gopher.HTTPS和HTTP协议.和一般的代理缓存软件不同,Squid用一个单独的.非模块化的.I/O驱动的 ...
- 表格数据js初始绑定
html调用js文件,js初始化时发送Ajax请求,获取页面数据将其写入在html页面上展示 html <div class="card-body"> <!-- ...
- SSM-配置tkmybatis
引言 Mybatis 与 Hibernate的一个很大的区别就是Mybatis所有的数据库操作语句都需要自己写,对于简单的单表操作来说是比较烦琐的.因此有人就开发了tk.mybatis插件,通过这个插 ...
- 在.NET Core控制台中使用依赖注入
本文介绍如何在控制台应用程序中使用微软提供的依赖注入功能,掌握控制台中的用法后,可以扩展到构建windows服务中. 创建控制台应用程序 添加DependencyInjection的引用 Instal ...
- 阿里云服务器部署Tornado应用
本篇详细介绍tornado应用部署到阿里云服务器上的全过程. Tornado程序地址:github https://github.com/ddong8/ihasy.git 准备工作:阿里云服务器Cen ...
- Linux服务器部署.Net Core笔记:六、安装MySQL
接下来我们在 Centos7 系统下使用 yum 命令安装 MySQL,需要注意的是 CentOS 7 版本中 MySQL数据库已从默认的程序列表中移除,所以在安装前我们需要先去官网下载 Yum 资源 ...