SQL 服务器 2014 SP2。正如标题所说,我们已将其中一个数据库表转换为内存中。在我们这样做之后,相应的内存优化文件组在磁盘上占用 1GB,但在更大的服务器上它高达 4GB)。我怀疑这与 CPU 的数量有关。
桌子是空的!表的结构没什么特别的,像这样:
Id int
StatusId int
ReviewRequired bit
SourceDate datetime
UserID int
InsertDate datetime
UpdateDate datetime
为什么它在磁盘上占用这么多空间?我看了看,但找不到任何方法来控制创建的内存优化文件的大小。
这是用于创建内存表的 T-SQL 脚本:
CREATE TABLE [dbo].[MyTable]
( [Id] [INT] NOT NULL,
[StatusId] [INT] NOT NULL,
[Reviewed] [BIT] NOT NULL,
[CreateDate] [DATETIME] NOT NULL,
[RequestID] [INT] NULL,
[InsertDate] [DATETIME] NULL,
[UpdateDate] [DATETIME] NULL,
CONSTRAINT [PK_Id] PRIMARY KEY NONCLUSTERED HASH
(
[Id]
)WITH ( BUCKET_COUNT = 16),
INDEX [IX_StatusId] NONCLUSTERED HASH
(
[StatusId]
)WITH ( BUCKET_COUNT = 64)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )
我想结束我自己的问题的循环。我们就此与 Microsoft 支持部门合作,底线是:“这是设计使然”。我坚信这是一个有缺陷的设计,应该改变。Microsoft 支持工程师为此打开了功能更改请求。此外,我为此创建了一个“MS Connect”项目。如果您同意请求,请对其进行投票: https ://connect.microsoft.com/SQLServer/feedback/details/3116296/enabling-in-memory-feature-for-databases-takes-up-huge-amount- of-disk-space-for-checkpoint-file-pairs-cfps-in-cases-when-there-many-databases-on-a-sql-server-instance