循序渐进DB2---表空间设计注意事项

上一篇 / 下一篇  2013-05-06 17:01:07 / 个人分类:Database

1.表空间类型选择

在确定应使用哪种类型的表空间来存储数据时,需要考虑一些问题。

SMS表空间的优点:

根据需要,系统按需分配空间 

由于不必预定义容器,所以创建表空间需要的初始工作较少

DMS表空间的优点:

通过使用ALTER TABLESPACE语句,可添加或扩展容器来增加表空间的大小。 现有数据可以自动在新的容器集合中重新平衡,以保持最佳I/O效率

根据存储的数据的类型,可以把一个表长字段(LF)和大对象(LOB)数据、索引和常规表数据分割存放在多个表空间中以提高性能和空间存储容量。通过分隔表数据,可以提高性能和增加每个表存储的数据量。例如,如果您要使用4KB页大小的大型表空间,那么可以有一个包含2TB正规表数据的表、有一个包含2TB索引数据的单独表空间和另一个包含2TB长型数据的单独表空间。如果这3种类型的数据存储在一个表空间中,那么总空间将限制为2TB。使用较大的页大小将允许您存储更多数据

对范围分区数据创建的索引可以与表数据存储在不同的表空间中

可控制数据在磁盘上的位置(如果操作系统允许)

通常,精心设计的一组DMS表空间的性能将优于SMS表空间

注意:

对于性能要求很高的应用程序,特别是涉及大量DML操作的应用程序,建议您使用DMS表空间。

其实DMS的优势,就是数据在物理磁盘上的连续性。SMS使用操作系统来管理空间,虽然从逻辑上看,看似所有的文件都是连续的,但是在物理磁盘上,每次文件的增大都必须要分配新的空间。所以从操作系统看来,所谓的"分配"不过是在inode节点中增加一个指向页的偏移,这个页是操作系统寻找出来没有被使用的,因此从磁盘上看来,一个文件可以被切分成很多块存储在不同的地方-- 尽管逻辑上它们是连续的。这也就是能够动态增加size的SMS文件的致命伤。不像DMS,分配完成之后一般不会随意增加或者减少size,SMS的size增加有时可能非常频繁,因此每个文件在物理磁盘上的存储会被划分成一个个小块。这样的话尽管在逻辑上它们的条带化还是连续的,但是从物理磁盘上看它们每个extent之间可能并非连续,无法使用range prefetch直接从磁盘上读取几个连续的extent。

而且在这两种类型的表空间上,数据的放置也会有所不同。例如,进行高效表扫描要求扩展数据块中的页在物理上是连续的。对于SMS,操作系统的文件系统决定了每个逻辑文件页的物理放置位置。根据文件系统上其他活动的级别以及用来确定放置位置的算法的不同,可能会连续分配这些页、也可能不会。但是,对于DMS,因为数据库管理器直接与磁盘打交道,所以它可以确保这些页在物理上是连续的。

通常,小型个人数据库用SMS表空间管理最容易。另一方面,对于不断增长的大型数据库,建议使用SMS表空间用作临时表空间和系统编目表空间,而使用具有多个容器的单独的DMS表空间用于每个表。另外,建议将长字段(LF)数据和索引存储在它们自己的表空间中。

在深刻理解上述两种表空间优缺点后,我们选择表空间要综合考虑如下因素:

表中的数据量

如果计划在一个表空间中存储许多小表,那么考虑使用SMS充当该表空间。对于小表,DMS表现在I/O和空间管理效率方面的优点就没有那么重要。SMS的优点(仅在需要时使用)却对小表更具吸引力。如果一个表较大或者您需要更快地访问表中的数据,应考虑具有较小扩展数据块大小的DMS表空间。

设计数据库时,可以考虑对每个非常大的表都使用单独的DMS表空间,而将所有的小表组合在单个SMS表空间中。这种分隔还允许您根据表空间的使用选择适当的扩展数据块大小。

表数据的类型

例如,有的表可能包含不经常使用的历史记录数据;最终用户可能愿意接受较长的响应时间,来等待对此数据执行的查询。在这种情况下,可以为历史记录表使用单独的一个表空间,并将此表空间分配给访问速率较低的较便宜的物理设备。

此外,对于某些表,数据快速以及快速响应时间是非常必要的,那么需要将这些表分配给一个快速物理设备的表空间中,这样将有助于支持这些重要的数据需要。如果可以的话,可以使用内存硬盘来存放访问最频繁的配置表、参数表等。

通过使用DMS表空间,还可以将表数据分发在3个不同的表空间中:一个存储索引数据;一个存储大对象(LOB)和长字段(LF)数据;一个存储常规表数据。这允许您选择表空间特征和支持最适合该数据的那些表空间的物理设备。例如,可能会将索引数据置于可找到的最快的设备上,这样性能可显著提高。如果将一个表分布在各个DMS表空间中,那么在启用表空间级备份恢复时,应考虑一起备份和复原那些表空间。SMS表空间不支持以此方式将数据分发在所有表空间中。

管理问题

某些管理功能可以在表空间级执行,但不能在数据库或表级执行。例如,备份表空间(而不是数据库)可以帮助您更好地利用时间和资源。它允许频繁地备份带有大量更改的表空间,同时仅偶尔地备份带有少量更改的表空间。

可以复原数据库或表空间。如果不相关的表在同一个表空间中,就可以选择复原数据库一个较小的部分以降低成本。一种好方法是将相关的表存放在一个表空间中。这些表可以通过参考约束相关,也可以通过定义的其他业务约束相关。

如果需要经常删除并重新创建特定表,那么应给这样的表单独创建一个DMS表空间,因为删除一个DMS表空间比删除一个表更有效率。

2. 选择合适的数据页大小

创建表空间时,需要考虑页大小。可以使用4KB、8KB、16KB或32KB页大小。我们在选择数据页大小时需要综合考虑空间需求和业务类型(性能需求)来做出选择。

空间需求

因为DB2中每个页大小限定了可以存储行的最大长度和存储表空间的最大值,所以我们选择数据页大小要考虑这些。对于4KB数据页来说,最多可以存放的行的长度是4005字节(4096-91头部;8KB为8192-91;依此类推),所以首先要根据行的长度来选择数据页大小。表3-3列出了每种数据页大小的空间使用限制,以及不同类型的表空间的数据库和索引页大小限制。

表3-3 表空间特定于页大小的限制

表空间类型

4KB

8KB

16KB

32KB

SMS表空间

64GB

128GB

256GB

512GB

DMS表空间(常规)

64GB

128GB

256GB

512GB

DMS表空间(大型)

2TB

4TB

8TB

16TB

自动存储器表空间(常规)

64GB

128GB

256GB

512GB

自动存储器表空间(大型)

2TB

4TB

8TB

16TB

临时表空间

64GB

128GB

256GB

512GB

 

如果数据页大小选择不当还可能造成空间浪费。例如,如果要使用32KB的页面大小的常规表空间来存储平均大小为100字节的行,则一个32KB的页只能存储100 * 255 = 25500 Byte (24.9 KB)。这意味着每32KB中就有大约7KB要浪费掉。而且DB2 V8之前的表空间存在着一个数据页最多存放255行的限制,所以建议创建表空间时,尽量创建大型表空间,大型表空间一个数据页可以存放更多的容量和行数。

业务类型

我们要根据我们的业务类型选择合适的数据页大小。通常的业务类型有OLTP、OLAP、批处理、报表,以及这几种业务混合的类型。下面我们来介绍主要业务类型的特点。

联机事务处理(OLTP)工作负载的特征是:事务需要对数据进行随机访问,通常涉及频繁插入或更新活动和返回一小组数据的查询。通常访问是随机的,并且是访问一页或几页,一般不太可能发生预存取(prefetch)。这里顺便讲一下,其实对于性能要求很高的OLTP应用,我们可以考虑把一些频繁访问的配置表、参数表等建在内存盘上。在AIX和Linux上都支持创建在内存上的硬盘,这样也可以大大提高速度。但是要注意保证数据的一致性。

使用裸设备容器的DMS表空间在这种情况下表现得最好。请注意,在FILE SYSTEM CACHING关闭的情况下,将DMS表空间与文件容器配合使用在某种程度上相当于DMS裸设备容器。如果业务逻辑存在大量的随机读,那么CREATE TABLESPACE语句中的EXTENTSIZE和PREFETCHSIZE参数的设置对于I/O的效率就显得不重要。但是使用chngpgs_thresh配置参数设置足够数目的页清理程序很重要。

OLAP查询工作负载的特征是:事务需要对数据进行顺序访问或部分顺序访问,并常常返回大的数据集。使用多个设备容器且每个容器都在单独的磁盘上的DMS表空间最有可能提供有效的并行预存取。应该将CREATE TABLESPACE语句中的PREFETCHSIZE参数的值设置为EXTENTSIZE参数的值乘以容器设备数之积。此外,可以将预取大小指定为-1,此时数据库管理器将自动(automatic)选择合适的预取大小。这允许数据库管理器以并行方式从所有容器中预取。如果容器的数目更改,或需要使预取更多或更少,那么可以使用ALTER TABLESPACE语句相应地更改PREFETCHSIZE值;如果把PREFETCHSIZE设置为AUTOMATIC,添加容器后,数据库会自动调整prefetchsize的大小,所以强烈建议把PREFETCHSIZE设置为AUTOMATIC或-1。

混合工作负载的目标是:对于OLTP工作负载,使单个I/O请求尽可能有效率;而对于查询工作负载,最大程度地提高并行I/O的效率。

选择表空间页大小的注意事项如下所示:

对于执行随机行读写操作的OLTP应用程序,通常最好使用较小的页大小(4KB、8KB),这样不需要的行就不会浪费缓冲池空间;

对于一次访问大量连续行的决策支持系统(DSS)和OLAP应用程序,页大小大一些(16KB、32KB)会比较好,这样就能减少读取特定数目的行所需的I/O请求数。较大的页大小还允许您减少索引中的层数,因为在一页中可以保留更多的行指针;

越大的页,支持的行越长。应根据业务需求来选择合适的数据页;

在默认的4KB页上,一个表只能有500列,而更大的页大小(8KB、16 KB和32 KB)支持1012列;

表空间的最大大小与表空间的页大小成正比,见表3-3。

3. 扩展数据块大小选择注意事项

EXTENTSIZE指定在跳到下一个容器之前,可以写入到一个容器中的PAGESIZE页面的数量。存储数据时数据库管理器反复均衡使用所有容器。该参数只有在表空间中有多个容器时才起作用。选择合理的EXTENTSIZE会对表空间的性能产生重大影响。因为这个参数是在创建表空间时定义的,之后不能修改,所以我们创建时必须选择合理的EXTENTSIZE。对于自动存储表空间来说,数据库自动选择EXTENT SIZE大小,对于非自动存储来说,我们选择EXTENTSIZE大小时必须综合考虑以下因素:

表空间的大小和类型

DMS表空间中的空间一次分配给表一个扩展数据块。当插入该表而一个扩展数据块变满时,会分配新的扩展数据块,直到彻底用完容器为止。

将SMS表空间中的空间一次分配给表一个扩展数据块或者一次分配给表一页。当插入该表而一个扩展数据块或页变满时,会分配新的扩展数据块或页,直到使用了文件系统中的所有扩展数据块或页为止。当使用SMS表空间时,允许进行多页文件分配(注:DB2 V8之前需要执行db2empfa激活多页分配,V8以后默认自动设置了多页分配)。多页文件分配允许分配扩展数据块而不是一次分配一页。

每个表对象都是单独存储的,每个对象按需要分配新的扩展数据块。每个DMS表对象还与称为扩展数据块映像的元数据对象配成一对,该元数据对象描述该表空间中属于该表对象的所有扩展数据块。用于扩展数据块映像的空间也是以一次一个扩展数据块的方式分配。因此,DMS表空间中对象的初始空间分配是两个扩展数据块(SMS表空间中对象的初始空间分配是一页)。

如果您在一个DMS表空间中有多个较小的表,那么可能要分配相对大的空间来存储相对少量的数据。在这种情况下,应该指定小的扩展数据块大小。另一方面,如果您有一个增长速率高的非常大的表,且您使用具有较小扩展数据块大小的DMS表空间,那么可能会产生与其他扩展数据块的频繁分配相关的不需要的开销。

下面的经验法则是建立在表空间中每个表的平均大小的基础上的:

如果小于50 MB,EXTENTSIZE为8

如果介于50到500MB之间,则EXTENTSIZE为16

如果介于500 MB到5GB之间,则EXTENTSIZE为32

如果大于5GB,则EXTENTSIZE为64

对这些表访问的类型

对于OLAP数据库和大部分对表的访问包括许多查询或处理大量数据的事务(仅限于查询)的表,或者增长速度很快的表,那么从表中预取数据可以显著改善性能,应使用较大的extent。反之,对于较小的频繁更改、频繁随机读取的小的配置表,建议使用较小的extent。

如果打算在表的设计中使用多维聚簇(MDC),扩展数据块就是一个重要的设计决定。MDC表将为创建的每个新的维集分配一个扩展数据块。如果扩展数据块太大,那么扩展数据块的很大一部分有可能是空的(对于包含很少记录的维集)。这会造成非常大的空间浪费。关于MDC及其对EXTENTSIZE的影响的更多信息请参见《深入解析DB2》一书。

 
 
 
 
 
 
 
 
 
 

TAG:

 

评分:0

我来说两句

日历

« 2024-04-25  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 34188
  • 日志数: 51
  • 建立时间: 2013-05-02
  • 更新时间: 2013-11-15

RSS订阅

Open Toolbar