将磁盘表迁移到内存中的OLTP表所需的过程并不简单,需要在做出最终的迁移决策之前进行充分的分析。然而,内存中的OLTP表带来的好处值得您的努力。
假设我们有以下磁盘表:
CREATE TABLE <Disk based table name>
(
id INT Primary Key,
fname VARCHAR(10)
);
GO
让我们逐步了解该过程。
为了拥有一个内存优化的表,你的数据库需要有一个内存优化的文件组和一个分配给它的文件。按照以下步骤进行操作,如果已经设置好,请忽略:
ALTER DATABASE <Your Database>
ADD FILEGROUP <Filegroup Name>
CONTAINS MEMORY_OPTIMIZED_DATA;
ALTER DATABASE <Your Database>
ADD FILE
(
NAME = <File Name>,
FILENAME = <File store location>
)
TO FILEGROUP <Filegroup Name>;
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/database-administration/migrating-disk-based-table-memory-optimized-table-sql-server/
还有另一个有用的GitHub链接:
https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/sql-database/sql-database-in-memory-oltp-migration.md