CREATE SEQUENCE的CACHE选项如何工作?

时间:2017-07-08 16:22:01

标签: sql-server database tsql

CREATE SEQUENCECACHE选项

MSDN将其定义为

[ CACHE [<constant> ] | NO CACHE ]
     

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

据我所知,它通过避免从磁盘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 个答案:

答案 0 :(得分:3)

该文档中的这一段非常有用:

  

例如,创建一个新序列,其起始值为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时。< / p>