《DB2性能管理与实战》——2.6 DB2 pureScale环境中内存管理

2.6 DB2 pureScale环境中内存管理

DB2性能管理与实战
本节将要介绍与pureScale特性相关的内存管理,可以对比前面的单节点环境下的内存管理,来分析它们之间的异同点。本节为学习后续章节中的相关案例奠定了基础。

2.6.1 集群高速缓存设施

在DB2 pureScale环境中,又引入了集群高速缓存设施(CF),CF将不同内存堆用于以下用途。

1.组缓冲池内存
组缓冲池内存被用于DB2pureScale实例的组缓冲池。如果以一致方式将此类型的内存用至最大已配置能力,那么可能会对性能有负面影响。但是,内存可能被用至极限的事实本身并不指示性能可能受到影响。请检查组缓冲池的命中速率以确保性能是否降低。低命中速率与高组缓冲池内存使用情况一起出现可能指示需要增加此类型的内存。此类型的内存由CF_GBP_SZ配置参数配置。

2.锁定内存
锁定内存用于管理DB2 pureScale实例中的页锁定。如果CF上的锁定没有足够的内存可用,那么可能会发生以下情况。

boll 锁定升级可能发生,这会降低所涉及对象的并行性。

boll 锁定请求可能被拒绝,从而导致返回SQL0912消息。

此类型的内存由cf_lock_sz配置参数配置。

3.共享通信区(SCA)内存
SCA内存包含表、索引、表空间和目录的数据库范围信息。每个数据库在CF中都有自己的SCA内存。此内存是第一次在任何DB2成员上激活数据库期间分配的,直到数据库被废弃或CF停止时才会释放。如果使用表分区,那么使CF与成员间的表分区数据同步时所需的信息也存储在SCA内存中。

如果此类型的内存被用至极限,那么表可能会无法装入,并且会返回错误。此类型的内存由CF_SCA_SZ配置参数配置。

4.整体CF内存
整体CF内存是对CF可用的总物理内存量,它由CF_MEM_SIZE配置参数设置。组缓冲池、锁定和共享通信区的内存都分配自此内存池。因此,为这些特定类型的内存分配的总内存量不能超过使用CF_MEM_SIZE配置参数配置的内存量。

缺省情况下,系统会自动配置其中每个类型的内存。DB2 pureScale Feature提供了一些监视元素,可使用这些监视元素来检查当前正由系统使用的每个类型的内存的量。还有一些相关元素,可使用这些元素来确定每个类型的内存的最大大小以及是否正在执行调整内存大小操作。

可使用MON_GET_CF表函数来检索各种报告DB2 pureScale实例中集群高速缓存设施的内存使用情况的监视器元素。

SELECT SUBSTR(HOST_NAME,1,10)AS HOST,
    ID as HOSTID,
    CURRENT_CF_LOCK_SIZE,
    CONFIGURED_CF_LOCK_SIZE,
    TARGET_CF_LOCK_SIZE
  FROM TABLE( MON_GET_CF( NULL ))

运行上述管理视图,可以得到以下结果。

HOST   HOSTID CURRENT_CF_LOCK_SIZE CONFIGURED_CF_LOCK_SIZE
-----------------------------------------------------------
HOSTA    128       133852         564224
HOSTB    129       133852         564224
TARGET_CF_LOCK_SIZE
-------------------
      564224
      564224
  2 record(s)selected.

可以通过下列语句查看所有系统上所有集群高速缓存设施的组缓冲池内存大小的信息。

SELECT SUBSTR(HOST_NAME,1,20)AS HOST,
    ID as HOSTID,
    CURRENT_CF_GBP_SIZE,
    CONFIGURED_CF_GBP_SIZE,
    TARGET_CF_GBP_SIZE
  FROM TABLE( MON_GET_CF(NULL))

在此示例中,当前GBP大小为367,611个4KB页或1,505,734,656字节。分配给GBP的内存为500,224个4KB页或2,048,917,504字节。

H```javascript

OST      HOSTID CURRENT_CF_GBP_SIZE CONFIGURED_CF_GBP_SIZE TARGET_CF_GBP_SIZE

HOSTA       128        367611        500224       500224
HOSTB       129        367611        500224       500224
2 record(s)selected.

检索特定主机的共享通信区(SCA)内存使用情况数据,可以通过下列语句。

```javascript
SELECT SUBSTR(HOST_NAME,1,8)AS HOST,
    ID as HOSTID,
    CURRENT_CF_SCA_SIZE,
    CONFIGURED_CF_SCA_SIZE,
    TARGET_CF_SCA_SIZE 
FROM TABLE(MON_GET_CF(128))

在此示例中,当前正使用的SCA内存为43个4KB页。检索这些监视器元素时,最大SCA内存大小为16,128个4KB页。但是,所配置大小和目标大小不同,这意味着SCA内存的大小正从先前最大所配置大小增加至23,280页。

HOST   HOSTID CURRENT_CF_SCA_SIZE CONFIGURED_CF_SCA_SIZE
-------------------------------------------------------
HOSTA    128         43        16128
TARGET_CF_SCA_SIZE 
------------------
       23280
  1 record(s)selected.

2.6.2 pureScale环境中的缓冲池命中速率和命中率

在DB2 pureScale环境中,DB2 Agent读取数据页的方式发生了变化。图2-7所示为当DB2搜寻一个数据页时,GBP和LBP的搜寻顺序和相互关系。

当Agent搜索数据页时,首先在LBP中搜索,如果搜索到了有效的数据页即返回。如果在LBP中搜索到无效的数据页,就转到GBP中搜寻。如果在LBP中没有搜到,也会到GBP中搜寻。如果在GBP中搜到即返回给LBP。如果在GBP中也无法搜到,那么就到磁盘中搜寻。

在DB2 pureScale环境中,访问整体性能时,本地缓冲池和组缓冲池命中速率和命中率都是重要因素。

本地缓冲池(LBP)命中率反映可在本地缓冲池中找到成员所需并处于有效状态的页的程度。如果成员的LBP中的页在装入到LBP中之后未被另一成员更改,那么此页被认为处于有效状态。如果另一成员已更改此页(更改可能会在此页被释放至磁盘之前发生),那么此页被认为无效。如果具有无效页的成员需要此页才能执行事务,那么成员必须访问CF才能请求此页的新的有效版本。

低LBP命中率指示未在本地找到这些页,必须向CF请求这些页。但是,在DB2 pureScale环境中,查看LBP命中率只能了解缓冲池状况的一个方面。还需要考虑组缓冲池(GBP)在检索页时充当的角色以及GBP本身的命中率。如果某个成员在其LBP中找不到某页的有效副本,那么它会向CF请求在GBP中搜索此页的有效副本。GBP执行下列其中一个操作:

boll 如果GBP包含此页的有效副本,那么它会向发出此请求的成员提供此页;

boll 否则,GBP会告诉请求成员它必须从磁盘读取此页。

使用LBP的另一注意事项是独立于GBP的页的概念。独立于GBP的页是仅曾经通过成员的LBP访问但从未存在于GBP中的页。一些页可能是独立于GBP的,因为只有本地成员访问使用这些页的操作或这些页源自的对象。

组缓冲池命中率反映在组缓冲池中找到成员所需但没有其有效本地副本的页(相对于必须从磁盘读取)的程度。GBP的低命中率指示GBP中提供的实例中成员所需的页数相对较少。增加GBP的大小可改进命中速率和整体性能。因此,计算成员的本地缓冲池(LBP)中的数据页的命中率时,需要考虑成员尝试从LBP读取页的次数相对于尝试读取但在LBP中找不到有效页的次数。

提示:

命中率可能会根据许多因素(例如,数据库中的数据特性、对其运行的查询以及硬件和软件配置)而变化。一般来讲,缓冲池命中率越高,反映查询性能越好。如果发现命中率好像很低,或者随时间变化不断下降,那么增加缓冲池大小会有帮助。要增加组缓冲池的大小,请在CF上调整CF_GBP_SZ配置参数。要调整本地缓冲池,请在具有需要校正的缓冲池的成员上运行ALTER BUFFERPOOL语句。
1.缓冲池监视元素报告
在DB2 pureScale环境中,与其他DB2环境一样,每个成员都会报告它自己的本地缓冲池。在某些情况下,您可能想要计算特定成员的命中率。在其他情况下,可能想要一起查看所有成员的数据,以整体了解DB2 pureScale环境的命中速率和命中率。

例如,如果通过将pool_data_gbp_p_reads监视元素与MON_GET_BUFFERPOOL表函数配合使用来提交查询,以返回表示将数据页从磁盘读取到本地缓冲池中(因为在GBP中找不到此数据页)的次数的数据,并且您未指定要返回的成员,那么您会见到如下所示的结果。

MEMBER BP_NAME      POOL_DATA_GBP_P_READS
-----------------------------------------------

0 IBMDEFAULTBP            408
   0 IBMSYSTEMBP4K            0
   0 IBMSYSTEMBP8K            0
   0 IBMSYSTEMBP16K           0
   0 IBMSYSTEMBP32K           0
   1 IBMDEFAULTBP           108
   1 IBMSYSTEMBP4K            0
   1 IBMSYSTEMBP8K            0
   1 IBMSYSTEMBP16K           0
   1 IBMSYSTEMBP32K           0
   2 IBMDEFAULTBP           112
   2 IBMSYSTEMBP4K            0
   2 IBMSYSTEMBP8K            0
   2 IBMSYSTEMBP16K           0
   2 IBMSYSTEMBP32K           0
  15 record(s)selected.

要点:

在以上示例中,可见到针对临时缓冲池报告的数据全部显示为零,这并非巧合。在DB2 pureScale实例中,临时对象和表空间在它们的关联成员的本地。它们在CF上不使用GBP。如果关心所有成员的结果,可使用SUM聚集函数将所有成员的数目加到一起。

SELECT  VARCHAR(BP_NAME,15)AS BP_NAME,
     SUM(POOL_DATA_GBP_P_READS)AS TOTAL_P_READS
FROM TABLE(MON_GET_BUFFERPOOL('',-2))
GROUP BY BP_NAME
以上查询返回类似以下输出的结果:
BP_NAME   TOTAL_P_READS
-----------------------------------
IBMDEFAULTBP           310
IBMSYSTEMBP16K           0
IBMSYSTEMBP32K           0
IBMSYSTEMBP4K            0
IBMSYSTEMBP8K            0
  5 record(s)selected.

2.用于计算缓冲池命中率的公式
可使用基于缓冲池监视元素的公式来计算命中速率和命中率。

boll 本地缓冲池(DB2 pureScale环境)

在DB2 pureScale环境中计算LBP命中率时,还必须考虑独立于GBP的数据页命中率。成员请求数据页时,会先检查LBP。如果LBP中发现该页,那么pool_data_lbp_pages_found监视元素会递增。如果LBP中未发现该页,那么直接从磁盘读取,并且pool_data_p_reads监视元素会递增。但是,如果在本地缓冲池中发现依赖于GBP的页,那么pool_data_lbp_pages_found监视计数器也会递增。新监视元素pool_data_gbp_indep_pages_found_in_lbp是区分这些情况下的页访问计数的唯一方法。

对于独立于GBP的页,调整LBP大小将影响命中率。对于独立于GBP的某些类型的操作,例如,临时页访问或NOT LOGGED INITIALLY操作,那么要监视独立于GBP的页命中率。或者,要计算独立于GBP的页代理程序的本地缓冲池命中率,可使用以下公式。

您需要比较LBP命中率与GBP命中率,以决定如何调整这两个缓冲池,或在调整GBP和LBP后验证结果。

boll 组缓冲池(DB2 pureScale环境)

用于计算DB2 pureScale环境中的组缓冲池命中率的公式与其他DB2环境中使用的命中率公式不同。不同是因为集群高速缓存设施中的组缓冲池使用每个成员中的本地缓冲池来检索数据页。以下基于缓冲池监视元素的公式可用于计算本地缓冲池和组缓冲池的数据页、索引页和XML存储对象页的命中率。

除先前用于计算缓冲池命中率的公式之外,还可使用以下公式来显示在GBP中发现预取页的次数的百分比。

boll 预取的命中率

数据页预取的命中率可以通过下列公式计算:

((pool_async_data_gbp_l_reads- pool_async_data_gbp_p_reads)/ pool_async_data_gbp_l_reads)×100

索引页预取的命中率可以通过下列公式计算:

((pool_async_index_gbp_l_reads- pool_async_index_gbp_p_reads )/ pool_async_index_gbp_l_reads)× 100

XML存储对象(XDA)页的预取命中率可以通过下列公式计算:

((pool_async_xda_gbp_l_reads- pool_async_xda_gbp_p_reads )/ pool_async_xda_gbp_l_reads)×100

以上这些参数都可以通过InfoSphere Optim Performance Manager的仪表板查看相应的结果。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-10-24 19:02:41

《DB2性能管理与实战》——2.6 DB2 pureScale环境中内存管理的相关文章

《DB2性能管理与实战》——2.2 数据库管理器共享内存

2.2 数据库管理器共享内存 DB2性能管理与实战 数据库管理器共享内存由若干个不同的内存区组成,可使用配置参数控制这些区域的大小.图2-2显示了数据库管理器共享内存的分配方式. 2.2.1 实例(数据库管理器)共享内存 每个DB2实例都有一个实例共享内存.实例共享内存是在数据库管理器启动(db2start)时分配的,并随着数据库管理器的停止(db2stop)而释放.这种内存集用于实例级的任务,例如监控.审计和节点间通信.下面的数据库管理器配置(dbm cfg)参数控制着对实例共享内存以及其中个

《DB2性能管理与实战》导读

前言 DB2性能管理与实战多年来,DB2在各行各业大中型企业中受到青睐.面对这些企业的海量数据,DB2数据库给用户提供了一些命令行的监控和分析工具,例如SNAPSHOT.DB2TOP.DB2PD.DB2ADVIS等.它们能为DBA在分析DB2性能问题时提供非常丰富和有价值的信息,从而解决很多棘手的问题.随着企业业务和规模的扩展以及日积月累的时间效应,企业数据库中的数据越来越庞大,在线的并发用户越来越多,随之而来的各种性能问题层出不穷,企业对改善性能监控和优化的效果必然会提出越来越高.越来越迫切的

《DB2性能管理与实战》——4.1 DB2性能相关参数

4.1 DB2性能相关参数 DB2性能管理与实战 本节讲述在DB2中应当注意的一些与性能相关的配置参数,包括注册表参数.数据库管理器参数和数据库参数.和内存相关的参数请参见第2章,这里不再赘述. 4.1.1 注册表参数 1.DB2_OVERRIDE_BPF 这个变量以页为单位指定在激活数据库.前滚恢复或崩溃恢复时要创建的缓冲池大小.当内存约束导致在激活数据库.前滚恢复或崩溃恢复期间出现故障时,此选项很有用.出现内存不足可能是因为实内存短缺(这种情况很少发生):或者因为数据库管理器试图在没有精确配

《DB2性能管理与实战》——2.5 缓冲池管理

2.5 缓冲池管理 DB2性能管理与实战在介绍数据库共享内存的时候,讲到了数据库缓冲池,这里介绍一下缓冲池的工作原理. 缓冲池指的是从磁盘读取表和索引数据时,数据库管理器分配的用于高速缓存这些表或索引数据的主存储器区域.每个DB2数据库都必须具有一个缓冲池. 每个新数据库都定义了一个称为IBMDEFAULTBP的缺省缓冲池.可以使用CREATE BUFFERPOOL.DROP BUFFERPOOL和ALTER BUFFERPOOL语句来创建.删除和修改缓冲池.SYSCAT.BUFFERPOOLS

《DB2性能管理与实战》——2.2 共享内存与私有内存

2.2 共享内存与私有内存 DB2性能管理与实战 至此,已经讨论了实例共享内存.数据库共享内存和应用程序组共享内存以及代理私有内存.但是共享内存和私有内存的意义是什么呢? 为了理解共享内存与私有内存之间的不同之处,首先通过快速阅读DB2进程模型来了解一下DB2代理进程.在DB2中,所有数据库请求都是由DB2代理或子代理来服务的.例如,当一个应用程序连接到一个数据库时,就有一个DB2代理指派给它.当该应用程序发出任何数据库请求(例如一个SQL查询)时,该代理就会执行完成这个查询所需的所有任务--它

《DB2性能管理与实战》——2.3 STMM介绍

2.3 STMM介绍 DB2性能管理与实战 在DB2 V9以后,引入了一种新的内存自动调优特性,叫做自调内存管理(STMM).它通过自动设置几个内存配置参数值的方式,简化了内存配置任务.内存自动调优一旦启动,就能够在内存使用者(包括排序.程序包缓存.锁定列表和缓冲池等)之间动态分配可用内存资源. 调整器在DATABASE_MEMORY配置参数所定义的内存限制范围内工作.此参数的值也可以自动调整.启用自调整功能(将DATABASE_MEMORY的值设置为AUTOMATIC)之后,调整器将确定数据库

《DB2性能管理与实战》——2.4 多分区下的内存管理特性

2.4 多分区下的内存管理特性 DB2性能管理与实战在分区数据库环境中使用自调整内存功能时,有一些因素决定该功能是否能适当地调整系统. 对分区数据库启用自调整内存功能时,会将一个数据库分区指定为调整分区,所有内存调整决定都根据该数据库分区的内存和工作负载特征作出.在该分区中作出调整决策之后,会将内存调整纷纷到其他数据库分区,以确保所有数据库分区都维护类似的配置. 单调整分区模型假定,仅当所有数据库分区具有类似内存需求时,才会使用该功能.在确定顶是否对分区数据库启用自调整内存功能时,请使用下列准则

《DB2性能管理与实战》——第4章 DB2性能监控相关命令及参数

第4章 DB2性能监控相关命令及参数 DB2性能管理与实战本章讲述DB2自带的性能监控的传统工具.命令以及性能优化的一些相关参数,在后面的章节中将介绍最新的DB2的图形化监控和优化工具,使读者能够对不同工具的使用风格有一个全面的了解. 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

《DB2性能管理与实战》——2.1 内存概览

2.1 内存概览 DB2性能管理与实战DB2内存管理器将操作系统中的内存分配为内存集.DB2的内存集(memory set)有以下4种,如图2-1所示. boll 实例(数据库管理器)共享内存(instance shared memory). boll 数据库共享内存(database shared memory). boll 应用程序组共享内存(application group shared memory). boll 代理私有内存(agent private memory). 每种内存集由