DB2缓冲池、表空间详解

来源:互联网 发布:电脑无法安装软件 编辑:程序博客网 时间:2024/05/16 10:57

简介

对于刚涉足 DB2 领域的 DBA 或未来的 DBA 而言,新数据库的设计和性能选择可能会很令人困惑。在本文中,我们将讨论DBA 要做出重要选择的两个方面:表空间和缓冲池。表空间和缓冲池的设计和调优会对 DB2 服务器的性能产生深远的影响,因此我们将着重讨论这些活动。

 

1 缓冲池

1.1    概述

一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。当考虑将缓冲池用于一个或多个表空间时,必须保证表空间页大小和缓冲池页大小对于缓冲池所“服务”的所有表空间而言都是一样的。一个表空间只能使用一个缓冲池。

创建数据库时,会创建一个名为 IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。可以使用 CREATE BUFFERPOOL 语句添加更多的缓冲池。缓冲池的缺省大小是 BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在 CREATE BUFFERPOOL 命令中指定 SIZE 关键字来覆盖该缺省值。足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘 I/O 这一最耗时的操作。大型缓冲池还会对查询优化产生影响,因为更多的工作可在内存中完成。

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

扩展存储器 
DB2 不将扩展存储器用于缓冲区。但是,可以用扩展存储器来高速缓存内存页,使得从内存移出页变得更快。

 

1.2    创建缓冲池

db2 'CREATE BUFFERPOOL userbufpool IMMEDIATE SIZE 250 AUTOMATIC PAGESIZE 8K'

 

属性解释:

immediate/deferred immediate(规定如果系统上有足够的内存,则立即创建缓冲池。 immediate 选项是默认的。), deferred(规定在下一次数据库被停止和重新启动时再创建缓冲池。)

 

size 指定缓冲池的大小,并且以页为单位。

 

pagesize 指定缓冲池的页宽。默认页宽为 4 KB 或 4,096 字节。页宽可以按字节或千字节指定。

 

blocksize 指定在缓冲池基于块的区域中的一个给定块中的数据页的数量。块的大小必须介于 2 页与 256 页之间。默认值是 32 页。

 

numblockpages 指定在缓冲池的基于块的区域中创建的数据页的数量。numblockpages 的实际值可能与指定的值不符,因为其大小必须是 blocksize 的倍数。

 

AUTOMATIC 缓冲池交由DB2自动管理,当指定了AUTOMATIC之后,表空间的NPAGES=-2

 

缓冲池中基于块的区域不能超过缓冲池大小的 98%。如果将基于块的区域的大小指定为 0,则会禁用缓冲池的块 I/O。

 

extended storage/not extended storage 指定是否将缓冲池中受到危害的页复制到被称作扩展存储(extended storage)的辅助缓存中。从扩展存储检索数据比从磁盘检索数据更为高效,但是不如从缓冲池检索数据高效,因此它不适用于 64 位环境。

       定义好缓冲池的页宽和名称后,便不能更改它们。

 

 

1.3    修改缓冲池

db2 'ALTER BUFFERPOOL userbufpoolIMMEDIATE SIZE 500 ' 

 (修改缓冲池大小为:500 * pagesize

 

db2 'ALTER BUFFERPOOL userbufpool IMMEDIATE SIZE 500'

 

1.4    删除缓冲池

DROP BUFFERPOOL userbufpool     

 

1.5    查看缓冲池

SELECT * FROM SYSCAT.BUFFERPOOLS;

1.6    例子

1.6.1    SQL客户端创建缓冲池

--创建缓冲池

--1.创建基础数据表空间缓冲池-- 100M

CREATE BUFFERPOOL BASEDATA_BUFPOOL IMMEDIATE SIZE 6400 PAGESIZE 16K;

--2.创建系统业务表空间缓冲池 -- 200M

CREATE BUFFERPOOL BUSINESS_BUFPOOL IMMEDIATE SIZE 12800 PAGESIZE 16K;

--3.创建大数据数据表空间缓冲池 -- 300M

CREATE BUFFERPOOL DASHUJU_BUFPOOL IMMEDIATE SIZE 19200 PAGESIZE 16K;

--4.修改默认缓冲池大小-- 200M

ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE SIZE 12800;



当指定了AUTOMATIC之后,表空间的NPAGES=-2

 

1.6.2    Linux控制台创建

切换至DB2管理员账号

su - db2inst1

连接至Test数据库

db2 CONNECT TO Test

创建缓冲池

         1.创建基础数据表空间缓冲池-- 100M(根据服务器具体配置可调整)

         db2 'CREATE BUFFERPOOL BASEDATA_BUFPOOL IMMEDIATE SIZE 6400 PAGESIZE 16K'

 

         2.创建系统业务表空间缓冲池 -- 300M(根据服务器具体配置可调整)

         db2 'CREATE BUFFERPOOL BUSINESS_BUFPOOL IMMEDIATE SIZE 19200 PAGESIZE 16K'

 

         3.创建大数据数据表空间缓冲池 -- 600M(根据服务器具体配置可调整)

         db2 'CREATE BUFFERPOOL DASHUJU_BUFPOOL IMMEDIATE SIZE 38400 PAGESIZE 16K'

 

1.7    监视缓冲池

 打开监视  db2 update monitor switches using bufferpool on

 查看缓存池使用  db2 get snapshot for bufferpools on kg

  关闭监视  db2 update monitor switches using bufferpool off

 

2       表空间


2.1 概述

1       数据库中的所有数据都存储在许多表空间中。可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。根据用途有五种不同的表空间:

2       目录表空间

3       每个数据库只有一个目录表空间,它是在发出 CREATE DATABASE 命令时创建的。目录表空间被 DB2 命名为 SYSCATSPACE,它保存了系统目录表。总是在创建数据库时创建该表空间。

4       常规表空间

5       常规表空间保存表数据和索引。它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。我们将在本文后面定义 DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。每个数据库中必须至少有一个常规表空间。创建数据库时指定该表空间的缺省名为 USERSPACE1。

6       长表空间

7       长表空间用于存储长型或 LOB 表列,它们必须驻留在 DMS 表空间中。它们还可以存储结构化类型的列或索引数据。如果没有定义长表空间,那么将把 LOB 存储在常规表空间中。长表空间是可选的,缺省情况下一个都不创建。

8       系统临时表空间

9       系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1。

10     用户临时表空间

11     用户临时表空间存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。

12    表空间管理

13     可以用两种不同的方式管理表空间:

14     系统管理的空间(SMS)

15     SMS 表空间由操作系统进行管理。容器被定义成常规操作系统文件,并且是通过操作系统调用访问的。这意味着所有的常规操作系统功能将处理以下内容:操作系统将缓冲 I/O;根据操作系统约定分配空间;如有必要就自动扩展表空间。但是,不能从 SMS 表空间删除容器,并且仅限于将新的容器添加到分区的数据库。前一节中所说明的那三个缺省表空间都是 SMS。

16     数据库管理的空间(DMS)

17     DMS 表空间是由 DB2 管理的。可以将容器定义成文件(在创建表空间时将把给定的大小全部分配给它们)或设备。分配方法和操作系统允许多少 I/O,DB2 就可以管理多少 I/O。可以通过使用 altER TABLESPACE 命令来扩展容器。还可以释放未使用的那部分 DMS 容器(从 V8 开始)。

18     DMS自动存储表空间(Automatic Storage DMS)

自动存储表空间不是真正意义上的独立类型的表空间。它是DMS存储的另外一种处理方法。DMS需要很多的维护操作,而自动存储器则是作为一种简化的空间管理手段,能够自动进行表空间的管理维护,它是DB2 V8.8.2中引入的概念,目前取代SMS成为默认的表空间类型。

19     DB2的表空间按管理方式分为两种:系统管理空间(System Management Space,SMS)和数据库管理空间(Database Management Space,DMS)。  

20     按类型分为:规则表空间、长整数表空间、系统临时表空间、用户临时表空间。其中长整数表空间只能是DMS的。

21     规则表空间中包含用户数据的表。默认用户表空间名为USERSPACE1,索引也存储在规则表空间中,另外系统目录表也放在规则表空间中。 默认的系统目录表空间名为SYSCATSPACE。

22     临时表空间分为系统临时表空间和用户临时表空间。系统临时表空间用来存储各种数据操作(排序、重组表、创建索引、连接表)中所需的内部临时数据,虽

23     然可以创建任意多个系统临时表空间,但建议用户只使用大多数表所使用的页大 小创建一个,默认系统临时表空间名为TEMPSPACE1。用户临时表空间用来存储已

24     说明全局临时表(已说明全局临时表存储的是应用程序临时数据)。用户临时表 空间不是在数据库创建时默认创建的。

25     SMS每个容器是操作系统的文件空间中的一个目录;DMS每个容器是一个固定的、预分配的文件,或是物理设备。

26     SMS的管理比较简单,由操作系统自动管理,空间的大小随数据量的变化系统 自动调整。

27     DMS是由数据库管理的,空间大小在创建时确定,空间不够时要手工添加或删 除部分数据以释放空间。

28     大多数情况下,DMS的性能比SMS好。



2.2 创建表空间

1.DMS自动存储表空间(Automatic Storage DMS)

自动存储表空间不是真正意义上的独立类型的表空间。它是DMS存储的另外一种处理方法。DMS需要很多的维护操作,而自动存储器则是作为一种简化的空间管理手段,能够自动进行表空间的管理维护,它是DB2 V8.8.2中引入的概念,目前取代SMS成为默认的表空间类型。

db2 'create regular tablespace tbspc01 pagesize 8k managed by automatic storage extentsize 8 prefetchsize 8 bufferpool bf01 overhead 24.1 transferrate 0.9 dropped table recovery on'

 

2.3 修改表空间

ALTER TABLESPACE tbspc01 bufferpool bf01; --修改表空间缓冲池

ALTER TABLESPACE DASHUJU_TBS  no file system caching; --修改缓存级别

 

2.4 删除表空间

drop tablespace tbspc01;

 

2.5 查看表空间

linux查看表空间使用情况

         db2 list tablespaces show detail

目录表空间--SYSCATSPACE,它保存了系统目录表,在创建数据库是即创建

常规表空间--USERSPACE1(此为缺省名称),保存表数据和索引

系统临时表空间--TEMPSPACE1(此为缺省名称),用于存储SQL操作期间所需的内部临时数据

 查看具体表空间

db2 list tablespace containers for TablespaceID(具体的id) show detail

 

Sql查看

sql查看表空间

         SELECT * FROM SYSCAT.TABLESPACES;

         SELECT TBSPACE, BUFFERPOOLID FROM SYSCAT.TABLESPACES;

0 0