对于刚涉足 DB2 领域的 DBA 或未来的 DBA 而言,新数据库的设计和性能选择可能会很令人困惑。在本文中,我们将讨论DBA 要做出重要选择的两个方面:表空间和缓冲池。表空间和缓冲池的设计和调优会对 DB2 服务器的性能产生深远的影响,因此我们将着重讨论这些活动。
1 缓冲池
一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。当考虑将缓冲池用于一个或多个表空间时,必须保证表空间页大小和缓冲池页大小对于缓冲池所“服务”的所有表空间而言都是一样的。一个表空间只能使用一个缓冲池。
创建数据库时,会创建一个名为 IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。可以使用 CREATE BUFFERPOOL 语句添加更多的缓冲池。缓冲池的缺省大小是 BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在 CREATE BUFFERPOOL 命令中指定 SIZE 关键字来覆盖该缺省值。足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘 I/O 这一最耗时的操作。大型缓冲池还会对查询优化产生影响,因为更多的工作可在内存中完成。
基于块的缓冲池
V8 允许您留出缓冲池的一部分(最高可达 98%)用于基于块的预取操作。基于块的 I/O 可以通过将块读入相邻的内存区而不是将它分散装入单独的页,来提高预取操作的效率。每个缓冲池的块大小必须相同,并且由 BLOCKSIZE 参数进行控制。该值等于块的大小(单位为页),从 2 到 256,缺省值为 32。
扩展存储器
DB2 不将扩展存储器用于缓冲区。但是,可以用扩展存储器来高速缓存内存页,使得从内存移出页变得更快。
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 位环境。 定义好缓冲池的页宽和名称后,便不能更改它们。 |
|
db2 'ALTER BUFFERPOOL userbufpool IMMEDIATE SIZE 500 ' (修改缓冲池大小为:500 * pagesize )
db2 'ALTER BUFFERPOOL userbufpool IMMEDIATE SIZE 500' |
DROP BUFFERPOOL userbufpool |
SELECT * FROM SYSCAT.BUFFERPOOLS; |
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' |
打开监视 db2 update monitor switches using bufferpool on 查看缓存池使用 db2 get snapshot for bufferpools on kg 关闭监视 db2 update monitor switches using bufferpool off |
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好。
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' |
ALTER TABLESPACE tbspc01 bufferpool bf01; --修改表空间缓冲池 ALTER TABLESPACE DASHUJU_TBS no file system caching; --修改缓存级别 |
drop tablespace tbspc01; |
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; |