StateServer是存在iis服务还是windows某一个服务

默认情况下Memory optimized table是完全持久的(即为durable memory optimized table),如传统的基于磁盘的表上的事务一样,并且完全持久的事务也是支持原子、一致、隔离和持久 (ACID) 的。所不同的是内存优化表的整个表的主存储是在内存中,即为从内存读取表中的行,和更新这些行数据到内存中。 并非像是传统基于磁盘的表按照数据库数据库页面装载数据库。内存优化表的数据同时还在磁盘上维护着另一个副本,但仅用于持续性目的。 在数据库恢复期间,内存优化的表中的数据再次从磁盘装载。 创建持久的内存优化表方法如下:
CREATE TABLE DurableTbl
(AccountNo INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 28713)
,CustName VARCHAR(20) NOT NULL
,Gender CHAR NOT NULL /* M or F */
,CustGroup VARCHAR(4) NOT NULL /* which customer group he/she belongs to */
,Addr VARCHAR(50) NULL /* No address supplied is acceptable */
,Phone VARCHAR(10) NULL /* Phone number */
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_AND_DATA)
除了默认持久的内存优化表之外,还支持non-durable memory optimized table(非持久化内存优化表),不记录这些表的日志且不在磁盘上保存它们的数据。 这意味着这些表上的事务不需要任何磁盘 IO,但如果服务器崩溃或进行故障转移,则无法恢复数据。创建非持久化内存优化表方法如下:
CREATE TABLE NonDurableTbl
(AccountNo INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 28713)
,CustName VARCHAR(20) NOT NULL
,Gender CHAR NOT NULL /* M or F */
,CustGroup VARCHAR(4) NOT NULL /* which customer group he/she belongs to */
,Addr VARCHAR(50) NULL /* No address supplied is acceptable */
,Phone VARCHAR(10) NULL /* Phone number */
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY)
Native compiled stored procedure(本地编译存储过程)是针对传统的存储过程而言的,是本机编译存储过程后生成DLL,由于本机编译是指将编程构造转换为本机代码的过程,这些代码由处理器指令组成,无需进一步编译或解释。与传统TSQL 相比,本机编译可提高访问数据的速度和执行查询的效率。故通过本机编译的存储过程,可在存储过程中提高查询和业务逻辑处理的效率。创建方法本地编译存储过程方法如下:
CREATE PROCEDURE dbo.usp_InsertNonDurableTbl
@AccountNo int,
@CustName nvarchar(20),
@Gender char(1),
@CustGroup varchar(4),
@Addr varchar(50),
@Phone varchar(10)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
BEGIN
INSERT INTO [dbo].[DurableTbl]
([AccountNo]
,[CustName]
,[Gender]
,[CustGroup]
,[Addr]
,[Phone])
VALUES (@AccountNo
,@CustName
,@Gender
,@CustGroup
,@Addr
,@Phone)
END
END
GO
内存数据库既可以包含内存优化表和本地编译存储过程,又可以包含基于磁盘的表和传统存储过程,各个对象之间数据存储、和访问的架构如下所示:

使用场景
传统基于磁盘的表,通常会遇到内存页面置换、死锁、造成了吞吐量有限、事务延迟较长等问题,内存数据库的内存优化表由于常驻内存,适用于低延迟、高并发、快速数据传输和装载等场景。各场景的使用、机制具体如下:
低延迟:由于内存优化表和本地编译存储过程直接生成DLL,本机编译可提高访问数据的速度和执行查询的效率响应速度快,作为参与处理业务逻辑的存储过程而言,大大降低了存储过程作为中间层执行和访问的效率。提高了应用的访问效率,降低了延迟性。
内存优化表的创建和装载过程如下:

本地编译存储过程的创建和装载过程如下:

对于基于磁盘的表和内存优化表,我们可以在以下示例中对比内存优化表:创建两个同样结构的表,一个为基于磁盘的表包含1700万条记录,当使用常规存储过程查询一条记录,查询时间为67ms;

另一个为内存优化表包含1亿条记录。当使用本地编译存储过程查询内存优化表,所需的执行时间不到1毫秒。

当我们进一步查看两个存储过程的执行计划,发现第一个已经使用聚集索引检索,第二个本地编译存储过程如所预期的,是基于内存优化表的索引检索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值