小编Avi*_*i.M的帖子

内存中用户定义的表,不在内存中?

我正在使用SQL Server 2014 CTP2,READ_COMMITTED_SNAPSHOT ON(我认为这对问题很重要).

我创建了一个In-Memory表类型(非常类似于technet博客,SQL Server 2014 In Memory OLTP:内存优化表类型和表变量),我有几个内存表.

在查询本身中,我在常规内存表和内存表类型之间有一个连接,充当过滤器,当我执行查询时,我收到此错误消息:"使用READ访问内存优化表的查询当数据库选项READ_COMMITTED_SNAPSHOT设置为ON时,COMMITTED隔离级别无法访问基于磁盘的表.使用表提示(例如WITH(SNAPSHOT))为内存优化表提供支持的隔离级别.

我正在写这个问题时删除了READ_COMMITTED_SNAPSHOT,但问题仍然存在,如果我创建了一个内存数据类型,并且这个特定类型将"永远不会溢出到磁盘",正如博客所说,为什么呢?服务器"看到"它作为"磁盘表?

为了清理,我尝试只使用In-Mem表进行连接并且它可以工作,只要表类型进来我就得到了错误.

更新:当我删除READ_COMMITTED_SNAPSHOT(现在已关闭)时,查询有效,但现在我已经丢失了多版本/无锁定/速度,我想听听另一个解决方案.

谢谢

重现步骤.

使用内存优化文件组创建数据库

CREATE DATABASE MemOptimized

GO

ALTER DATABASE MemOptimized 
    ADD FILEGROUP mofg 
    CONTAINS MEMORY_OPTIMIZED_DATA

GO

ALTER DATABASE MemOptimized 
    ADD FILE (  NAME = N'mofg', 
                FileName = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MemOptimized.ndf') 
    TO FILEGROUP mofg
Run Code Online (Sandbox Code Playgroud)

创建一些对象

CREATE TYPE [dbo].[tType] AS TABLE(
        [C] [int] NOT NULL
        INDEX ix NONCLUSTERED HASH (C) WITH (BUCKET_COUNT = 8)
    ) WITH ( MEMORY_OPTIMIZED = ON )

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

sql-server in-memory user-defined-types sql-server-2014 memory-optimized-tables

10
推荐指数
2
解决办法
3920
查看次数