процесс, необходимый для переноса таблиц дисков в таблицы In-Memory OLTP, не прост и требует анализа, прежде чем вы сможете принять окончательное решение о переносе.Однако преимущества, которые дает таблица In-Memory OLTP, стоят ваших усилий
Предположим, что у нас есть таблица на основе диска следующим образом:
CREATE TABLE <Disk based table name>
(
id INT Primary Key,
fname VARCHAR(10)
);
GO
Давайте пройдем процессшаг за шагом.
Чтобы иметь таблицу, оптимизированную для памяти, в вашей базе данных должна быть группа файлов, оптимизированная для памяти, и назначенный ей файл.Для этого выполните следующие действия или, если вы уже настроили их, просто проигнорируйте их:
--add the filegroup to database named TEST
ALTER DATABASE <Your Database>
ADD FILEGROUP <Filegroup Name>
CONTAINS MEMORY_OPTIMIZED_DATA;
--Add and assign a file to filegroup
ALTER DATABASE <Your Database>
ADD FILE
(
NAME = <File Name>,
FILENAME = <File store location>
)
TO FILEGROUP <Filegroup Name>;
--Simply test the database to check if it now supports in memory optimised tables or not?
USE <Your Database>;
GO
SELECT g.name,
g.type_desc,
f.physical_name
FROM sys.filegroups g
JOIN sys.database_files f
ON g.data_space_id = f.data_space_id
WHERE g.type = 'FX'
AND f.type = 2;
После этих шагов необходимо создать НОВУЮ оптимизированную таблицу памяти и перенести данные из таблицы на диске.к этому.
CREATE TABLE <In memory Table name>
(
id INT,
fname VARCHAR(10),
CONSTRAINT PK_TEST_Memory_ID
PRIMARY KEY NONCLUSTERED HASH (id) WITH(BUCKET_COUNT=1572864)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY);
GO
INSERT INTO <In memory Table name>
SELECT *
FROM <Disk based table name>;
Подробнее об этой миграции читайте в блоге Red-Gate: https://www.red -gate.com / simple-talk / sql / администрация базы данных / миграция диска на основе таблицы-памяти-optimized-table-sql-server /
А также вот еще один полезный GitHub: https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/sql-database/sql-database-in-memory-oltp-migration.md