DB2的表空间和缓冲池
- 格式:doc
- 大小:70.00 KB
- 文档页数:7
DB2中内存的使用摘要:本文将向您讲解 DB2 内存使用的基础,以及共享内存和私有内存的概念。
这些内容同时适用于 32 位和 64 位的系统。
简介理解 DB2 如何使用内存,可以防止过度分配内存,并有助于对内存的使用进行调优,从而获得更好的性能。
本文将向您传授 DB2 内存使用的基础,以及共享内存和私有内存的概念。
这些内容同时适用于 32 位和 64 位的系统。
虽然对于 64 位系统有一些限制,但是在未来的一段时间内还不大可能触及这些限制。
因此,我们将焦点放在影响 32 位系统的内存限制,并对之进行详细的讨论。
我们首先讨论一般情况下 DB2 如何使用内存,接着讨论内存管理如何随着平台(AIX、Sun、HP、Linux 和 Windows)的不同而变化,以及它们对 DB2 的影响。
最后,我们将给出一些实际生活中客户处境/问题以及他们的解决方案的有意义的例子。
本文的内容适用于 DB2 version 8。
DB2 内存结构概述图 1中说明了 DB2 内存结构。
这种内存结构在所有平台上都是一致的。
注意:在多分区环境中,下面的图适用于多分区实例中的每个分区。
图 1 - DB2 内存结构DB2 在 4 种不同的内存集(memory set)内拆分和管理内存。
这 4 种内存集分别是:1.实例共享内存(instance shared memory)2.数据库共享内存(database shared memory)3.应用程序组共享内存(application group shared memory)4.代理私有内存(agent private memory)每种内存集由各种不同的内存池(亦称堆)组成。
图 1 也给出了各内存池的名称。
例如,locklist是属于数据库共享内存集的一个内存池。
sortheap是属于代理私有内存集的一个内存池。
我们将详细讨论每一种内存集。
实例共享内存每个 DB2 实例都有一个实例共享内存。
精品文档一 、 简介理解 DB2 如何使用内存,可以防止过度分配内存,并有助于对内存的使用进行调优,从 而获得更好的性能。
DB2 V9 引入了自动自调整内存管理 ,自适应的自调整内存功能通过自动设置内存配置参 数值以及调整缓冲池大小来简化内存配置任务。
启用此功能后,内存调整器就会在几个内存使用 者(包括:排序、程序包高速缓存、锁定列表和缓冲池)之间动态地分配可用内存资源,从而简 化了内存配置参数调整的工作量。
在 DB2 V9 之前,数据库 的内存配置参数和缓冲池都是由管理员手工设置的。
而数据库的 工作负载很少是静态的,而是动态变化的。
比如,当工作负载类型发生变化(由事务型变成了混 合型等)、用户增加、维护任务的运行或者其它应用程序消耗的资源变化等,都会造成工作负载 在不停的变化。
因此,即便是资深的数据库管理员调优过的系统,在另一个时候也未必是最优的。
数据库管理员需要根据变化随时做出调整,工作量大而效果也不明显。
变化可能在很短的时间内 发生,因此留给数据库管理员作出响应的时间很短。
数据库内存设置尤其容易受这些变化的影响, 因而会严重影响响应时间。
二、 DB2 内存结构精品文档精品文档DB2 在 4 种不同的内存集(memory set)内拆分和管理内存。
这 4 种内存集分别是: 精品文档精品文档 实例共享内存(instance shared memory) 数据库共享内存(database shared memory) 应用程序组共享内存(application group shared memory) (略) 代理私有内存(agent private memory)1. 实例共享内存每个 DB2 实例都有一个实例共享内存。
实例共享内存是在数据库管理器启动(db2start)时分配的,并随着数据库管理器的停止(db2stop) 而释放。
这种内存集用于实例级的任务,例如监控、审计和节点间通信。
DB2表空间类型DB2 表空间类型在介绍如何将数据库管理表空间转换为⾃动存储表空间之前,我们先来回顾⼀下 DB2 表空间的各种类型以及各⾃的特点。
系统管理表空间 (System-Managed Space,SMS):这种类型的表空间由操作系统的⽂件管理系统分配和管理空间。
在 DB2 V9 之前,SMS 表空间是默认选项,如果不带任何选项创建数据库或表空间,数据库管理器会⾃动将表空间建成系统管理表空间。
创建 SMS 时,可以指定多个路径做为表空间的容器,空间的⼤⼩随数据量的变化由数据库管理器⾃动调整。
这种类型的表空间⽐较便于管理,但空间⼤⼩受到⼀定限制,性能在⼤多数情况下不如数据库管理表空间。
数据库管理的空间 (Database-Managed Space,DMS):这种表空间由 DB2 数据库管理器负责管理存储空间。
表空间容器可使⽤⽂件系统或裸设备。
在定义 DMS 表空间时,可以指定多个⽂件名以及每个⽂件的⼤⼩,数据库管理器建⽴并使⽤这些⽂件作为表空间容器。
表空间⼤⼩在创建时确定,空间不够时要⼿⼯添加容器,对于以⽂件作为容器的表空间可以指定 AUTORESIZE,从⽽在容器空间不够时由数据库管理器⾃动增加容器⼤⼩。
这种表空间性能⽐较好,但需要在维护容器⽅⾯花费⼀些⼯作量。
DMS 在需要经常关注和调整底层容器分配的场合有很⼤的灵活性。
⾃动存储表空间 (Automatic Storage Spaces):⾃动存储看起来是⼀种不同类型的表空间,但实际上是 DMS 和 SMS 的扩展。
因为数据库管理的空间 DMS 需要⽐较多的维护,在 DB2 V8.2.2 中引⼊了 DMS ⾃动存储,以简化表空间管理。
这种类型的表空间既保持了 DMS 的⾼性能⼜具有 SMS 表空间易于管理的特点,可以⼤⼤简化 DBA 的管理⼯作。
⾃动存储需要⾸先在数据库级别启⽤,在 DB2 V9 以后,⾃动存储已经成为了 DB2 的默认设置,在建⽴数据库时,DBA 可以提供⼀组路径,在建⽴表空间时,数据库管理器会在这些提供的路径中建⽴需要的容器,容器的⼤⼩根据情况由数据库管理器负责分配和管理。
1数据库设计时优化1.1选择数据页的大小注意:在DB2 8版本以下是这样限制, 每页上最多行不能超过255个。
如果在页大小为32KB的表空间放行长度为12字节的表,它大约只能每个页的10%,即(255 x 12字节+91字节开销)= 3KB。
造成空间的浪费。
根据大表选择大页的表空间,小表选择小页的表空间,选择是由数据行的大小估算出来的。
1.2规范化数据库被规范化后,减少了数据冗余,数据量变小,数据行变窄。
这样DB2的每一页可以包括更多行,那么每一区里的数据量更多,从而加速表的扫描,改进了单个表的查询性能。
但是,当查询涉及多个表的时候,需要用很多连接操作把信息从各个表中组合在一起,导致更高的CPU和I/O花销。
那么,有很多时候需要在规范化和非规范化之间保持平衡,用适当的冗余信息来减少系统开销,用空间代价来换取时间代价。
1.3选择数据类型对每一属性选择什么样的数据类型很大程度上依据表的要求,但是在不违背表要求的前提下,选择适当的数据类型可以提高系统性能。
比如有text 列存放一本书的信息,用BLOB而不是character(1024),BLOB存放的是指针或者文件参照变量,真正的文本信息可以放在数据库之外,从而减少数据库存储空间,使得程序运行的速度提高。
DB2提供了UDT(User Defined Datatypes)功能,用户可以根据自己的需要定义自己的数据类型。
当然我们不提倡大量使用自定义数据类型。
使用了用户自定义类型之后,编程时需要进行数据类型的转换,会导致应用性能降低。
1.4选择索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。
现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。
使用索引可以快速、直接、有序的存取数据。
索引的建立虽然加快了查询,另一方面却将低了数据更新的速度,因为新数据不仅要增加到表中,也要增加到索引中。
另外,索引还需要额外的磁盘空间和维护开销。
因此,要合理使用索引:✧在经常进行连接,但是没有指定为外键的属性列上建立索引。
IBM的DB2 V9 引入了自动存储器管理,使用自动存储功能可以帮助您简化表空间的存储管理,新创建的使用自动存储功能的表空间,其容器和空间分配完全由 DB2数据库管理器确定。
本文重点介绍使用DB2® V9 自动存储功能的数据库如何进行非增量重定向还原。
简介数据库可能会因为软件或硬件故障而不可用,可能会遇到存储问题、断电、应用程序故障或误操作等各种需要采取不同恢复措施的故障情况。
本文重点介绍使用了DB2® V9 的自动存储功能,不允许增量备份的数据库如何进行重定向还原。
由于使用自动存储器功能的数据库在还原方面和以往有了很大区别,客户在实际使用的过程中容易出现各种问题,所以本文对自动存储功能会有详细的阐述。
自动存储特性最初是在DB2 V8.2.2中引入的,DB2 V9扩展了这一特性,使用自动存储功能可以帮助您简化表空间的存储管理,新创建的使用自动存储功能的表空间,其容器和空间分配完全由 DB2数据库管理器确定。
自动存储管理自动存储器跨磁盘和文件系统自动增大数据库大小。
因此,在保持数据库管理的存储器性能和灵活性的同时,不再需要管理存储器容器。
在DB2 V9.1中,已对多分区数据库增加了自动存储器支持。
如果您使用的是带DPF(Data Partitioning Feature,数据库分区功能)的企业服务器版,那您可以使用支持自动存储器功能的多分区数据库。
在DB2 V9中创建新数据库的时候,默认启用自动存储功能,主要目的是简化表空间的存储管理,使用自动存储功能的数据库有一个或多个相关联的存储器路径,在创建表空间的时候不用指定存储的路径等特性。
对使用自动存储器功能的数据库,其表空间可以使用自动存储管理,也可以不使用自动存储管理。
对于不使用自动存储器功能的数据库,则其表空间不能使用自动存储管理。
自动存储器简化了存储管理,它使您能够指定用于数据库管理器存放表空间数据以及为各种用途分配空间的存储路径。
数据库_DB2数据库优化DB2数据库是一种关系型数据库管理系统,由IBM开发和维护。
为了提高DB2数据库的性能和效率,需要进行一系列的优化操作。
下面将介绍一些常见的DB2数据库优化方法。
1.确保合适的硬件配置:DB2数据库的性能很大程度上依赖于底层硬件的性能。
因此,为了获得最佳性能,需要确保数据库运行在合适的硬件配置下。
这包括选择合适的处理器、内存和磁盘配置。
2.优化数据库设计:良好的数据库设计可以提高数据库的性能。
可以通过合理的表设计、索引设计和关联设计来减少数据的冗余和重复,从而提高查询和更新的效率。
3.数据库分区:当数据库中的数据量增加时,可以考虑对数据库进行分区,将数据划分为多个分区存储。
这样可以提高查询和更新的效率,减少锁冲突,并且可以利用多个处理器并行处理多个分区。
4.合理使用索引:索引是提高数据库查询性能的重要手段。
在创建索引时,需要根据实际情况选择合适的列和索引类型,并避免创建过多的索引,以防止影响更新操作的性能。
5.定期收集统计信息:收集数据库表的统计信息可以帮助DB2优化器生成更高效的查询计划。
可以使用DB2提供的统计信息收集工具来定期收集表的统计信息,并确保统计信息是最新的。
6.合理设置数据库参数:DB2数据库有很多参数可以进行优化配置。
这些参数包括缓冲池大小、日志文件大小和数据库连接数等。
通过合理设置这些参数,可以提高数据库的性能和响应速度。
7.优化SQL查询语句:SQL查询语句的性能直接影响数据库的性能。
可以通过使用合适的连接方式、避免使用不必要的子查询和关联查询等方式来优化查询语句。
8.避免长事务:长时间运行的事务会占用数据库资源,影响其他查询和更新操作的性能。
因此,需要尽量避免长时间运行的事务,或者使用事务分解等方式将长事务分解为多个短事务。
9.定期清理无用数据:数据库中的无用数据会占用磁盘空间,并影响查询和更新操作的性能。
因此,需要定期清理无用数据,例如删除过期的日志文件、归档数据和临时表等。
DB2的表空间和缓冲池对于刚涉足DB2 领域的DBA 或未来的DBA 而言,新数据库的设计和性能选择可能会很令人困惑。
在本文中,我们将讨论DBA 要做出重要选择的两个方面:表空间和缓冲池。
表空间和缓冲池的设计和调优会对DB2 服务器的性能产生深远的影响,因此我们将着重讨论这些活动。
表空间数据库中的所有数据都存储在许多表空间中。
可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。
由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。
根据用途有五种不同的表空间:目录表空间每个数据库只有一个目录表空间,它是在发出CREATE DATABASE 命令时创建的。
目录表空间被DB2 命名为SYSCATSPACE,它保存了系统目录表。
总是在创建数据库时创建该表空间。
常规表空间常规表空间保存表数据和索引。
它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。
如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。
我们将在本文后面定义DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。
每个数据库中必须至少有一个常规表空间。
创建数据库时指定该表空间的缺省名为USERSPACE1。
长表空间长表空间用于存储长型或LOB 表列,它们必须驻留在DMS 表空间中。
它们还可以存储结构化类型的列或索引数据。
如果没有定义长表空间,那么将把LOB 存储在常规表空间中。
长表空间是可选的,缺省情况下一个都不创建。
系统临时表空间系统临时表空间用于存储SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。
每个数据库必须至少有一个系统临时表空间。
随数据库创建的系统临时表空间的缺省名为TEMPSPACE1。
用户临时表空间用户临时表空间存储已声明的全局临时表。
创建数据库时不存在用户临时表空间。
至少应当创建一个用户临时表空间以允许定义已声明的临时表。
用户临时表空间是可选的,缺省情况下一个都不创建。
表空间管理可以用两种不同的方式管理表空间:系统管理的空间(SMS)SMS 表空间由操作系统进行管理。
容器被定义成常规操作系统文件,并且是通过操作系统调用访问的。
这意味着所有的常规操作系统功能将处理以下内容:操作系统将缓冲I/O;根据操作系统约定分配空间;如有必要就自动扩展表空间。
但是,不能从SMS 表空间删除容器,并且仅限于将新的容器添加到分区的数据库。
前一节中所说明的那三个缺省表空间都是SMS。
数据库管理的空间(DMS)DMS 表空间是由DB2 管理的。
可以将容器定义成文件(在创建表空间时将把给定的大小全部分配给它们)或设备。
分配方法和操作系统允许多少I/O,DB2 就可以管理多少I/O。
可以通过使用ALTER TABLESPACE 命令来扩展容器。
还可以释放未使用的那部分DMS 容器(从V8 开始)。
下面是一个示例,向您说明该如何增大容器大小(V7 和V8 都支持此功能):ALTER TABLESPACE TS1RESIZE (FILE '/conts/cont0' 2000,DEVICE '/dev/rcont1' 2000,FILE 'cont2' 2000)如何创建和查看表空间当您创建数据库时,将创建三个表空间(SYSCATSPACE、TEMPSPACE1 和USERSPACE1)。
通过使用DB2 命令窗口(Command Window)或UNIX 命令行,创建一个名为MYDB 的数据库,连接至该数据库,然后列出表空间:CREATE DATABASE MYDBCONNECT TO MYDBLIST TABLESPACES下面显示了LIST TABLESPACES 命令的输出。
清单 1. LIST TABLESPACES 命令的输出Tablespaces for Current DatabaseTablespace ID = 0Name = SYSCATSPACEType = System managed spaceContents = Any dataState = 0x0000Detailed explanation:NormalTablespace ID = 1Name = TEMPSPACE1Type = System managed spaceContents = System Temporary dataState = 0x0000Detailed explanation:NormalTablespace ID = 2Name = USERSPACE1Type = System managed spaceContents = Any dataState = 0x0000Detailed explanation:Normal上面所示的这三个表空间是通过CREATE DATABASE 命令自动创建的。
用户可以通过在该命令中包含表空间说明来覆盖缺省的表空间创建,但是在创建数据库时必须创建一个目录表空间和至少一个常规表空间,以及至少一个系统临时表空间。
通过使用CREATE DATABASE 命令或以后使用CREATE TABLESPACE 命令,可以创建更多的所有类型的表空间(目录表空间除外)。
容器每个表空间都有一个或多个容器。
重申一次,您可以认为容器是孩子,而表空间是其父母。
每个容器只能属于一个表空间,但是一个表空间可以拥有许多容器。
可以将容器添加到DMS 表空间,或者从DMS 表空间中删除容器,而且可以更改容器的大小。
只能将容器添加到某个分区中分区数据库上的SMS 表空间,在添加之前该分区还未给表空间分配容器。
添加新的容器时,将启动一个自动的重新均衡操作以便将数据分布到所有容器上。
重新均衡操作不会妨碍对数据库的并发访问。
表空间设置可以在创建表空间时给它们指定许多设置,或者也可以稍后使用ALTER TABLESPACE 语句时指定其设置。
页大小(Page size)定义表空间所使用的页大小。
所支持的大小为4K、8K、16K 和32K。
页大小根据下表限定了可放到表空间中的表的行长度和列数:表 1. 页大小的含义扩展块大小(Extent size)指定在跳到下一个容器之前将写到当前容器中的页数。
存储数据时数据库管理器反复循环使用所有容器。
该参数只有在表空间中有多个容器时才起作用。
预取大小(Prefetch size)指定当执行数据预取时将从表空间读取的页数。
预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行I/O 了。
当数据库管理器确定顺序I/O 是适当的,并且确定预取操作可能有助于提高性能时,它就选择预取操作。
开销(Overhead)和传送速率(Transfer rate)这些值用于确定查询优化期间的I/O 成本。
这两个值的测量单位都是毫秒,而且它们应当分别是所有容器开销和传送速率的平均值。
开销是与I/O 控制器活动、磁盘寻道时间和旋转延迟时间相关联的时间。
传送速率是将一个页读入内存所必需的时间量。
它们的缺省值分别是24.1 和0.9。
可以根据硬件规格计算这些值。
CREATE TABLESPACE 语句的示例下列语句将创建一个常规表空间。
所讨论的所有设置都是为了进行说明。
CREATE TABLESPACE USERSPACE3PAGESIZE 8KMANAGED BY SYSTEMUSING ('d:\\usp3_cont1', 'e:\\usp3_cont2', 'f:\\usp3_cont3')EXTENTSIZE 64PREFETCHSIZE 32BUFFERPOOL BP3OVERHEAD 24.1TRANSFERRATE 0.9如何查看表空间的属性和容器指定LIST TABLESPACES 命令的SHOW DETAIL 选项将显示其它信息:LIST TABLESPACES SHOW DETAIL清单2显示了USERSPACE1 表空间的输出。
缺省情况下,将列出创建数据库时所创建的那三个表空间。
清单 2. LlST TABLESPACES SHOW DETAIL 命令的输出Tablespaces for Current DatabaseTablespace ID = 2Name = USERSPACE1Type = System managed spaceContents = Any dataState = 0x0000Detailed explanation:NormalTotal pages = 336Useable pages = 336Used pages = 336Free pages = Not applicableHigh water mark (pages) = Not applicablePage size (bytes) = 4096Extent size (pages) = 32Prefetch size (pages) = 16Number of containers = 1要列出容器,我们需要使用以上输出中的Tablespace ID:LIST TABLESPACE CONTAINERS FOR 2清单 3. LIST TABLESPACE CONTAINERS 命令的输出Tablespace Containers for Tablespace 2Container ID = 0Name = C:\\DB2\\NODE0000\\SQL00004\\SQLT0002.0Type = Path该命令将列出指定表空间中的所有容器。
如上所示的路径指向容器物理上所在的位置。
缓冲池一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。
当考虑将缓冲池用于一个或多个表空间时,必须保证表空间页大小和缓冲池页大小对于缓冲池所“服务”的所有表空间而言都是一样的。
一个表空间只能使用一个缓冲池。
创建数据库时,会创建一个名为IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。
可以使用CREATE BUFFERPOOL 语句添加更多的缓冲池。
缓冲池的缺省大小是BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在CREATE BUFFERPOOL 命令中指定SIZE 关键字来覆盖该缺省值。
足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘I/O 这一最耗时的操作。
大型缓冲池还会对查询优化产生影响,因为更多的工作可在内存中完成。