-ALTER BUFFERPOOL 命令 ( )Db2
-ALTER BUFFERPOOL 命令用于更改活动或非活动缓冲池的属性。 更改后的数值在再次更改前一直有效。
缩写 :-ALT BPOOL
环境 -ALTER BUFFERPOOL
该命令可以从 z/OS® 控制台、TSO下的DSN会话或 DB2I 面板( DB2 命令)、 IMS 或 CICS® 终端,或使用仪器设施接口(IFI)的程序。
数据共享范围 :会员
授权 -ALTER BUFFERPOOL
- 系统管理员权限
- SYSCTRL 权限
- SYSADM 权限
Db2 登录 控制台或TSO 发出的命令可通过 授权进行查看,使用主授权ID和次授权ID。 z/OS SDSF Db2
必须在 RACF 或类似的安全服务器中定义一个已登录的 z/OS 用户ID。
语法 -ALTER BUFFERPOOL
选项说明 -ALTER BUFFERPOOL
- (bpname )
- 指定要更改的缓冲池。
- 4 KB页面缓冲池的名称为 BP0 ,通过 BP49
- 8 KB页面缓冲池的名称为 BP8K0 ,通过 BP8K9
- 16 KB页面缓冲池的名称为 BP16K0 ,通过 BP16K9
- 32 KB页面缓冲池的名称为 BP32K ,通过 BP32K9
- VPSIZE (整数 )
- 更改缓冲池大小。
整数 的值指定了分配给活动缓冲池的缓冲区数量。
对于4 KB页面缓冲池( BP0 除外), 整数值的范围为0-4000000000。 对于 BP0 ,最小值为2000。 对于8 KB页面缓冲池,最小值为1000。 对于16 KB的页面缓冲池,最小值为500。 对于32 KB的页面缓冲池,最小值为250。
Db2 将所有缓冲池的VPSIZE和SPSIZE之和限制为16 TB。 此外, Db2 将缓冲池存储和模拟缓冲池存储的总和限制为以下两个值中的较小值:

- z/OS 系统可用实际存储空间的两倍
- 16TB

当您将活动缓冲池的VPSIZE设置为0时, Db2 数据库管理器会暂停该缓冲池的所有当前数据库访问和更新活动,然后删除缓冲池。 随后尝试使用分配给该缓冲池的表空间或索引时,会失败。 此外,当您将VPSIZE设置为0并分配模拟缓冲池时,数据库管理器会删除模拟缓冲池。
- VPSIZEMIN (整数| *)
- 设置缓冲池的最小大小。 可能的值包括:
- *
表示 Db2 将最小值设置为当前大小的75%。* 是缺省值。
- 整数
- 指定当AUTOSIZE(YES)生效时,分配给活动缓冲池的最小缓冲区数量。 整数适用以下规则:
- 对于 BP0、 BP8K0、 BP16K0 或 BP32K 以外的缓冲池,VPSIZEMIN 的整数值必须小于或等于VPSIZE 的整数值。 VPSIZEMIN的值不能为0。
- 对于缓冲池 BP0、 BP8K0、 BP16K0 或 BP32K , 整数有效范围是:
缓冲池页面大小 整数范围 4 KB
2000-4000000000
8 KB
1000-2000000000
16 KB
500-1000000000
32 KB
250-500000000
缩写 :VPMIN
- VPSIZEMAX (整数 |*)
- 设置缓冲池的最大容量。 可能的值包括:
- *
表示 Db2 将最大值设置为当前大小的125%。 每次分配或重新分配缓冲池时,如果启用自动缓冲池管理且缓冲池大小增加,则缓冲池的最大大小为新的、更大的缓冲池大小的125%。
* 是默认值。
- 整数
- 指定当AUTOSIZE(YES)生效时,分配给活动缓冲池的最大缓冲区数量。 整数适用以下规则:
- 对于 BP0、 BP8K0、 BP16K0 或 BP32K 以外的缓冲池,VPSIZEMAX 的整数值必须大于或等于VPSIZE 的整数值。 VPSIZEMAX的值不能为0。
- 对于缓冲池 BP0、 BP8K0、 BP16K0 或 BP32K , 整数具有以下范围:
缓冲池页面大小 整数范围 4 KB
2000-4000000000
8 KB
1000-2000000000
16 KB
500-1000000000
32 KB
250-500000000
缩写 :VPMAX
- FRAMESIZE( 4K|1M|2G )
- 设置缓冲池的帧大小。 可能的值有 2G、 1M 或 4K。
如果您使用FRAMESIZE选项发出ALTER BUFFERPOOL命令来修改缓冲池的帧大小,则更改将处于挂起状态,缓冲池仅在下次分配时固定。
如果FRAMESIZE为 1M ,且PGFIX为NO,则 Db2 使用4 KB的帧。
只有当可用内存达到2GB时,才能将框架大小更改为2GB。 此外,必须提供2GB的缓冲存储空间。 如果无法分配2GB的帧, Db2 将分配1MB的帧。
PGSTEAL(NONE)和FRAMESIZE( 2G )在 Db2 12 中不兼容。 如果您同时指定这些选项, Db2 会发送消息 DSNB549I 并使用PGSTEAL(LRU)算法,直到下一次分配缓冲池。 然而,PGSTEAL(NONE)在BSDS中记录。 要使用PGSTEAL(NONE),请指定FRAMESIZE( 1M )或FRAMESIZE( 4K )。 更多信息,请参阅 Db2 12中存储版本不兼容性
中PGSTEAL(NONE)缓冲池的行为变化
。以下示例显示了为各种VPSIZE值和4 KB缓冲池分配的2 GB帧数。 此信息可能随时更改,仅用于大致了解车架分配方式。
VPSIZE 分配的2GB帧数 注释 100 0 可用存储空间不足2GB,低于内部规定的四舍五入到2GB的限制。 498688 1 可用存储空间不足2GB,但仍在内部定义的2GB以内。 524288 1 可用存储空间为2GB。 549888 1 可用存储空间大于2GB,小于内部定义的4GB上限。 缩写: FRAME
- VPSEQT (整数 )
- 更改缓冲池的顺序窃取阈值。
此阈值是缓冲池中可能被连续访问的页面所占用的百分比。 页面状态可以是:更新中、正在使用或可用。
如果事务尝试预取页面,则事务的getpage操作被归类为顺序操作。 包含这些页面的缓冲区由VPSEQT管理,因此比不受VPSEQT管理的缓冲区更容易被盗或降级出缓冲池。 随机缓冲区永远不能被重新归类为顺序缓冲区,但顺序缓冲区如果被随机getpage操作触及,就会被归类为随机缓冲区。
整数值指定缓冲池的连续窃取阈值。 该值以缓冲池总大小的百分比表示。 整数的取值范围必须为0-100(含)。 缺省值为 80。
连续盗窃门槛:
- 防止连续扫描、无序索引扫描或其他某些预取操作导致缓冲池不堪重负
- 通过支持随机页面,有助于减少同步I/O
- 影响缓冲区和最近最少使用(LRU)算法的分配
如果为缓冲池指定了PGSTEAL(LRU),且缓冲池中的连续缓冲区数量少于VPSEQT值,则 Db2 会窃取最早的缓冲区。 当池中连续缓冲区的数量大于VPSEQT值时, Db2 会抢占最早的连续缓冲区。
顺序缓冲区比随机缓冲区更容易被盗,因为VPSEQT限制了顺序缓冲区的数量。 因此, Db2 使用随机缓冲区多于顺序缓冲区,以减少同步I/O的频率。 因此, Db2 可能会使用更多的异步预取I/O。 Db2 当缓冲区用于以下目的之一时,将其归类为顺序缓冲区:
- 供 Db2 使用,预取
- 用于读取LOB
读取LOB的缓冲区被归类为顺序缓冲区,因为LOB页面被再次引用的可能性比其他类型的页面要小。
- 当 Db2 实用程序按顺序编写新的 Db2 数据集时
Db2 如果随机获取页面操作触及顺序缓冲区,则可能将顺序缓冲区重新分类为随机缓冲区。
将VPSEQT设置为0可禁用预取。 当访问的对象数量超过可用缓冲区数量时,任何后续访问的页面都会被丢弃。 当页面已经在缓冲池中时,例如在内存索引或数据的情况下,您可以将VPSEQT设置为0,以避免不必要的预取调度。 然而,将VPSEQT设置为0可能会禁用并行性。 通过指定PGSTEAL(NONE),您可以达到同样的效果,并减少系统资源的使用。
为避免加速LRU降级,请将VPSEQT值增加到99或100。 如果预取的页面被引用多次,特别是如果额外的引用是随机的getpage操作,您可能需要增加值。
为了加快LRU对连续页面的降级,请降低VPSEQT值。 但是,如果VPSEQT × VPSIZE小于160 MB,则顺序I/O性能会降低,因为较小的值会减少查询和实用程序使用的顺序预取和I/O的数量。
- VPPSEQT (整数 )
- 更改缓冲池的并行顺序阈值。 该阈值决定了并行处理操作占用了多少缓冲池。
integer 的值指定缓冲池的并行顺序阈值。 该值以连续窃取阈值的百分比表示,有效值范围为0-100。 初始默认值为50。
当 VPPSEQT=0、并行处理操作和由索引I/O并行性触发的预取操作被禁用时。
- VPXPSEQT (整数 )(已废弃)
- 不再支持Sysplex查询并行。 指定此参数无效。
- DWQT (整数 )
- 更改缓冲池的延迟写入阈值。
integer 的值指定缓冲池的延迟写入阈值。 该值以缓冲池总大小的百分比表示,有效值为0-90。 该阈值根据可用缓冲区数量确定延迟写入的开始时间。 当可用缓冲区数量低于阈值时,延迟写入开始。 初始默认值为 30%。
- VDWQT (整数-1 ,整数-2 )
- 更改缓冲池的垂直延迟写入阈值。
的值指定缓冲池的垂直延迟写入阈值。 integer1 指定缓冲池的垂直延迟写入阈值。 integer1 以缓冲池总大小的百分比表示,有效值为0-90。
该阈值根据特定数据集的更新页数确定延迟写入的开始时间。 当数据集的更新缓冲区数量超过阈值时,数据集的延迟写入开始。 对于 Db2 工具访问的页面集,可以忽略此限制。 它必须小于或等于DWQT选项指定的值。
默认值为5 %。 数值为0表示当数据集的更新缓冲区计数达到40时,延迟写入32页。
的值指定缓冲池的垂直延迟写入阈值。 integer-2 指定缓冲池的垂直延迟写入阈值。 integer-2 以缓冲区的绝对数量表示。 当您希望大缓冲池的阈值相对较低时,可以使用 integer2 当您希望大缓冲池的阈值相对较低,但又 integer-1 不能在0和1之间提供足够精细的 integer-1 0和1之间的值。 仅当价值为 integer-2 仅当 integer-1 为0时。 Db2 忽略为 integer-2 如果指定的值 integer-1 不为零。 的数值范围是0-9999。 integer-2 的范围是0-9999。 缺省值为 0。
如果 integer-1 为0且 integer-2 为非零值,则 Db2 使用为 integer-2 来确定阈值。 如果两个值均为0,则 integer-1 0作为阈值。
- PGSTEAL
- 指定 Db2 用于缓冲池的页面窃取算法。初始默认值为PGSTEAL(LRU)。
- (LRU)
- 指定缓冲池缓冲区根据最近最少使用(LRU)算法规则进行管理。
模拟缓冲池仅在PGSTEAL设置为LRU时可用。
- (先进先出)
- 指定缓冲池缓冲区按照先进先出(FIFO)算法规则进行管理。 此选项可降低维护最近最少使用的缓冲区信息的成本。
- (无)
- 规定如果缓冲池足够大,能够容纳所有分配的打开对象,则不会发生页面窃取。 在此选项下, Db2 会在打开对象时预加载缓冲池。
Db2 为无法放入缓冲池的页面隐式创建溢出区域。 溢出区域是在分配缓冲池时创建的。 溢出区域的大小取决于缓冲池的VPSIZE值。 溢出区域通常为VPSIZE值的10%,范围为50-6400个缓冲区。 Db2 溢出区域使用时的 DSNB604I 溢出区域被使用时显示的消息。 溢出区域可能会发生页面窃取。 溢出区域使用LRU链进行维护,但溢出区域中的缓冲区窃取使用先进先出(FIFO)页面窃取算法。 
在数据共享环境中,当页面集或分区先不依赖英镑,然后又重新依赖英镑时,可能会出现高水平的同步读取I/O活动。 解决数据共享环境中的同步读取I/O问题 ,为如何解决这一性能问题提供了建议。
如果 VPSEQT=100、 Db2 自动将对象预取到缓冲池中,则可以减少这些转换发生后的同步读取I/O活动。
- PGFIX
- 指定缓冲池在使用时是否固定在真实存储中。
- (否)
- 指定缓冲池在真实存储中不是固定的。 在每个I/O和组缓冲池操作中,页面缓冲区在真实存储中是固定和可移动的。
此值是缺省值。
如果PGFIX设置为NO, Db2 使用4 KB的帧大小。
- (是的)
- 指定缓冲池在真实存储中是固定的。
如果您使用 ALTER BUFFERPOOL 命令,并将 PGFIX 选项设置为 YES,以修复实际存储中的缓冲池,则更改将处于待处理状态,缓冲池仅在下次分配时才会被固定。
- 自动调整大小
- 指定是否启用或禁用缓冲池调整。
- (否)
- 指定 Db2 不使用Workload Manager(WLM)服务自动调整缓冲池大小。
此值是缺省值。
- (是的)
- 指定 Db2 使用WLM服务(如果可用)自动调整缓冲池大小。
对于 z/OS 2.1 或更高版本,自动缓冲池管理会增加或减少缓冲池大小。 对于 z/OS 2.1 自动缓冲池管理只会增加缓冲池的大小,如果缓冲池过大,可能需要手动缩小其大小。
当使用PGSTEAL(NONE)时,AUTOSIZE(YES)将被忽略。 但是,AUTOSIZE属性被保存。 如果PGSTEAL属性后来被更改为非NONE,当缓冲池被重新分配为新的PGSTEAL属性时,AUTOSIZE(YES)属性将再次生效。
- SPSIZE (整数 )
当缓冲池大小以整数增加时, Db2 模拟缓冲池的行为。 
整数值指定了模拟时添加到VPSIZE的缓冲区数量。 例如,如果VPSIZE当前为5000个缓冲区,则将SPSIZE设置为1000,看看将缓冲池大小增加20%会发生什么。
Db2 将所有缓冲池的VPSIZE和SPSIZE之和限制为16 TB。 此外, Db2 将缓冲池存储和模拟缓冲池存储的总和限制为以下两个值中的较小值:

- z/OS 系统可用实际存储空间的两倍
- 16TB

整数的最小值取决于缓冲池页面大小。 整数的最大值取决于缓冲池页面大小和VPSIZE。
下表显示了SPSIZE的最低和最高值:
缓冲池页面大小(KB) SPSIZE的最小值 SPSIZE的最大值 4 200
4000000000 - vpsize
8 100
2000000000 - vpsize
16 50
1000000000 - vpsize
32 25
500000000 - vpsize
如果您为模拟缓冲池指定了 SPSIZE(0), Db2 会暂停模拟缓冲池的所有活动,然后删除模拟缓冲池。 如果模拟缓冲池处于活动状态,并且您为 SPSIZE 指定的值小于当前大小但大于 0,则 Db2 会删除当前的模拟缓冲池,并分配一个大小更小的新的模拟缓冲池。
- SPSEQT (整数 )
- 更改模拟缓冲池的顺序窃取阈值。
该阈值是指用于顺序访问页面的模拟缓冲池总大小的百分比。 在模拟缓冲池中,如果页面从虚拟缓冲池逻辑移动到模拟缓冲池时位于虚拟缓冲池中的顺序缓冲区中,则该模拟缓冲区被归类为顺序缓冲区。
数值必须在0-100之间。 初始默认值为VPSEQT的值,即虚拟缓冲池的顺序窃取阈值。 如果之前从未指定过 SPSEQT,当 SPSIZE 更改为大于零的值时,将设置初始默认值。
当 Db2 在模拟缓冲池中窃取缓冲区时,如果模拟缓冲池中连续缓冲区占缓冲区总数的百分比大于SPSEQT值,则 Db2 会窃取最早的连续缓冲区。 否则, Db2 会占用最旧的缓冲区。
使用说明 -ALTER BUFFERPOOL
以下描述包含有关如何使用ALTER BUFFERPOOL命令的附加信息。
- 更改缓冲池的多个属性
- 未修改缓冲池属性对同一命令中请求的其他修改没有影响。
- 建立主动缓冲池
- 如果您使用ALTER BUFFERPOOL来缩减活动缓冲池的大小, Db2 会将活动缓冲区标记为“待删除”,从而缩减缓冲池,这意味着这些缓冲区无法再用于满足其他页面请求。 但是,虚拟存储空间可能不会立即释放。 通过发出DISPLAY BUFFERPOOL命令来确定缓冲池的状态。重要 :
为了避免在您使用活动缓冲池时对性能造成重大影响,请遵循以下指导原则:- 当子系统中的缓冲池活动量很大时,不要大量减少活动缓冲池的大小。 在尝试压缩缓冲池之前,请发出DISPLAY BUFFERPOOL指令,以确定活动量。
- 如果需要大幅收缩缓冲池,请多次发出ALTER BUFFERPOOL命令,进行多次较小的收缩,而不是一次大的收缩。

- 删除活动缓冲池
- 如果您使用ALTER BUFFERPOOL删除活动缓冲池(通过为VPSIZE指定0), Db2 会发送一条消息,表明它已准备好明确删除此缓冲池。 当 Db2 接受删除缓冲池请求时,缓冲池将被标记为“删除待定”。 当前对缓冲池的所有访问都被暂停,以后的访问尝试将失败并显示错误消息,所有引用缓冲池的打开页面集都将关闭。
- 更改BSDS中存储的属性
- 存储在BSDS中的缓冲池属性无法离线更改。
- 将缓冲池设置为固定实际存储空间
- 为了将缓冲池固定在真实存储中,请发出命令
ALTER BUFFERPOOL(bpname) PGFIX(YES)。 如果您为 bpname 指定的缓冲池当前未分配,则该缓冲池在分配后将成为固定的实际存储。 如果您为bpname 指定的缓冲池当前已被分配,请执行以下操作之一,将缓冲池固定在真实存储中:- 如果您为bpname 指定的缓冲池不是 Db2 目录和目录( BP0、 BP8K0、 BP16K0 或 BP32K )使用的缓冲池之一:
- 执行 ALTER BUFFERPOOL 命令并指定 PGFIX 选项,以便在下一次分配时使用长期页面修复:
-ALTER BUFFERPOOL(bpname) PGFIX(YES)
- 执行 ALTER BUFFERPOOL 命令并指定 PGFIX 选项,以便在下一次分配时使用长期页面修复:
- 如果您为bpname 指定的缓冲池是用于 Db2 目录和目录( BP0、 BP8K0、 BP16K0 或 BP32K )的缓冲池之一:
- 使用PGFIX选项发出ALTER BUFFERPOOL命令,将缓冲池更改为使用长期页面修复(更改将在缓冲池下一次分配时生效):
-ALTER BUFFERPOOL(bpname) PGFIX(YES) - 发出STOP DATABASE命令或STOP DB2 命令来取消分配缓冲池
- 发出START DATABASE命令或START DB2 命令重新分配缓冲池(取决于您用于取消分配缓冲池的命令)
- 使用PGFIX选项发出ALTER BUFFERPOOL命令,将缓冲池更改为使用长期页面修复(更改将在缓冲池下一次分配时生效):
- 如果您为bpname 指定的缓冲池不是 Db2 目录和目录( BP0、 BP8K0、 BP16K0 或 BP32K )使用的缓冲池之一:
- 模拟缓冲池的要求
- 您可以分配模拟缓冲池,为数据库系统确定最佳的缓冲池大小。 当您发出ALTER BUFFERPOOL命令创建模拟缓冲池时,必须满足以下条件:
- SPSIZE大于0。
- 虚拟缓冲池已分配。 这意味着,当您之前发出ALTER BUFFERPOOL命令时,您将VPSIZE设置为大于0的值,或者当您发出ALTER BUFFERPOOL命令创建模拟缓冲池时,您将VPSIZE设置为大于0的值。
- PGSTEAL必须是LRU。
如果 SPSIZE 的值大于 0,并且您将 PGSTEAL 设置为 NONE 或 FIFO,则 Db2 数据库管理器会将 SPSIZE 设置为 0。 如果模拟缓冲池已经分配,数据库管理器会将其删除。 如果PGSTEAL的值为NONE或FIFO,并且您发出ALTER BUFFERPOOL命令将SPSIZE值从0设置为大于0的值,则SPSIZE值不会改变。
在缓冲池模拟期间更改 VPSIZE 的限制
在进行缓冲池模拟时,请勿将 VPSIZE 设置为 0。 将 VPSIZE 设置为 0 会释放实际和模拟的缓冲区池,即使 SPSIZE 的值大于 0 也是如此。
- FRAMESIZE( 2G )的前提条件
- 在使用 2 GB 页面框架之前,必须在初始程序加载 (IPL) 之后配置 2 GB 框架区域。 z/OS. 为此,需要在 SYS1.PARMLIB 的活动 IEASYSxx 成员中的 LFArea 关键字中指定参数关键字,以指定用于 1 MB 和 2 GB 页面的实际存储量。
例子 -ALTER BUFFERPOOL
- 示例:设置缓冲池大小
- 这条命令将缓冲池 BP0 的大小设置为2000。
-ALTER BUFFERPOOL(BP0) VPSIZE(2000) - 示例:设置缓冲池的最小和最大容量
- 这条命令将缓冲池 BP32K 的最小值设置为1500,将缓冲池 BP32K 的最大值设置为2500。
-ALTER BUFFERPOOL(BP32K) VPSIZEMIN(1500) VPSIZEMAX(2500) - 示例:设置缓冲池的顺序窃取阈值
- 这条命令将缓冲池 BP0 的顺序窃取阈值设置为缓冲池大小的75%。
-ALTER BUFFERPOOL(BP0) VPSEQT(75) - 示例:删除缓冲池
- 此命令将删除缓冲池 BP1。
-ALTER BUFFERPOOL(BP1) VPSIZE(0)请谨慎使用此选项,因为为活动缓冲池指定0大小会导致 Db2 暂停当前所有数据库访问。 所有后续打开页面集的请求都会失败。
