SQL Server - 迁移到内存表期间出现内存配额错误

Posted

技术标签:

【中文标题】SQL Server - 迁移到内存表期间出现内存配额错误【英文标题】:SQL Server - Memory quota error during migration to in-memory table 【发布时间】:2021-12-14 23:47:55 【问题描述】:

我们目前正在迁移到 SQL Server 2019 标准版上的内存表。基于磁盘的表是 55GB 数据 + 54Gb 索引(71M 记录)。内存为 900 GB。但是在数据迁移过程中(INSERT 语句),我们收到一条错误消息:

消息 41823,第 16 级,状态 109,行 150 无法执行该操作,因为数据库已达到其内存表配额。此错误可能是暂时的。请重试操作。

内存中的文件是“无限的”,所以看起来很奇怪,因为 SQL Server 2019 不应该对内存中的表有任何大小限制。

【问题讨论】:

【参考方案1】:

为什么您认为标准版中单个 mem-opt 表中的内存数据大小是无限的?

来自Memory Limits in SQL Server 2016 SP1(根据2019 docs,所有这些仍然适用):

实例上的每个用户数据库可以额外分配 32GB 给内存优化表,超出缓冲池限制。

所以,我想你可以做你想做的事,但你必须将它分布在多个数据库中。您将无法在单个 mem-opt 表中存储超过 32GB 的空间,甚至不能在单个数据库中的多个 mem-opt 表中存储。

来自the 2019 docs 的截屏并且可能缩放不当:

【讨论】:

谢谢!这是我的错。我刚刚注意到一个博客上的一句话:“Microsoft 推荐的用于存储持久内存优化表(将在恢复过程中使用)的最大内存大小在 SQL Server 2016 中增加到 2 TB ,而不是 SQL Server 2014 中的 256 GB 建议。"

以上是关于SQL Server - 迁移到内存表期间出现内存配额错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER 2000企业管理器,“打开表"可是系统显示:在执行该操作期间出现意外错误!

流分析是不是支持输出到 SQL Server 内存优化表?

SQL Server:将数据从一个表传输到另一个 [内存分配失败]

在 couchdb 从 1.6.1 迁移到 2.3.1 期间,由于内存问题 couchup 实用程序需要大量时间重建视图

SQL Server迁移本机表数据信息

SQL Server 内存优化表 - 与临时表相比性能较差