Paul White Asked: 2022-08-04 12:39:11 +0800 CST2022-08-04 12:39:11 +0800 CST 2022-08-04 12:39:11 +0800 CST SQL Server LOB 变量和内存使用情况 772 当我在 SQL Server 中使用大对象 (LOB) 数据类型的变量时,整个内容是否始终保存在内存中?即使它是2GB的大小? sql-server memory 1 个回答 Voted Best Answer Paul White 2022-08-04T12:39:11+08:002022-08-04T12:39:11+08:00 2GB LOB 限制仅适用于持久存储;变量没有限制。 SQL Server从纯内存实现开始。 如果 LOB 数据的大小超过512KB(524,288 字节),它将更改为基于tempdb的备份方案。 备份方案将 LOB 数据存储在内部tempdb LOB 页的树中。 这些tempdb页面像往常一样缓存在缓冲池中,但可能会根据需要由惰性写入器刷新到磁盘。 即使所有页面都保留在内存中,使用tempdb支持的方案也会产生额外的开销。 当变量超出范围时,页面被同步释放。对于非常大的 LOB,这可能需要一些时间。 DECLARE -- 512KB: In-memory @V1 varchar(max) = REPLICATE(CONVERT(varchar(max), 'X'), 524288), -- 512KB + 1: Buffered, tempdb-backed @V2 varchar(max) = REPLICATE(CONVERT(varchar(max), 'X'), 524289); 限制以字节为单位,因此存储的字符数取决于编码。
2GB LOB 限制仅适用于持久存储;变量没有限制。
SQL Server从纯内存实现开始。
如果 LOB 数据的大小超过512KB(524,288 字节),它将更改为基于tempdb的备份方案。
备份方案将 LOB 数据存储在内部tempdb LOB 页的树中。
这些tempdb页面像往常一样缓存在缓冲池中,但可能会根据需要由惰性写入器刷新到磁盘。
即使所有页面都保留在内存中,使用tempdb支持的方案也会产生额外的开销。
当变量超出范围时,页面被同步释放。对于非常大的 LOB,这可能需要一些时间。
限制以字节为单位,因此存储的字符数取决于编码。