创建序列的缓存选项如何工作?



CREATE SEQUENCECACHE选项

MSDN 将其定义为

[ CACHE [<constant> ] | NO CACHE ]

通过以下方式提高使用序列对象的应用程序的性能 最小化生成所需的磁盘 IO 数 序列号。默认为缓存。例如,如果缓存大小 选择 50,SQL Server 不缓存 50 个单独的值。它 仅缓存当前值和剩余值的数量 缓存。这意味着存储 缓存始终是序列对象数据类型的两个实例。

我知道它通过避免从磁盘 IO 读取并在内存中维护一些有助于可靠地生成序列中下一个数字的信息来提高性能,但我无法想象缓存的简单内存表示形式对于 MSDN 在示例中描述的内容会是什么样子。

有人可以解释一下缓存将如何使用此序列吗

CREATE SEQUENCE s
AS INT
START WITH 0  
INCREMENT BY 25  
CACHE 5

描述当以下每个语句独立执行时,高速缓存将容纳什么:

SELECT NEXT VALUE FOR s -- returns 0
SELECT NEXT VALUE FOR s -- returns 25
SELECT NEXT VALUE FOR s -- returns 50
SELECT NEXT VALUE FOR s -- returns 75
SELECT NEXT VALUE FOR s -- returns 100
SELECT NEXT VALUE FOR s -- returns 125

文档中的这一段非常有帮助:

例如,创建一个起始值为 1、缓存大小为 15 的新序列。当需要第一个值时,值 1 到 15 可从内存中获取。上次缓存的值 (15( 写入磁盘上的系统表。当所有 15 个数字都 使用时,下一个请求(对于数字 16(将导致缓存 再次分配。新的最后一个缓存值 (30( 将写入 系统表。

所以,在你的场景中

CREATE SEQUENCE s
AS INT
START WITH 0  
INCREMENT BY 25  
CACHE 5

您将在内存中0, 25, 50, 75 and 100,并且只会在磁盘中获得一个I/O写入:100

文档中解释的您可能遇到的问题是,如果服务器出现故障并且您没有使用所有 5 个项目,下次您要求值时,您会得到125.

最新更新