Hap*_*own 3 t-sql database sql-server
CREATE SEQUENCE有CACHE选择
MSDN将其定义为
Run Code Online (Sandbox Code Playgroud)[ CACHE [<constant> ] | NO CACHE ]通过最小化生成序列号所需的磁盘IO数量,提高了使用序列对象的应用程序的性能。默认为CACHE。例如,如果选择50的缓存大小,则SQL Server不会保留50个单独的值缓存。它仅缓存当前值和缓存中剩余的值数。这意味着存储高速缓存所需的内存量始终是序列对象数据类型的两个实例。
我知道它可以避免从磁盘IO读取数据并在内存中维护一些信息,从而有助于可靠地生成序列中的下一个数字,从而提高了性能,但是我无法想象MSDN所描述的缓存的简单内存表示将是什么样子在这个例子中。
有人可以解释缓存如何在此序列下工作
CREATE SEQUENCE s
AS INT
START WITH 0
INCREMENT BY 25
CACHE 5
Run Code Online (Sandbox Code Playgroud)
描述独立执行以下每个语句时高速缓存存储器将保存的内容:
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
Run Code Online (Sandbox Code Playgroud)
该文档中的这一段非常有帮助:
例如,创建一个新序列,其起始值为1,缓存大小为15。当需要第一个值时,可以从内存中获得值1到15。最后的缓存值(15)被写入磁盘上的系统表。当使用全部15个数字时,下一个请求(对于16号)将导致重新分配缓存。新的上次缓存的值(30)将被写入系统表。
因此,在您的情况下
CREATE SEQUENCE s
AS INT
START WITH 0
INCREMENT BY 25
CACHE 5
Run Code Online (Sandbox Code Playgroud)
您将拥有0, 25, 50, 75 and 100“内存”,并且只会在磁盘中写入一个I / O :100。
在文档中说明,您可能遇到的问题是服务器是否关闭并且您没有用完所有5项,下次您要求获得一个值时125。