【问题标题】:Error creating In-Memory Tables创建内存表时出错
【发布时间】:2014-10-27 19:00:57
【问题描述】:

我正在尝试在内存中创建一个表,但它不断给我错误,例如:

Msg 10794, Level 16, State 85, Line 11 索引选项'pad_index'是 内存优化表上的索引不支持。

另一个人对主键集群说同样的话。

上面这两个东西(pad_index 和 PK Clustered)是必需的,除非有其他方法可以让它工作......

[DEMO-Training1] 
GO

/****** Object: Table [dbo].[wtAssetChildren] ******/ 
SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

CREATE TABLE [dbo].[wtAssetChildren] ( 
  [wtAssetChildrenID] [int] IDENTITY(1,1) NOT NULL, 
  [wtGUID] [uniqueidentifier] NOT NULL, 
  [CallingAssetID] [int] NOT NULL, 
  [AssetID] [int] NOT NULL, 
  [Processed] [bit] NOT NULL, 
  CONSTRAINT [PK_wtAssetChildren] PRIMARY KEY CLUSTERED ([wtAssetChildrenID] ASC)
  WITH (
    PAD_INDEX = OFF, 
    STATISTICS_NORECOMPUTE = OFF, 
    IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON
  ) ON [PRIMARY] 
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[wtAssetChildren] 
ADD CONSTRAINT [DF_wtAssetChildren_Processed] DEFAULT ((0)) FOR [Processed] GO

【问题讨论】:

  • 请发布您的代码或其简化版本。

标签: sql sql-server sql-server-2014


【解决方案1】:

内存中 OLTP 表相对于 MS SQL 通常附带的其他内容有很多限制。查看http://msdn.microsoft.com/en-us/library/dn246937.aspx 获取完整列表。

例如,不支持集群 PK。您必须改用非聚集主键索引。

【讨论】:

  • 谢谢你,但我将如何改变这个?我只是 SQL Server 的初学者……你能给我举个例子吗?
  • 坦率地说,如果您是 SQL Server 新手,那么我不建议您尝试在 SQL Server 中实现任何类型的内存表。只需使用传统表(您将不受使用内存表的限制)。您可以在不使用内存表的情况下使用 SQL 2014。
【解决方案2】:

以下是如何在内存优化的 SQL Server 2014 中创建此表的示例。请注意,您可以,并不意味着您应该这样做。您提到您是初学者,内存优化表更像是一个高级选项。

CREATE DATABASE MemoryOptimizedTest;
GO

ALTER DATABASE MemoryOptimizedTest
    ADD FILEGROUP MemoryOptimizedTest_MemoryOptimized
    CONTAINS MEMORY_OPTIMIZED_DATA;
GO

ALTER DATABASE MemoryOptimizedTest 
    ADD FILE (
          NAME = 'MemoryOptimizedTest__MemoryOptimized1'
        , FILENAME = 'D:\SqlDataFiles\MemoryOptimizedTest__MemoryOptimized1') 
    TO FILEGROUP MemoryOptimizedTest_MemoryOptimized;
GO

ALTER DATABASE MemoryOptimizedTest
    SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON;
GO

USE MemoryOptimizedTest;
GO

CREATE TABLE [dbo].[wtAssetChildren](
       [wtAssetChildrenID] [int] IDENTITY(1,1) NOT NULL
     , [wtGUID] [uniqueidentifier] NOT NULL
     , [CallingAssetID] [int] NOT NULL
     , [AssetID] [int] NOT NULL
     , [Processed] [bit] NOT NULL
        CONSTRAINT [DF_wtAssetChildren_Processed] DEFAULT ((0))
     , CONSTRAINT [PK_wtAssetChildren] PRIMARY KEY NONCLUSTERED( [wtAssetChildrenID] ASC )
     )
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_AND_DATA);

【讨论】:

  • 非常感谢,幸运的是我与更有经验的 SQL 书呆子一起工作,他们正在帮助我解决我不确定的小事情。但是,我正在为他们在内存中测试 SQL 2014,所以他们对这个主题不太了解......再次感谢您的帮助:D 非常感谢
  • @Tyler,我在答案中添加了所需的 CREATE DATABASEALTER DATABASE 语句以帮助您入门。
  • 感谢您的帮助 :D... 我已经设置了这个并让其他人在我们的软件上对其进行测试,他收到以下错误;内存优化表不支持分布式查询和多个活动结果集 (MARS)。
  • @Tyler,正如我们在这里提到的,使用内存优化表有很多限制。有些将需要架构和/或应用程序更改,因此它可能不是一个选项。内存表可能是解决您没有的问题的解决方案,因此我建议您在完成实施工作之前考虑一下您要完成的工作。
猜你喜欢
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2020-02-20
  • 2013-06-10
  • 2014-07-24
相关资源
最近更新 更多