DB2缓冲池
- 缓冲池的作用
- 缓冲池命中率
- 查询缓冲池命中率
- 创建缓冲池
- 查看缓冲池
- 修改缓冲池
缓冲池的作用
缓冲池用于从磁盘读取表和索引数据时,数据库管理器分配的用于高速缓存这些表或索引数据的内存区域。
每个数据库至少有一个缓冲池。
数据库中的数据访问都需要经过缓冲池:读的数据需要先读到缓冲池才能提交给应用,写的数据也是要先写到缓冲池才能进行I/O。
缓冲池是影响数据库性能最大的参数,所以必须合理地设计缓冲池。
缓冲池命中率
数据库管理器不需要从磁盘装入页(即该页已经在缓冲池中)就能处理页请求的时间百分比。
公式如下:
1 - ( 缓冲池数据物理读取 + 缓冲池索引物理读取 ) / ( 缓冲池数据逻辑读取 + 缓冲池索引逻辑读取 )
缓冲池的命中率越高,使用磁盘I/O的频率就越低。
查询缓冲池命中率
打开实例级开关:主要是以下几个参数:
[db2inst1@TEST ~]$ db2 "update dbm cfg using DFT_MON_BUFPOOL ON"
[db2inst1@TEST ~]$ db2 "update dbm cfg using DFT_MON_TABLE ON"
[db2inst1@TEST ~]$ db2 "update dbm cfg using DFT_MON_STMT ON"
[db2inst1@TEST ~]$ db2 "update monitor switches using bufferpool
on lock on sort on statement on table on uow on"
DFT_MON_BUFPOOL
:默认打开实例的缓冲池监控开关DFT_MON_TABLE
:DFT_MON_STMT
:
开关打开后可以查询命中率:
[db2inst1@TEST ~]$ db2 "SELECT substr(BP_NAME,1,20) AS BP_NAME_
,(POOL_INDEX_P_READS+POOL_DATA_P_READS) AS physical_read
,(POOL_INDEX_L_READS+POOL_DATA_L_READS) AS logic_read
,1-(CAST((POOL_INDEX_P_READS+POOL_DATA_P_READS) AS DECIMAL(16,2)))/(CAST((POOL_INDEX_L_READS+POOL_DATA_L_READS + 1 ) AS DECIMAL(16,2))) AS hitting_accuracy
,SNAPSHOT_TIMESTAMP AS snapshot_time
FROM TABLE (SNAPSHOT_BP('SAMPLE',-1 )) AS SNAPSHOT_BP"
SAMPLE
是数据库的名称
创建缓冲池
BUFFERPOOL/缓冲池名称 | SIZE/大小 | PAGESIZE/页的大小(KB/B) | 占用内存(MB) |
BP4K | 1000 | 4/4096 | 4 |
BP8K | 1000 | 8/8192 | 8 |
BP16K | 1000 | 16/16384 | 16 |
BP32K | 1000 | 32/32768 | 32 |
CREATE BUFFERPOOL "BP4K" SIZE 1000 PAGESIZE 4096
CREATE BUFFERPOOL "BP8K" SIZE 1000 PAGESIZE 8k
PAGESIZE后面的数字单位默认为字节
没有指定后缀K的情况下,有效值是4096,8192,16384,32768;
有后缀K的情况下,有效值是4,8,16,32。
如果不是这些有效值,会报错。
当表空间的page size和所指定的buffer pool的page size大小不一样,也会报错。
查看缓冲池
通过查询数据的方式
[db2inst1@TEST ~]$ db2 connect to SAMPLE
[db2inst1@TEST ~]$ db2 'select substr(BP_NAME,1,20) BP_NAME
, substr(DB_NAME,1,20) DB_NAME
, substr(DB_PATH,1,50) DB_PATH from sysibmadm.snapbp'
[db2inst1@TEST ~]$ db2 'select substr(BPNAME, 1,15) BPNAME
, BUFFERPOOLID
, NPAGES
, PAGESIZE/1024 PAGESIZE_KB
, NPAGES * PAGESIZE/1024/1024 FREE_MB from syscat.bufferpools'
BP_NAME:缓冲池名称
DB_NAME:数据库名称
DB_PATH:缓冲池路径
BUFFERPOOLID:缓冲池序号
NPAGES:
PAGESIZE:
FREE的值加起来就是该库占用的内存
通过命令方式
db2mtrk -d -v
修改缓冲池
db2 alter bufferpool BP4K size 2000