您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_cacheconfig

说明

创建、配置、重新配置和删除数据高速缓存,并提供有关信息。

语法


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

指定高速缓存类型。

  • logonly – 指示仅为日志的高速缓存。

  • mixed – 指示日志和数据的高速缓存。

  • inmemory_storage – 指示要为内存数据库或宽松持久性数据库创建高速缓存。

  • lockless data cache – 指示将通过 relaxed 高速缓存替换策略创建无锁高速缓存。

  • 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"
    

    示例 2

    报告 pub_cache 的当前配置和高速缓存中的所有内存池:

    
    sp_cacheconfig pub_cache
    

    示例 3

    在下次启动 SAP ASE 服务器时删除 pub_cache:

    
    sp_cacheconfig pub_cache, "0"
    

    示例 4

    使用单个步骤创建 pub_log_cache 并将其类型设置为 logonly:

    
    sp_cacheconfig pub_log_cache, "2000K", logonly
    

    示例 5

    第一个命令创建缺省类型为 mixed 的高速缓存 pub_log_cache。第二个命令将其状态更改为 logonly。最终配置与示例 4 中的配置相同:

    
    sp_cacheconfig pub_log_cache, "2000K"
    sp_cacheconfig pub_log_cache, logonly
    

    示例 6

    创建高速缓存并设置大小、类型、替换策略和高速缓存分区数:

    
    sp_cacheconfig 'newcache', '50M', mixed, strict, "cache_partition=2"
    

    示例 7

    创建一个名为 pubs3_imdb 的内存存储:

    
    sp_cacheconfig pubs_imdb, '500M', inmemory_storage
    

    示例 8

    (在集群环境中)显示实例 blade1 的高速缓存:

    
    sp_cacheconfig 'instance blade1'
    

    示例 9

    (在集群环境中)将 blade1 上的 Sales Cache 大小设置为 100 MB:

    
    sp_cacheconfig 'Sales Cache', '100M', 'instance blade1'
    

    示例 10

    (在集群环境中)将 blade1 上的 Sales Cache 大小设置为 0 MB,从而在实际意义上删除该高速缓存。

    
    sp_cacheconfig 'Sales Cache', '0M', 'instance blade1'
    

    示例 11

    为 pubs2 数据库创建 20 GB 行存储高速缓存:

    
    sp_cacheconfig "pubs2_row_cache", "20G", "row_storage"
    

    示例 12

    
    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)
    

    示例 13

    增加 pubs2_row_cache 的大小:

    
    sp_cacheconfig "pubs2_row_cache", "30g"
    

    示例 14

    减少 pubs2_row_cache 的大小(需要重新启动服务器才能生效):

    
    sp_cacheconfig "pubs2_row_cache", "10g"
    

    sp_cacheconfig "pubs2_vlink_cache", "10g"

    示例 15

    将 imrs_pub_cache 增加至 500MB:

    
    sp_cacheconfig imrs_pub_cache, "500M", "row_storage"
    

    示例 16

    创建名为 sys_cache 的 1 GB 无锁数据高速缓存:

    
    sp_cacheconfig "sys_cache", "1G", "lockless data cache", "relaxed"
    

    用法

  • row_cache 的最小高速缓存大小是 265MB。

  • 如果在您创建新高速缓存或将内存添加到现有高速缓存时 SAP ASE 服务器无法分配所有请求的内存,则它将分配所有可用内存。但是,这些附加内存在下次重新启动 SAP ASE 服务器时才分配。

  • 如果高速缓存(包括缺省高速缓存)上绑定有对象,则在解除对象的绑定之前不能删除该高速缓存。

  • (在集群环境中)如果不指定 instance_name,将显示集群的高速缓存。

  • 使用 sp_cacheconfig 执行的某些操作是动态的(不需要重新启动 SAP ASE 服务器),而某些操作是静态的(需要重新启动)。这些动态和静态操作包括:

    动态 sp_cacheconfig 操作 静态 sp_cacheconfig 操作
    添加新高速缓存 更改高速缓存分区的数目
    将内存添加到现有高速缓存 减小高速缓存大小
    删除高速缓存 更改替换策略
    更改高速缓存类型

  • 当首次创建数据高速缓存时:

    a 所有空间都分配到逻辑页大小内存池。

    b 缺省类型是 mixed。

  • 下图显示了 2 K 服务器的数据高速缓存,它配置有两个用户定义的数据高速缓存以及以下缓冲池:

    a 缺省数据高速缓存包含一个 2 K 的缓冲池和一个 16 K 的缓冲池

    b 用户高速缓存包含一个 2 K 的缓冲池和一个 16 K 的缓冲池

    c 日志高速缓存包含一个 2 K 的缓冲池和一个 4 K 的缓冲池

    ![](https://help.sap.com/doc/29a04b8081884fb5b715fe4aa1ab4ad2/16.0.3.0/zh-CN/loioa5d72b49bc2b1014ad2db2867407456e_LowRes.png)

    此图显示带有 sp_cacheconfig 存储过程的缺省高速缓存和用户定义的高速缓存的数据高速缓存。

  • 缺省数据高速缓存的类型必须始终是 default,而任何其它高速缓存都不能具有类型 default。

  • 在类型为 logonly 或具有宽松 LRU 替换策略的高速缓存中,SAP ASE 管家任务不执行任何缓冲区清洗。

  • 以下命令只执行 2 K 的 I/O 操作:disk init、某些 dbcc 命令和 drop table。dbcc checkdb 和 dbcc checktable 命令可以对表执行大型 I/O 操作,但对索引只执行 2K 的 I/O 操作。在绑定/不绑定数据库或对象时 Transact-SQL 命令的高速缓存使用情况包括:

    命令 数据库已绑定 表或索引已绑定 数据库或对象未绑定
    create index 绑定的高速缓存 不适用 缺省数据高速缓存
    disk init 不适用 不适用 缺省数据高速缓存
    dbcc checkdb 绑定的高速缓存 不适用 缺省数据高速缓存
    dbcc checktable、indexalloc、tablealloc 绑定的高速缓存 绑定的高速缓存 缺省数据高速缓存
    drop table 绑定的高速缓存 绑定的高速缓存 缺省数据高速缓存

  • 恢复只使用缺省数据高速缓存的逻辑页大小缓冲池。必须回退或前进的所有事务的所有页都会被读入该缓冲池并在该缓冲池中进行更改。请确保缺省逻辑页大小缓冲池对这些事务来说足够大。

  • 当使用不带任何参数的 sp_cacheconfig 时,它将报告有关服务器上所有高速缓存的信息。如果只指定了一个高速缓存名,则它只报告有关指定的高速缓冲的信息。如果使用高速缓存名的一部分,它将报告符合“%%”的所有名称的信息。

    所有报告都包括一个报告高速缓存信息的信息区,并为每个高速缓存提供一个单独的数据区,以提供有关该高速缓存中缓冲池的信息。

    以下来自使用 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 对高速缓存状态的影响:

    ![](https://help.sap.com/doc/29a04b8081884fb5b715fe4aa1ab4ad2/16.0.3.0/zh-CN/loioa5d7ae04bc2b1014a270ca722c6d502d_LowRes.png)

    此图显示重新启动和 sp_cacheconfig 对高速缓存状态的影响。

  • 您还可以通过编辑配置文件配置高速缓存和缓冲池。

    数据高速缓存内存

  • 当首次安装 SAP ASE 服务器时,所有数据高速缓存内存都被分配到名为 default data cache 的高速缓存的逻辑页大小缓冲池中。缺省数据高速缓存用于所有未用 sp_bindcache 显式绑定到数据高速缓存或其数据库未绑定到高速缓存的对象。

    当创建数据高速缓存时,将根据 max memory 对内存分配进行验证。使用 total logical_memory配置参数,从分配给 SAP ASE 服务器的内存中分配高速缓存的内存。若要增加高速缓存可用的空间量,请增加 total logical memory,或减少其它使用内存的配置设置。如果 total logical memory 和请求的其它内存的和大于 max memory,则 SAP ASE 服务器发出一条错误并且不执行更改。

    缺省高速缓存用于未绑定到其它高速缓存的所有对象(包括系统表),并且是唯一在恢复过程中使用的高速缓存。有关详细信息,请参见《系统管理指南》。

  • 数据高速缓存要求将小部分开销用于管理高速缓存的结构。所有高速缓存开销都取自于可用内存。若要查看特定高速缓存大小所需的开销量,可以使用 sp_helpcache 并提供大小:

    
    sp_helpcache "200M"
    
    10.38Mb of overhead memory will be needed to manage a cache of size 200M
    

    这只是估计的开销。由于运行期间的问题,实际开销可能会大一些。

    为内存数据库创建高速缓存

    为内存数据库创建高速缓存的相关信息。

  • 高速缓存名称的长度不能超过 127 个字节。

  • 内存存储高速缓存最小为 256 个逻辑页(在使用 2K 逻辑页的服务器上为 512 K)。

  • 您不能:

    a 对内存存储包括 strict 或 relaxed 替换策略。缺省情况下,sp_cacheconfig 对内存存储高速缓存使用 none 替换策略。

    b 为内存存储高速缓存创建大 I/O 缓冲池(内存数据库不执行 I/O)。如果使用 sp_poolconfig 为内存存储高速缓存创建缓冲池,SAP ASE 服务器将发出错误。

    c 将高速缓存类型从 mixed 更改为 logonly(或者相反)。

    为内存行存储创建高速缓存

    为内存行存储创建高速缓存的信息。

  • 创建内存行存储需预留系统内存,所以您必须配置 max memory 以提供足够的内存。如果系统没有足够的空间创建指定大小的内存行存储,则会发出错误消息,提示用户增加 max memory 的值。

  • 如果将 <cache_size> 指定为页数,则 sp_cacheconfig 在当前安装中使用 @@maxpagesize 变量将该页数转换成一定量的内存。

    为内存行存储创建高速缓存包括以下这些限制:

  • 高速缓存名在服务器安装(包括其它所有任意种类的高速缓存)中必须是唯一的。

  • 不能将内存行存储高速缓存更改成其它种类的高速缓存。而是删除并将内存重新部署为其它高速缓存类型。同样,不能把其它高速缓存类型更改成内存行存储高速缓存。

  • 可以增加内存行存储高速缓存的大小,取决于可用系统内存。但是,如果不重启服务器,则不能减小其大小,重启之后高速缓存的大小会被调整到下限。

    
    注意
    避免在高速缓存中存储大量的行,然后减小高速缓存的大小,因为当服务器重启并尝试实例化内存行存储的内容时,可能会内存不足。
    

  • 您可以将行存储高速缓存专用于一个数据库,反之亦然。即,可以在一个服务器里创建多个内存行存储高速缓存,但不能跨数据库共享。

  • 创建内存行存储高速缓存时不能使用 cache_partition 和 instance 参数

    更改现有的高速缓存大小

    若要更改现有高速缓存的大小,请指定高速缓存的名称和新大小。

    如果增加现有高速缓存的大小,所有增加的空间都被放置在最小的缓冲池中。

    若要减少现有高速缓存的大小,所有空间必须在逻辑页大小缓冲池中可用。可能需要使用 sp_poolconfig 将空间从其它缓冲池移动到该缓冲池中。

    如果有数据库或任何非日志对象绑定到高速缓存,则不能将其类型更改为 logonly。

    使用高速缓存分区

    利用高速缓存分区,可以减少高速缓存自旋锁争用,而不需要创建单独的高速缓存并将数据库对象绑定到这些高速缓存。

    您可以使用配置参数 global cache partition number 设置所有高速缓存的缺省高速缓存分区数。

    删除高速缓存

    若要删除数据高速缓存,请将其大小更改为 0。将高速缓存的大小设置为 0 时,会给该高速缓存加上删除标记。该高速缓存继续处于活动状态,绑定到该高速缓存的所有对象将继续使用它。

  • 您不能删除缺省数据高速缓存。

  • 如果删除数据高速缓存并且该高速缓存上有绑定的对象,则该高速缓存在内存中保持目前的状态,SAP ASE 服务器将发出以下消息:

    
    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 服务器时删除该高速缓存。

  • 不能在事务内执行 sp_cacheconfig。