创建、配置、重新配置和删除数据高速缓存,并提供有关信息。
sp_cacheconfig [<cachename> [, "<cache_size>
[P | K | M | G]"]
[, logonly | mixed | inmemory_storage | lockless data cache | row_storage][, strict | relaxed]]
[, "cache_partition=[1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256]"]
[, instance <instance_name>]
<cachename>
是要创建或配置的数据高速缓存的名称。高速缓存名必须是唯一的,其长度最多可以是 30 个字符。高速缓存名不一定是有效的 SAP ASE 标识符,也就是说,它可以包含空格和其它特殊字符。
<cache_size> [P | K | M | G]
要创建的数据高速缓存的大小;如果高速缓存已存在,则是该数据高速缓存的新大小。row_cache 的最小大小是服务器逻辑页大小的 256 倍。在指定大小单位时,可以用 P 表示页,用 K 表示千字节(缺省值),用 M 表示兆字节,或用 G 表示千兆字节。对于兆字节和千兆字节,可以指定浮点值。高速缓存大小是逻辑页大小的倍数。
logonly | mixed | inmemory_storage | lockless data cache | row_storage
指定高速缓存类型。
strict | relaxed
指定高速缓存替换策略。
cache_partition=[1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256]
指定在高速缓存中创建的分区数。
实例 <instance_name>
(在集群环境中)是正在调整其高速缓存的实例的名称。
示例 1
创建具有 10 MB 空间的数据高速缓存 pub_cache。所有空间都在缺省逻辑页大小内存池中:
sp_cacheconfig pub_cache, "10M"
报告 pub_cache 的当前配置和高速缓存中的所有内存池:
sp_cacheconfig pub_cache
在下次启动 SAP ASE 服务器时删除 pub_cache:
sp_cacheconfig pub_cache, "0"
使用单个步骤创建 pub_log_cache 并将其类型设置为 logonly:
sp_cacheconfig pub_log_cache, "2000K", logonly
第一个命令创建缺省类型为 mixed 的高速缓存 pub_log_cache。第二个命令将其状态更改为 logonly。最终配置与示例 4 中的配置相同:
sp_cacheconfig pub_log_cache, "2000K"
sp_cacheconfig pub_log_cache, logonly
创建高速缓存并设置大小、类型、替换策略和高速缓存分区数:
sp_cacheconfig 'newcache', '50M', mixed, strict, "cache_partition=2"
创建一个名为 pubs3_imdb 的内存存储:
sp_cacheconfig pubs_imdb, '500M', inmemory_storage
(在集群环境中)显示实例 blade1 的高速缓存:
sp_cacheconfig 'instance blade1'
(在集群环境中)将 blade1 上的 Sales Cache 大小设置为 100 MB:
sp_cacheconfig 'Sales Cache', '100M', 'instance blade1'
(在集群环境中)将 blade1 上的 Sales Cache 大小设置为 0 MB,从而在实际意义上删除该高速缓存。
sp_cacheconfig 'Sales Cache', '0M', 'instance blade1'
为 pubs2 数据库创建 20 GB 行存储高速缓存:
sp_cacheconfig "pubs2_row_cache", "20G", "row_storage"
imrs_pub_cache 中的报告:
sp_cacheconfig imrs_pub_cache
Cache Name Status Type
Config Value Run Value
---------------------------- ---------------- ----------------------
---------------------------- ------------------------
imrs_pub_cache Active Row Storage
500.00 Mb 500.00 Mb
(1 row affected)
------------ ------------
<h1> Total 500.00 Mb 500.00 Mb</h1>
Cache: imrs_pub_cache, Status: Active, Type: Row Storage
Config Size: 500.00 Mb, Run Size: 500.00 Mb
Config Replacement: none, Run Replacement: none
Config Partition: 1, Run Partition: 1
(return status = 0)
增加 pubs2_row_cache 的大小:
sp_cacheconfig "pubs2_row_cache", "30g"
减少 pubs2_row_cache 的大小(需要重新启动服务器才能生效):
sp_cacheconfig "pubs2_row_cache", "10g"
sp_cacheconfig "pubs2_vlink_cache", "10g"
将 imrs_pub_cache 增加至 500MB:
sp_cacheconfig imrs_pub_cache, "500M", "row_storage"
创建名为 sys_cache 的 1 GB 无锁数据高速缓存:
sp_cacheconfig "sys_cache", "1G", "lockless data cache", "relaxed"
| 动态 sp_cacheconfig 操作 | 静态 sp_cacheconfig 操作 |
|---|---|
| 添加新高速缓存 | 更改高速缓存分区的数目 |
| 将内存添加到现有高速缓存 | 减小高速缓存大小 |
| 删除高速缓存 | 更改替换策略 |
| 更改高速缓存类型 |
a 所有空间都分配到逻辑页大小内存池。
b 缺省类型是 mixed。
a 缺省数据高速缓存包含一个 2 K 的缓冲池和一个 16 K 的缓冲池
b 用户高速缓存包含一个 2 K 的缓冲池和一个 16 K 的缓冲池
c 日志高速缓存包含一个 2 K 的缓冲池和一个 4 K 的缓冲池

此图显示带有 sp_cacheconfig 存储过程的缺省高速缓存和用户定义的高速缓存的数据高速缓存。
| 命令 | 数据库已绑定 | 表或索引已绑定 | 数据库或对象未绑定 |
|---|---|---|---|
| create index | 绑定的高速缓存 | 不适用 | 缺省数据高速缓存 |
| disk init | 不适用 | 不适用 | 缺省数据高速缓存 |
| dbcc checkdb | 绑定的高速缓存 | 不适用 | 缺省数据高速缓存 |
| dbcc checktable、indexalloc、tablealloc | 绑定的高速缓存 | 绑定的高速缓存 | 缺省数据高速缓存 |
| drop table | 绑定的高速缓存 | 绑定的高速缓存 | 缺省数据高速缓存 |
所有报告都包括一个报告高速缓存信息的信息区,并为每个高速缓存提供一个单独的数据区,以提供有关该高速缓存中缓冲池的信息。
以下来自使用 2K, 的服务器的输出显示了下列配置:
a 缺省数据高速缓存包含两个缓冲池:一个 2K 的缓冲池和一个 16K 的缓冲池。缺省数据高速缓存具有两个分区。
b pubs_cache 具有两个缓冲池:2 K 和 16 K
c pubs_log,其类型设置为 logonly,高速缓存替换策略设置为 relaxed,包括一个 2 K 缓冲池和一个 4 K 缓冲池
Cache Name Status Type Config Value Run Value
----------------------- --------- -------- ------------ --------
default data cache Active Default 0.00 Mb 26.09 Mb
pubs_cache Active Mixed 10.00 Mb 10.00 Mb
pubs_log Active Log Only 2.40 Mb 2.40 M
------------- --------
<h1> Total 12.40 Mb 38.49 Mb</h1>
Cache: default data cache, Status: Active, Type: Default
Config Size: 0.00 Mb, Run Size: 26.09 Mb
Config Replacement: strict LRU, Run Replacement: strict LRU
Config Partition: 2, Run Partition: 2
IO Size Wash Size Config Size Run Size APF Percent
-------- --------- ------------ ------------ -----------
2 Kb 3704 Kb 0.00 Mb 18.09 Mb 10
<h1> 16 Kb 1632 Kb 8.00 Mb 8.00 Mb 10</h1>
Cache: pubs_cache, Status: Active, Type: Mixed
Config Size: 10.00 Mb, Run Size: 10.00 Mb
Config Replacement: strict LRU, Run Replacement: strict LRU
Config Partition: 1, Run Partition: 1
IO Size Wash Size Config Size Run Size APF Percent
-------- --------- ------------ ------------ -----------
2 Kb 1228 Kb 0.00 Mb 6.00 Mb 10
<h1> 16 Kb 816 Kb 4.00 Mb 4.00 Mb 10</h1>
Cache: pubs_log, Status: Active, Type: Log Only
Config Size: 2.40 Mb, Run Size: 2.40 Mb
Config Replacement: relaxed LRU, Run Replacement: relaxed LRU
Config Partition: 1, Run Partition: 1
IO Size Wash Size Config Size Run Size APF Percent
-------- --------- ------------ ------------ -----------
2 Kb 206 Kb 0.00 Mb 1.01 Mb 10
16 Kb 272 Kb 1.40 Mb 1.39 Mb 10
输出中各列的含义:
| 列 | 含义 |
|---|---|
| Cache Name | 高速缓存的名称。 |
| 状态 | 下列值之一: “Active” “Pend/Act” “Pend/Del” 状态“Pend”是“pending”(待执行)的缩写。它总是与“Act”(即 Active,活动的)或“Del”(即 Delete,删除)一起使用。“Pend”表示已发生配置操作,但必须重新启动服务器才能使更改生效。 |
| Type(类型) | 用户定义的高速缓存为“Mixed”或“Log Only”,缺省数据高速缓冲为“Default”。 |
| I/O Size | 内存池的 I/O 的大小。在显示高速缓存配置的行上,此列为空白。 |
| Wash Size | 缓冲池的清洗区的大小。当页进入高速缓存的清洗区时,它们将被写入磁盘。在显示高速缓存配置的行上,此列为空白。 |
| Config Value 或 Config Size | 高速缓存或缓冲池的大小。如果该值为 0,则表示尚未显式配置大小,将使用缺省值。 |
| Run Value 或 Run Size | 当前在 SAP ASE 服务器上使用的高速缓存或缓冲池的大小。 |
| Config/ Run Replacement | 在下次重新启动后用于高速缓存的高速缓存策略(严格或宽松),以及当前的替换策略。只有当策略在上次重新启动后被更改时,它们才会有所不同。 |
| Config/Run Partition | 用于高速缓存的高速缓存分区数,以及当前的分区数。如果上次重新启动后使用 sp_cacheconfig 更改了分区数,则它们将有所不同。 |
| APF Percent | 在可容纳缓冲区的缓冲池中,已被异步预取但尚未被使用的缓冲区的百分比。 |
| Total | 数据高速缓存的总大小(如果报告包括所有高速缓存),或特定高速缓存的当前大小(如果指定了一个高速缓存名)。下图说明了重新启动和 sp_cacheconfig 对高速缓存状态的影响: |

此图显示重新启动和 sp_cacheconfig 对高速缓存状态的影响。
当创建数据高速缓存时,将根据 max memory 对内存分配进行验证。使用 total logical_memory配置参数,从分配给 SAP ASE 服务器的内存中分配高速缓存的内存。若要增加高速缓存可用的空间量,请增加 total logical memory,或减少其它使用内存的配置设置。如果 total logical memory 和请求的其它内存的和大于 max memory,则 SAP ASE 服务器发出一条错误并且不执行更改。
缺省高速缓存用于未绑定到其它高速缓存的所有对象(包括系统表),并且是唯一在恢复过程中使用的高速缓存。有关详细信息,请参见《系统管理指南》。
sp_helpcache "200M"
10.38Mb of overhead memory will be needed to manage a cache of size 200M
这只是估计的开销。由于运行期间的问题,实际开销可能会大一些。
为内存数据库创建高速缓存的相关信息。
a 对内存存储包括 strict 或 relaxed 替换策略。缺省情况下,sp_cacheconfig 对内存存储高速缓存使用 none 替换策略。
b 为内存存储高速缓存创建大 I/O 缓冲池(内存数据库不执行 I/O)。如果使用 sp_poolconfig 为内存存储高速缓存创建缓冲池,SAP ASE 服务器将发出错误。
c 将高速缓存类型从 mixed 更改为 logonly(或者相反)。
为内存行存储创建高速缓存的信息。
<cache_size> 指定为页数,则 sp_cacheconfig 在当前安装中使用 @@maxpagesize 变量将该页数转换成一定量的内存。
为内存行存储创建高速缓存包括以下这些限制:
注意
避免在高速缓存中存储大量的行,然后减小高速缓存的大小,因为当服务器重启并尝试实例化内存行存储的内容时,可能会内存不足。
若要更改现有高速缓存的大小,请指定高速缓存的名称和新大小。
如果增加现有高速缓存的大小,所有增加的空间都被放置在最小的缓冲池中。
若要减少现有高速缓存的大小,所有空间必须在逻辑页大小缓冲池中可用。可能需要使用 sp_poolconfig 将空间从其它缓冲池移动到该缓冲池中。
如果有数据库或任何非日志对象绑定到高速缓存,则不能将其类型更改为 logonly。
利用高速缓存分区,可以减少高速缓存自旋锁争用,而不需要创建单独的高速缓存并将数据库对象绑定到这些高速缓存。
您可以使用配置参数 global cache partition number 设置所有高速缓存的缺省高速缓存分区数。
若要删除数据高速缓存,请将其大小更改为 0。将高速缓存的大小设置为 0 时,会给该高速缓存加上删除标记。该高速缓存继续处于活动状态,绑定到该高速缓存的所有对象将继续使用它。
Cache (nmc3) not deleted dynamically. Objects are bound to the cache. Use
sp_unbindcache_all to unbind all objects bound to the cache.
将删除配置文件中该高速缓存所对应的条目以及 sysconfigures 中该高速缓存对应的条目,并在下次重新启动 SAP ASE 服务器时删除该高速缓存。