Ошибка создания таблиц в памяти

Я пытаюсь создать таблицу в памяти, но она продолжает выдавать мне такие ошибки, как:

Сообщение 10794, уровень 16, состояние 85, строка 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

person Tyler    schedule 27.10.2014    source источник
comment
Пожалуйста, опубликуйте свой код или его упрощенную версию.   -  person Brett Wolfington    schedule 27.10.2014


Ответы (2)


Таблицы OLTP в памяти имеют ряд ограничений по сравнению с остальными компонентами, которые обычно поставляются с MS SQL. Посетите http://msdn.microsoft.com/en-us/library/dn246937.aspx для полного списка.

Например, кластеризованные ПК не поддерживаются. Вместо этого вам придется использовать некластеризованные индексы первичного ключа.

person Ryan Nigro    schedule 27.10.2014
comment
Спасибо за это, но как мне это изменить? Я только новичок в SQL Server... Не могли бы вы привести пример? - person Tyler; 27.10.2014
comment
Честно говоря, если вы новичок в SQL Server, я бы не рекомендовал пытаться реализовать какие-либо таблицы в памяти в SQL Server. Просто используйте традиционные таблицы (где вы не будете подвергаться ограничениям, связанным с использованием таблиц в памяти). Вы можете использовать SQL 2014 без использования таблиц в памяти. - person Ryan Nigro; 28.10.2014

Ниже приведен пример того, как вы можете создать эту таблицу в 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);
person Dan Guzman    schedule 27.10.2014
comment
Большое вам спасибо, к счастью, я работаю с более опытными специалистами по SQL, и они помогают мне с мелочами, в которых я не уверен. Тем не менее, я тестирую для них SQL 2014 в памяти, поэтому они мало что знают об этой теме... Еще раз спасибо за помощь: D очень признателен - person Tyler; 27.10.2014
comment
@Tyler, я добавил в свой ответ необходимые операторы CREATE DATABASE и ALTER DATABASE, чтобы помочь вам начать работу. - person Dan Guzman; 27.10.2014
comment
Спасибо за помощь :D... Я установил это и попросил одного из парней протестировать его на нашем программном обеспечении, он получил следующую ошибку; Распределенные запросы и множественные активные наборы результатов (MARS) не поддерживаются таблицами, оптимизированными для памяти. - person Tyler; 28.10.2014
comment
@Tyler, как мы уже упоминали здесь, существует множество ограничений на использование таблиц, оптимизированных для памяти. Некоторым потребуются изменения схемы и/или приложения, поэтому это может быть не вариант. Таблицы в памяти могут быть решением проблемы, которой у вас нет, поэтому я предлагаю вам подумать о том, чего вы пытаетесь достичь, прежде чем приступать к реализации. - person Dan Guzman; 28.10.2014