转载:3.3.3 缓冲池维护

来源:互联网 发布:第七封印影评知乎 编辑:程序博客网 时间:2024/05/17 01:40

转载:http://mba.shengwushibie.com/itbook/BookChapter.asp?id=26952

3.3.3  缓冲池维护

缓冲池页大小

默认缓冲池的页大小是在使用CREATE DATABASE命令时设置的。此默认值表示所有将来CREATE BUFFERPOOL和CREATE TABLESPACE语句的默认页大小。如果在创建数据库时不指定页大小,那么默认页大小是4KB。

注意:

如果确定数据库需要8KB、16 KB或32 KB的页大小,那么必须至少定义一个具有相匹配的页大小并且与数据库中的表空间相关联的缓冲池。选择用于缓冲池的页大小是很重要的,这是因为创建缓冲池之后就不能改变页大小了。

基于块(block)的缓冲池

DB2允许您留出缓冲池的一部分(最高可达98%)用于基于块的预取操作。基于块的I/O可以通过将块读入相邻的内存区而不是将它分散装入单独的页,来提高预取操作的效率。每个缓冲池的块大小必须相同,并且由BLOCKSIZE参数进行控制。该值等于块的大小(单位为页),取值范围从2到256,默认值为32。

注意:

基于块的缓冲池主要用于数据仓库、DSS之类的连续大块读写的应用中。

在创建新的缓冲池之前,应解决下列问题:

想要使用什么缓冲池名称?

是立即创建缓冲池,还是在下一次取消激活然后重新激活数据库之后创建缓冲池?

希望缓冲池的页大小是多大?

是将缓冲池设为固定大小,还是由数据库管理器自动调整缓冲池大小以对工作负载作出响应?建议您在创建缓冲池期间不指定SIZE参数,从而允许数据库管理器自动调整缓冲池。

您是否想保留一部分缓冲池用于基于块的I/O?

设计缓冲池时,还应根据机器上已安装的内存量以及与数据库管理器在同一机器上同时运行的其他应用程序所需要的内存来考虑内存要求。当没有足够内存来保存所访问的所有数据时,操作系统就会进行数据交换。将某些数据写入或交换到临时磁盘存储器中以为其他数据腾出空间时就会进行数据交换。当需要临时磁盘存储器上的数据时,又会将数据交换回内存中。

创建缓冲池

恰当地定义缓冲池是拥有一个运行良好的系统的关键之一。对于32位操作系统,知道内存的寻址空间十分重要(AIX是1.75 GB;Linux是1.75 GB;Sun Solaris是3.35 GB;HP-UX 是大约800MB;Windows是2-3GB)。64位系统没有这样的界限。

使用CREATE BUFFERPOOL语句来定义数据库管理器要使用的新缓冲池。以下是基本CREATE BUFFERPOOL语句的一个示例:

  1. CREATE BUFFERPOOL BP3 SIZE 2000 PAGESIZE 8K 

创建缓冲池的两个关键参数是IMMEDIATE和DEFERRED。当使用IMMEDIATE参数时, 将立即更改缓冲池大小,而不必等到下一次激活数据库时才生效。默认情况下,新的缓冲池是使用IMMEDIATE关键字创建的。对于立即请求,不需要重新启动数据库,将立即激活缓冲池。如果数据库共享内存不足以分配新空间,那么会延迟(DEFERRED)运行该语句。

如果您发出CREATE BUFFERPOOL DEFERRED,那么不会立即激活缓冲池;将在下一次启动数据库时创建缓冲池。在重新启动数据库之前,任何新的表空间都将使用现有缓冲池,即使创建该表空间时显式使用延迟缓冲池也是如此。

创建缓冲池时,应查看机器上是否有足够的内存用于已创建的所有缓冲池。要综合考虑操作系统上别的应用和操作系统本身的内存需求。

修改缓冲池

有许多理由要修改缓冲池,例如,为了启用自调整内存功能。为此,可以使用ALTER BUFFERPOOL语句。可以修改缓冲池的如下属性:

启用缓冲池自调整功能,从而允许数据库管理器根据工作负载调整缓冲池大小;

修改基于块的I/O的缓冲池的块区域;

修改部分缓冲池的大小。

使用ALTER BUFFERPOOL语句来改变缓冲池对象的单个属性。例如: 

  1. ALTER BUFFERPOOL buffer pool name SIZE number of pages 

buffer pool name是缓冲池名称,number of pages是要分配给此特定缓冲池的新页数。也可以使用值-1,它指示缓冲池大小应该是在buffpage数据库配置参数中设置的值。

查看缓冲池属性

通过查询SYSCAT.BUFFERPOOLS系统视图可以列出缓冲池信息:

  1. SELECT * FROM SYSCAT.BUFFERPOOLS  
  2. BPNAME           BUFFERPOOLID NGNAME             NPAGES      PAGESIZE    ES  
  3. --------------- ------------ ------------------ ----------- ----------- --  
  4. IBMDEFAULTBP                  1 -                          250        4096 N  
  5.   1 record(s) selected. 

要找出哪个缓冲池被分配给了表空间,请运行下面这个查询:

  1. SELECT TBSPACE, BUFFERPOOLID FROM SYSCAT.TABLESPACES  
  2. TBSPACE            BUFFERPOOLID  
  3. ------------------ ------------  
  4. SYSCATSPACE                   1  
  5. TEMPSPACE1                    1  
  6. USERSPACE1                    1  
  7.   3 record(s) selected. 

可以在上一个查询中找到BUFFERPOOLID,该查询使您能够看到每个表空间与哪个缓冲池相关联。

删除缓冲池

删除缓冲池时,应确保没有任何表空间已指定给这些缓冲池。不能删除 IBMDEFAULTBP缓冲池。

可以使用DROP BUFFERPOOL语句来删除缓冲池,如下所示:

  1. DROP BUFFERPOOL <buffer pool name

原创粉丝点击